在R中运行princomp()有什么问题?

时间:2014-05-02 05:35:33

标签: r infinite pca

我用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

1 个答案:

答案 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)

应该这样做。