【发布时间】:2012-04-30 15:41:33
【问题描述】:
我正在尝试使用 R 中的princomp 函数进行 PCA 分析。
以下是示例代码:
mydf <- data.frame (
A = c("NA", rnorm(10, 4, 5)),
B = c("NA", rnorm(9, 4, 5), "NA"),
C = c("NA", "NA", rnorm(8, 4, 5), "NA")
)
out <- princomp(mydf, cor = TRUE, na.action=na.exclude)
Error in cov.wt(z) : 'x' must contain finite values only
我试图从数据集中删除NA,但它不起作用。
ndnew <- mydf[complete.cases(mydf),]
A B C
1 NA NA NA
2 1.67558617743171 1.28714736288378 NA
3 -1.03388645096478 9.8370942023751 10.9522215389562
4 7.10494481721949 14.7686678743866 4.06560213642725
5 13.966212462717 3.92061729913733 7.12875100279949
6 -1.91566982754146 0.842774330179978 5.26042516598668
7 0.0974919570675357 5.5264365812476 6.30783046905425
8 12.7384749395121 4.72439301946042 2.9318845479507
9 13.1859349108349 -0.546676530952666 9.98938028956806
10 4.97278207223239 6.95942086859593 5.15901566720956
11 -4.10115142119221 NA NA
即使我可以删除NA,它也可能无济于事,因为每一行或每一列都至少有一个缺失值。是否有任何 R 方法可以对数据进行 PCA 分析?
更新:基于答案:
> mydf <- data.frame (A = c(NA, rnorm(10, 4, 5)), B = c(NA, rnorm(9, 4, 5), NA),
+ C = c(NA, NA, rnorm(8, 4, 5), NA))
> out <- princomp(mydf, cor = TRUE, na.action=na.exclude)
Error in cov.wt(z) : 'x' must contain finite values only
ndnew <- mydf[complete.cases(mydf),]
out <- princomp(ndnew, cor = TRUE, na.action=na.exclude)
这可行,但默认的na.action 不起作用。
是否有任何方法可以估算数据,因为在实际数据中,我几乎每列都缺少值?这种NA 遗漏的结果会给我〜0行或列。
【问题讨论】:
-
我在下面的回答解决了您关于如何使
na.action参数起作用的“小”问题。对于您的大问题,关于当您的数据包含许多 NA 时如何继续,快速谷歌搜索“缺失值 pca”会发现大量有用的点击,包括 [这个 R 函数]{rss.acs.unt.edu/Rdoc/library/pcaMethods/html/bpca.html}。如果您在做一些研究后仍然需要帮助,我会前往 stats.stackexchange.com ,因为这确实是一个统计问题。 -
@JoshO'Brien 谢谢乔希,感谢您的帮助..我在这个问题上一头雾水...现在我有了明确的道路
标签: r dataframe pca na princomp