我使用princomp()运行PCA。我的数据集叫做vt。
pca = princomp(as.matrix(vt))
Error in cov.wt(z) : 'x' must contain finite values only
但是,当我检查是否有无限大的值时,却没有。
sum(is.infinite(as.matrix(vt)))
[1] 0
我的分析出了什么问题?
vt是一个包含所有数值的data.frame。
is.numeric(as.matrix(vt))
[1] TRUE
发布于 2014-05-03 16:21:09
解决方案似乎是删除缺少的值。有两种方法可以从数据集中删除缺失值。您可以在调用princomp()
之前使用na.omit()
函数显式删除它们,也可以使用带有参数na.action=na.omit
的princomp()
的公式接口。您已经对princomp()
使用了矩阵接口,而na.action
不是矩阵接口的选项,因此它在您的情况下不起作用。有关更多详细信息,请参见?princomp。
请考虑以下几点:
# Add one missing value to USArrests data set
USArrests[1,1]<-NA
# Does not work (matrix interface)
princomp(USArrests)
# Error in cov.wt(z) : 'x' must contain finite values only
# Does work (formula interface)
princomp(~., data=USArrests, na.action=na.omit)
# Does work (remove missing values before PCA)
princomp(na.omit(USArrests))
因此,在您的示例中,如下所示:
pca = princomp(~., data=as.matrix(vt), na.action=na.omit)
应该能行得通。
https://stackoverflow.com/questions/23421438
复制相似问题