web-dev-qa-db-fra.com

La fonction R prcomp échoue avec les valeurs de NA même si les NA sont autorisés

J'utilise la fonction prcomp pour calculer les deux premiers composants principaux. Cependant, mes données ont des valeurs NA et donc la fonction génère une erreur. Le na.action défini ne semble pas fonctionner même s'il est mentionné dans le fichier d'aide ?prcomp

Voici mon exemple:

d <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10))

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

d$V1[5] <- NA
d$V2[7] <- NA

prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)

J'utilise la dernière version R 2.15.1 pour Mac OS X.

Quelqu'un peut-il voir la raison de l'échec de prcomp?

Voici mon nouvel exemple:

d <- data.frame(V1 = sample(1:100, 10), V2 = 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

est-il possible de conserver la ligne 5 dans PC1 et PC2? Dans mon ensemble de données réel, j'ai bien sûr plus de deux colonnes de variables et seulement certaines d'entre elles sont manquantes et je ne veux pas perdre les informations restantes cachées dans les autres valeurs!

24
user969113

Une autre solution si vous n'êtes pas disposé à utiliser l'interface de formule est

prcomp(na.omit(d), center = TRUE, scale = TRUE)

qui consistent à appliquer na.omit directement dans le bloc de données.

22
Jilber Urbina

Oui, cela ressemble à une "fonctionnalité" (bug) qui na.action est complètement ignoré sauf si vous utilisez l'interface formula. Cela a été évoqué auparavant sur la liste de développement R .

Je pense que cela devrait être documenté ou signalé comme un bug.

Juste pour être clair, cela fonctionnerait car il accède à l'interface de formule:

prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
22
nograpes