我用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
答案 0 :(得分:1)
解决方案似乎是删除缺失值。有两种方法可以从数据集中删除缺失值。您可以在调用na.omit()
之前显式地使用princomp()
函数删除它们,也可以使用带有参数princomp()
的公式接口na.action=na.omit
。您已使用矩阵接口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)
应该这样做。