R function prcomp fails with NA's values even though NA's are allowed

徘徊边缘 提交于 2019-11-27 17:17:45

问题


I am using the function prcomp to calculate the first two principal components. However, my data has some NA values and therefore the function throws an error. The na.action defined seems not to work even though it is mentioned in the help file ?prcomp

Here is my example:

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)

I am using the newest R version 2.15.1 for Mac OS X.

Can anybody see the reason while prcomp fails?

Here is my new example:

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

is it possible to retain row 5 in PC1 and PC2? In my real data set I have of course more than two columns of variables and only some of them are missing and I do not want to lose the remaining information hidden in the other values!


回答1:


Another solution if you're not willing to use formula interface is

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

which consist of applying na.omit directly to the data frame.




回答2:


Yeah, it looks like a "feature" (bug) that na.action is completely ignored unless you use the formula interface. This has been brought up before on the R Development list.

I think that this should be documented or flagged as a bug.

Just to be clear, this would work because it accesses the formula interface:

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


来源:https://stackoverflow.com/questions/12078291/r-function-prcomp-fails-with-nas-values-even-though-nas-are-allowed

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!