当协方差矩阵为零时,如何在 R 中使用 princomp () 函数?
在 R 中使用princomp()
函数时,遇到以下错误:“协方差矩阵不是非负定的”
。
我认为,这是由于协方差矩阵中的某些值为零(实际上接近于零,但在舍入期间变为零)。
当协方差矩阵包含零时,是否有解决方法可以继续进行 PCA?
[仅供参考:获取协方差矩阵是 princomp()
调用中的中间步骤。可以从此处下载重现此错误的数据文件 - http://tinyurl.com/6rtxrc3]
While using princomp()
function in R, the following error is encountered : "covariance matrix is not non-negative definite"
.
I think, this is due to some values being zero (actually close to zero, but becomes zero during rounding) in the covariance matrix.
Is there a work around to proceed with PCA when covariance matrix contains zeros ?
[FYI : obtaining the covariance matrix is an intermediate step within the princomp()
call. Data file to reproduce this error can be downloaded from here - http://tinyurl.com/6rtxrc3]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
第一个策略可能是减少容忍争论。在我看来,princomp 不会传递容差参数,但 prcomp 确实接受“tol”参数。如果无效,这应该识别协方差几乎为零的向量:
这将识别具有负特征值的向量:
使用帮助(qr)页面上的 h9 示例:
另一种方法可能是使用
别名
功能:The first strategy might be to decrease the tolerance argument. Looks to me that
princomp
won't pass on a tolerance argument but thatprcomp
does accept a 'tol' argument. If not effective, this should identify vectors which have nearly-zero covariance:And this would identify vectors with negative eigenvalues:
Using the h9 example on the help(qr) page:
Another approach might be to use the
alias
function: