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?
.Respostas:
A resposta para sua pergunta nº 1 é sim, sua solução equivale a dragagem de dados. A resposta para sua pergunta nº 2 é sim, existem métodos superiores na literatura.
O problema central da sua abordagem é que você não está lidando com o problema de dados de alta dimensão, ou seja, problemas que surgem quandon<<p
Você está executando uma análise que se assemelha à regressão de componentes principais, exceto que você trocou suas variáveis independentes e dependentes, resultando em uma grande análise de regressão multivariada (em oposição a múltipla ). A regressão multivariada exige que o tamanho da amostra seja maior que o número de variáveis dependentes, um requisito que você está violando completamente no seu exemplo.
Se você estiver realmente comprometido em executar o PCA em seus dados e, em seguida, usar a regressão multivariada, deverá usar um método apropriado. Por exemplo, consulte o MRCE e métodos relacionados [1].
No entanto, apesar de alguns comentários intrigantes que você fez, tudo em sua análise, como apresentado atualmente, sugere que seu objetivo final é identificar relações entre um grande conjunto de variáveis contínuas (metabo [, - 1]) e uma única variável categórica (metabo [ , 1]). O PCA é uma maneira ruim de conseguir isso. Existem duas classes gerais de soluções para esse problema no caso de alta dimensão: primeiro, soluções que assumem escassez e soluções que assumem uma estrutura fatorial.
As soluções baseadas na escassez normalmente assumem que apenas uma proporção muito pequena de variáveis está de fato relacionada à variável categórica de interesse e tentam encontrar esse pequeno subconjunto; por exemplo, veja DALASS [2]. Os métodos baseados em estrutura fatorial assumem que suas variáveis discriminadoras são manifestações de variáveis latentes subjacentes com um relacionamento verdadeiro com a variável categórica. Um exemplo dessa classe de métodos é o DLDA [3].
Note que eu sou não necessariamente recomendando quaisquer métodos que mencionei para seus dados; você deve considerar cuidadosamente suas metas e conhecimento a priori do problema ao selecionar um método apropriado.
[1] Rothman, Levina, Zhu (2010). Regressão multivariada esparsa com estimativa de covariância. Jornal de Estatísticas Gráficas e Computacionais, Volume 19, Número 4, Páginas 947–962.
[2] Nickolay T. Trendafilov, Ian T. Jolliffe, DALASS: Seleção variável em análise discriminante por meio do LASSO, Estatísticas Computacionais e Análise de Dados, Volume 51, Volume 51, Edição 8, 1º de maio de 2007, Páginas 3718-3736.
[3] Yu, Yang (2001). Um algoritmo LDA direto para dados de alta dimensão com aplicação para reconhecimento facial. Reconhecimento de Padrões 34, 2067-2070.
fonte
O @ahfoss já apontou o LDA como o análogo de classificação do PCA. Na verdade, esses dois métodos estão relacionados entre si e também com o PLS:
O PLS pode ser visto como uma regularização como o LASSO, e também o PLS esparso está disponível (embora eu não o tenha usado: meus dados são mais adequados ao PLS normal, o que não assume escassez). Para uma boa discussão sobre diferentes métodos de regularização, consulte, por exemplo, os Elementos de Aprendizagem Estatística .
Nota prática: caso você trabalhe em R, tenho um pacote em desenvolvimento que fornece os modelos PLS-LDA e PCA-LDA. Deixe-me saber se você gostaria de experimentá-lo.
Para evitar a dragagem de dados, você precisa validar seu modelo final (= medir seu desempenho) com dados independentes.
Independente aqui significa que este caso (paciente?) Não contribuiu para o ajuste do modelo de forma alguma . Em particular,
Como você tem apenas alguns casos, uma estratégia de reamostragem seria apropriada. Nessa situação, provavelmente é melhor corrigir qualquer hiperparâmetro (como número de PCs ou variáveis latentes do PLS ou o LASSO) por conhecimento externo, a fim de evitar uma segunda divisão interna dos dados de treinamento para a otimização do hiperparâmetro.
fonte
pls::plsr
para os pls (que permite escolher entre diferentes algoritmos). E eu tenho várias funções de pós-processamento, por exemplo, para virar e girar o modelo, o que às vezes é útil para interpretação.