R中的主误差:协方差矩阵不是非负定的

  • 本文关键字:是非 方差矩 误差 r princomp
  • 更新时间 :
  • 英文 :


我有这个脚本,它对许多变量进行简单的PCA分析,并在最后将两个坐标和另外两列(存在,NZ_Field)附加到输出文件。我以前做过很多次,但现在它给了我这个错误:

我知道这意味着存在负的特征值。我看了一些类似的帖子,建议使用na.omit,但没有奏效。我在这里上传了"biodata.Rdata"文件:

协方差矩阵不是非负定

https://www.dropbox.com/s/1ex2z72lilxe16l/biodata.rdata?dl=0

我很确定这不是因为数据中缺少值,因为我使用了不同"presence"one_answers"NZ_Field"列的相同数据。

非常感谢您的帮助。

load("biodata.rdata")
#save data separately
coords=biodata[,1:2]
biovars=biodata[,3:21]
presence=biodata[,22]
NZ_Field=biodata[,23]
#Do PCA
bpc=princomp(biovars ,cor=TRUE)
#re-attach data with auxiliary data..coordinates, presence and NZ location data
PCresults=cbind(coords, bpc$scores[,1:3], presence, NZ_Field)
write.table(PCresults,file= "hlb_pca_all.txt", sep= ",",row.names=FALSE)

这似乎是缺少数据的问题,因此有几种方法可以处理它。一种方法是在运行PCA之前手动对数据进行列表删除,在您的情况下是:

biovars<-biovars[complete.cases(biovars),]

另一种选择是使用另一个包,特别是psych在这里似乎工作得很好,你可以使用principal(biovars),虽然输出有点不同,但它确实使用成对删除,所以基本上取决于你是想使用成对删除还是列表删除。谢谢

最新更新