Eu costumava diagnosticar meus dados multivariados usando o PCA (dados omicos com centenas de milhares de variáveis e dezenas ou centenas de amostras). Os dados geralmente vêm de experimentos com várias variáveis independentes categóricas que definem alguns grupos, e muitas vezes tenho que passar por alguns componentes antes de encontrar aqueles que mostram uma separação entre os grupos de interesse. Eu inventei uma maneira bastante primitiva de encontrar componentes tão discriminatórios, e me pergunto
- em que medida isso é razoável / justificável e
- se existem maneiras melhores de conseguir o mesmo.
Observe que isso é exploratório. Antes de convencer mais alguém, quero me convencer. Se vejo que existem componentes que distinguem claramente os grupos de interesse (por exemplo, controle x tratamento), mesmo que sejam responsáveis por uma parte menor da variação das respostas, confio mais no que o resultado de, digamos, máquina supervisionada Aprendendo.
Aqui está a minha abordagem. Vou usar o conjunto de dados de exemplo "metabo" de pca3d em R.
A idéia é avaliar quanta variação de cada componente pode ser explicada pela variável independente. Para isso, eu calcular um modelo simples para cada componente e utilização como uma métrica para ordenar os componentes de "mais interessante" para "menos interessante".
require( pca3d )
# data on metabolic profiles of TB patients and controls
data( metabo )
# first column is the independent variable
pca <- prcomp( metabo[,-1], scale.= T )
# create a model for each component
lm.m <- lm( pca$x ~ metabo[,1] )
lm.s <- summary( lm.m )
lm.r2 <- sapply( lm.s, function( x ) x$r.squared )
plot( lm.r2, type= "l" )
text( 1:length( lm.r2 ), lm.r2, 1:length( lm.r2 ), pos= 3 )
Aqui está o resultado. O gráfico mostra a porcentagem de variação de cada componente explicada pela variável independente in metabo[,1]
.
Podemos classificar os componentes por para descobrir com quais exibir ; os três primeiros componentes são 2, 1 e 7.order( lm.r2, decreasing= TRUE )
pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )
Aqui está o enredo:
(As categorias vermelho e verde são dois grupos de sujeitos que não são pacientes, e é de se esperar que não possam ser distinguidos.)
Para reformular minhas perguntas,
- Essa abordagem faz sentido para você? Meu problema é que ele se parece muito com a dragagem de dados. Além disso, intuitivamente, acho que talvez deva virar a mesa e perguntar que parte da variação na variável independente é explicada por cada variável. Finalmente, tenho (quase) certeza de que estou reinventando mal a roda, então minha segunda pergunta é
- Existe coisa melhor?
Observe que eu não quero mudar para mínimos quadrados parciais ou algo semelhante nesse estágio; Eu só quero diagnosticar o PCA no contexto da minha classificação.
to find out what share of the overall variance in the data matrix is explained by a given classification
Se quiser saber exatamente isso, você não precisa de um PCA. Apenas calcule a proporção da soma dos quadrados entre os grupos e a soma dos quadrados total: em (SStotal-SSwithin)/SStotal
que SSwithin é a soma dos quadrados dentro do grupo.
Is there anything better?
.