Selecionando componentes PCA que separam grupos

13

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

  1. em que medida isso é razoável / justificável e
  2. 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".R2

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].

insira a descrição da imagem aqui

Podemos classificar os componentes por para descobrir com quais exibir ; os três primeiros componentes são 2, 1 e 7.r2order( lm.r2, decreasing= TRUE )

pca3d( pca, components= c( 1, 2, 7 ), group= metabo[,1] )

Aqui está o enredo:

insira a descrição da imagem aqui

(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,

  1. 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 é
  2. 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.

janeiro
fonte
2
Eu gostaria de fazer apenas dois comentários sobre sua pergunta interessante. 1) Descreva em palavras sua abordagem, além de mostrar seu código (lembre-se de que as pessoas aqui usam vários softwares, não necessariamente R). 2) O gráfico de dispersão não é muito convincente sem picos no chão. Além disso, se você tiver alguma dúvida específica sobre sua abordagem, fale-as para tornar a pergunta mais focada.
ttnphns 27/09
1
editado: para esclarecer, primeiro você está conduzindo o PCA e depois tentando isolar os principais componentes que são melhor explicados por alguma variável específica? Você está validando-os com um gráfico de scree? Pode ser que alguns x que você escolhe em seu conjunto de dados expliquem muita variação no componente principal, mas não tenho certeza se isso significa alguma coisa se a variação for muito baixa nesse componente principal.
shadowtalker
1
@ssdecontrol Bem, eu estou fazendo um pobre mans randomização para ver se o calculado é bem acima do ruído de fundo. Quanto a saber se isso significa alguma coisa - o ponto é que geralmente significa, na verdade. Como estou fazendo todos os conjuntos de análises clássicas de qualquer maneira e / ou aprendizado de máquina supervisionado, sempre que vir que o PCX é explicado em uma parte significativa por um classificador, (i) encontrarei várias variáveis ​​que diferem entre os grupos desse classificador e ( ii) que posso treinar com sucesso uma SML. R2
janeiro
2
to find out what share of the overall variance in the data matrix is explained by a given classificationSe 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)/SStotalque SSwithin é a soma dos quadrados dentro do grupo.
ttnphns
1
Não vejo problemas com a maneira como você explora o PCA, mas não entendo por que você realmente precisa dele. (Só porque você gosta, talvez?) Porque não consigo ver seu objetivo preciso, não posso contar nada para você Is there anything better?.
ttnphns

Respostas:

8

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 quando n<<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.

ahfoss
fonte
2
Comecei uma nova recompensa para conceder esta resposta.
janeiro
1
@ Janeiro: Esta é uma boa resposta, mas eu gostaria de salientar que "LDA direto" é um algoritmo muito estranho, na melhor das hipóteses , veja Gao e Davis, 2005, Por que o LDA direto não é equivalente ao LDA : "demonstramos isso. .. O D-LDA pode impor uma limitação de desempenho significativa em aplicações gerais ", portanto, tenha cuidado com isso.
Ameba diz Reinstate Monica
@amoeba Obrigado por essa citação. Eu tenho preocupações com o DLDA há algum tempo, já que não há justificativa para selecionar componentes dessa maneira específica. Eu a vejo como uma solução muito específica para um problema que não necessariamente generaliza além dos problemas de discriminação enfrentados, embora possa ser facilmente adaptada a qualquer problema com algum conhecimento de quais componentes são mais úteis para discriminação. Toda solução que implementa discriminação de alta dimensão com uma estrutura de fatores assumida sofre de problemas ... você encontrou alguma abordagem melhor? Estou interessado na sua opinião aqui.
precisa saber é
nk
4

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:

nature of dependent variable (for supervised)     unsupervised    supervised
or structure of data (unsupervised)
continuous                                        PCA             PLS
factor/groups/classes                                             LDA

II

np

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 .

np

T=X×W
L=X×B .


L(n×k1)=T(n×m)B(m×k1)
L(n×k1)=X(n×p)W(p×m)B(m×k1)
L(n×k1)=X(n×p)B(p×k1)
LBBB pois se aplica ao espaço de pontuação do PLS e não ao espaço de dados original.

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,

  • não inseriu nenhum tipo de pré-processamento que envolva vários casos, como centralização ou padronização
  • não entrou no cálculo PCA / PLS / ....
  • não foi utilizado para a estimativa do hiperparâmetro.

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.

cbeleites suporta Monica
fonte
+1 para modelos de validação cruzada. Extremamente importante. No entanto, gostaria de ouvir OP @January, que afirmou que não está interessado em discriminação, embora seu problema pareça muito adequado à análise de discriminação / classificação.
ahfoss
Discordo de sua afirmação de que k-means / PCA / etc pertencem à mesma família. Isso implica que são casos especiais do mesmo modelo ou algoritmo, o que não é verdade. O algoritmo PCA é um cálculo de matriz simples, enquanto que k-means é um algoritmo iterativo que foi comparado ao algoritmo EM (não tecnicamente correto, pois não há função de probabilidade, mas ainda uma comparação útil em alguns aspectos, IMHO).
ahfoss
1
Você está se referindo à função plsgenomics :: pls.lda? Caso contrário, como o seu pacote é diferente / aprimorado? Também apontarei para os leitores interessados ​​que o PLS-LDA em geral é superior a uma técnica comumente usada para simplesmente executar o PLS com uma variável de resultado codificada por dummy. Embora essa última abordagem não seja necessariamente incorreta, ela é definitivamente desagradável, principalmente porque você pode obter probabilidades previstas menores que zero ou maiores que uma!
ahfoss
@ ahfoss: eu não quis dizer os algoritmos, pois o mesmo modelo subjacente pode ser calculado por algoritmos diferentes. Por exemplo, para PCA, você pode usar algoritmos iterativos (NIPALS, POWER) ou não iterativos (EVD, SVD). Talvez um termo melhor, em vez de k-médias, tivesse sido "análise de agrupamentos minimizando a soma de quadrados dentro do agrupamento, para a qual, por exemplo, k-médias é uma aproximação heurística". Não tenho tempo agora, procurarei a resposta mais tarde ou poderíamos nos encontrar na sala de bate-papo e encontrar uma descrição melhor.
cbeleites suporta Monica
1
... Uma diferença técnica é que eu uso pls::plsrpara 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.
cbeleites suporta Monica