J'ai utilisé la prcomp()
fonction pour effectuer une PCA (analyse des composants principaux) dans R. Cependant, il y a un bogue dans cette fonction, de sorte que le na.action
paramètre ne fonctionne pas. J'ai demandé de l'aide sur stackoverflow ; deux utilisateurs y ont proposé deux manières différentes de gérer les NA
valeurs. Cependant, le problème avec les deux solutions est que lorsqu'il existe une NA
valeur, cette ligne est supprimée et n'est pas prise en compte dans l'analyse PCA. Mon véritable ensemble de données est une matrice de 100 x 100 et je ne veux pas perdre une ligne entière simplement parce qu'elle contient une seule NA
valeur.
L'exemple suivant montre que la prcomp()
fonction ne renvoie aucun composant principal pour la ligne 5 car elle contient une NA
valeur.
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
Je me demandais si je pouvais définir les NA
valeurs à une valeur numérique spécifique quand center
et si elles scale
sont définies pour TRUE
que la prcomp()
fonction fonctionne et ne supprime pas les lignes contenant NA
des, mais n'influence pas non plus le résultat de l'analyse PCA.
J'ai pensé à remplacer les NA
valeurs par la valeur médiane sur une seule colonne, ou par une valeur très proche de 0. Cependant, je ne sais pas comment cela influence l'analyse PCA.
Quelqu'un peut-il penser à une bonne façon de résoudre ce problème?
la source
NA
valeurs : quelle est la cause du "manque"?Réponses:
Il existe en fait un moyen bien documenté de gérer les matrices gappy - vous pouvez décomposer une matrice de covariance construite à partir de vos données , qui est mise à l'échelle par le nombre de valeurs partagées :X n C = 1C X n
puis développez les coefficients principaux via un ajustement par moindres carrés (comme le mentionne @ user969113). Voici un exemple .
Cependant, cette méthode pose plusieurs problèmes liés au fait que la matrice de covariance n'est plus définie semi-positive et que les valeurs propres / singulières ont tendance à être gonflées. Une bonne revue de ces problèmes peut être trouvée dans Beckers et Rixen (2003) , où ils proposent également une méthode d'interpolation optimale des lacunes manquantes - DINEOF (Data Interpolating Empirical Orthogonal Functions). J'ai récemment écrit une fonction qui exécute DINEOF , et cela semble vraiment être une bien meilleure façon de procéder. Vous pouvez exécuter DINEOF sur votre ensemble de données directement, puis utiliser l'ensemble de données interpolé comme entrée dans .X
prcomp
Mise à jour
Une autre option pour la réalisation de l'ACP sur un ensemble de données gappy est «Fonctions orthogonales empiriques soustraites récursivement» (Taylor et al. 2013). Il corrige également certains des problèmes de l'approche des moindres carrés et est beaucoup plus rapide sur le plan informatique que DINEOF. Cet article compare les trois approches en termes de précision de la reconstruction des données à l'aide des PC.
Les références
Beckers, Jean-Marie et M. Rixen. "Calculs EOF et remplissage de données à partir de jeux de données océanographiques incomplets." Journal of Atmospheric and Oceanic Technology 20.12 (2003): 1839-1856.
Taylor, M., Losch, M., Wenzel, M. et Schröter, J. (2013). Sur la sensibilité de la reconstruction et de la prédiction sur le terrain à l'aide de fonctions orthogonales empiriques dérivées de données gappy. Journal of Climate, 26 (22), 9194-9205.
la source
Ma suggestion dépend de la quantité de données manquantes et de la raison pour laquelle elles sont manquantes. Mais cela n'a rien à voir avec PCA, vraiment. S'il manque très peu de données, peu importe ce que vous faites. Remplacer par la médiane n'est pas idéal, mais s'il ne manque pas grand-chose, ce ne sera pas très différent d'une meilleure solution. Vous pouvez essayer de faire l'ACP avec un remplacement médian et une suppression par liste et voir s'il y a des différences majeures dans les résultats.
Ensuite, s'il manque plus de données, vous devez déterminer si elles manquent complètement au hasard, manquent au hasard ou ne manquent pas au hasard. Je suggérerais l'imputation multiple dans les deux premiers cas et parfois dans le troisième cas - à moins que les données ne soient fortement déformées par leur statut NMAR, je pense que l'imputation multiple sera meilleure que la suppression par liste (Joe Schafer de Penn State a fait un beaucoup de travail sur les données manquantes - je me souviens de certains de ses travaux montrant que l'imputation multiple fonctionnait assez bien même dans certains cas NMAR). Cependant, si les données sont MCAR ou MAR, les propriétés de l'imputation multiple peuvent être prouvées.
Si vous décidez d'aller avec MI, une note doit être prudente car les signes des composants dans PCA sont arbitraires, et un petit changement dans les données peut retourner un signe. Ensuite, lorsque vous effectuez l'APC, vous obtenez un non-sens. Il y a longtemps, j'ai élaboré une solution en SAS - ce n'est pas difficile, mais c'est quelque chose à faire attention.
la source
Il n'y a pas de solution correcte au problème. Chaque coordonnée dans le vecteur doit être spécifiée pour obtenir le bon ensemble de composants principaux. Si une coordonnée est manquante et remplacée par une valeur imputée, vous obtiendrez un résultat, mais cela dépendra de la valeur imputée. donc s'il y a deux choix raisonnables pour la valeur imputée, les différents choix donneront des réponses différentes.
la source
Un article récent qui passe en revue les approches pour traiter les valeurs manquantes dans les analyses de l'ACP est «Analyse en composantes principales avec valeurs manquantes: une étude comparative des méthodes» par Dray et Josse (2015) . L'algorithme NIPALS, implémenté dans la
nipals
fonction duade4
package, et le PCA itératif (Ipca ou EM-PCA), implémenté dans laimputePCA
fonction dumissMDA
package, sont deux des méthodes les plus connues des méthodes PCA qui permettent les valeurs manquantes . Le document concluait que la méthode Ipca donnait les meilleurs résultats dans le plus large éventail de conditions.Pour votre exemple de syntaxe:
Pour NIPALS:
Pour Ipca:
la source