Eu usei a prcomp()
função para executar um PCA (análise de componentes principais) em R. No entanto, há um erro nessa função, de modo que o na.action
parâmetro não funciona. Eu pedi ajuda no stackoverflow ; dois usuários ofereceram duas maneiras diferentes de lidar com NA
valores. No entanto, o problema com as duas soluções é que, quando existe um NA
valor, essa linha é descartada e não é considerada na análise do PCA. Meu conjunto de dados real é uma matriz de 100 x 100 e não quero perder uma linha inteira apenas porque contém um único NA
valor.
O exemplo a seguir mostra que a prcomp()
função não retorna nenhum componente principal para a linha 5, pois contém um NA
valor.
d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10),
V3 = sample(1:100, 10))
result <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x # $
d$V1[5] <- NA # $
result <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x
Eu queria saber se posso definir os NA
valores para um valor numérico específico quando center
e scale
são definidos para TRUE
que a prcomp()
função funcione e não remova linhas contendo NA
s, mas também não influencie o resultado da análise do PCA.
Pensei em substituir NA
valores pelo valor mediano em uma única coluna ou com um valor muito próximo de 0. No entanto, não tenho certeza de como isso influencia a análise do PCA.
Alguém pode pensar em uma boa maneira de resolver esse problema?
fonte
NA
valores significam : qual é a causa da "falta"?Respostas:
De fato, existe uma maneira bem documentada de lidar com matrizes gappy - você pode decompor uma matriz de covariância calculada a partir dos dados X , que é dimensionada pelo número de valores compartilhados n : C = 1C X n
e expanda os coeficientes principais por meio de um ajuste de mínimos quadrados (como menciona @ user969113). Aqui está um exemplo .
prcomp
Atualizar
Outra opção para a condução do PCA em um conjunto de dados vazio é "Funções ortogonais empíricas subtraídas recursivamente" (Taylor et al. 2013). Ele também corrige alguns dos problemas na abordagem dos mínimos quadrados e é computacionalmente muito mais rápido que o DINEOF. Este post compara as três abordagens em termos de precisão da reconstrução de dados usando os PCs.
Referências
Beckers, Jean-Marie e M. Rixen. "Cálculos EOF e preenchimento de dados de conjuntos de dados oceanográficos incompletos." Jornal da tecnologia atmosférica e oceânica 20.12 (2003): 1839-1856.
Taylor, M., Losch, M., Wenzel, M., & Schröter, J. (2013). Sobre a sensibilidade da reconstrução e previsão de campo usando Funções Ortogonais Empíricas derivadas de dados lacrimejantes. Jornal do Clima, 26 (22), 9194-9205.
fonte
Minha sugestão depende de quantos dados estão faltando e por que estão faltando. Mas isso não tem nada a ver com PCA, realmente. Se houver muito poucos dados ausentes, não importará muito o que você faz. Substituir pela mediana não é o ideal, mas se não houver muita falta, não será muito diferente de uma solução melhor. Você pode tentar executar o PCA com substituição mediana e exclusão listwise e ver se há grandes diferenças nos resultados.
Em seguida, se houver mais dados ausentes, considere se eles estão faltando completamente aleatoriamente, ausentes aleatoriamente ou não ausentes aleatoriamente. Eu sugeriria a imputação múltipla nos dois primeiros casos e algumas vezes no terceiro caso - a menos que os dados sejam altamente distorcidos por seu status NMAR, acho que a imputação múltipla será melhor do que a exclusão listwise (Joe Schafer, da Penn State, fez uma muito trabalho com dados ausentes - lembro-me de alguns trabalhos dele mostrando que a imputação múltipla funcionou muito bem mesmo em alguns casos NMAR). No entanto, se os dados forem MCAR ou MAR, as propriedades da imputação múltipla podem ser comprovadas.
Se você optar por usar o MI, uma observação deve ser cuidadosa, pois os sinais dos componentes no PCA são arbitrários e uma pequena alteração nos dados pode virar um sinal. Então, quando você faz o PCA, obtém um disparate. Há muito tempo, trabalhei em uma solução no SAS - não é difícil, mas é algo para ter cuidado.
fonte
Não há solução correta para o problema. Todas as coordenadas do vetor devem ser especificadas para obter o conjunto correto de componentes principais. Se uma coordenada estiver ausente e substituída por algum valor imputado, você obterá um resultado, mas isso dependerá do valor imputado. portanto, se houver duas opções razoáveis para o valor imputado, as diferentes opções fornecerão respostas diferentes.
fonte
Um artigo recente que analisa abordagens para lidar com valores ausentes nas análises de PCA é "Análise de componentes principais com valores ausentes: uma pesquisa comparativa de métodos" por Dray & Josse (2015) . Dois dos métodos mais conhecidos dos métodos PCA que permitem valores ausentes são o algoritmo NIPALS, implementado na
nipals
função doade4
pacote, e o PCA iterativo (Ipca ou EM-PCA), implementado naimputePCA
função domissMDA
pacote. O artigo concluiu que o método Ipca teve melhor desempenho sob a mais ampla gama de condições.Para o seu exemplo, a sintaxe é:
Para NIPALS:
Para Ipca:
fonte