在尝试为Dirichlet过程Gibbs Sampler编写代码时,使用Normal-Wishart模型,我得到了一个错误,即我想使用的矩阵作为后验的比例矩阵是不对称的。我自己也试了一下,得到了以下
is.symmetric.matrix(solve(cov(data)))
结果为FALSE作为输出。此外,cov(data)是一个对称矩阵,这应该使solve(cov(data))也是一个对称矩阵。虽然我尝试了基本包等效函数来检查矩阵是否对称
isSymmetric.matrix(solve(cov(data)))
我得到了一个TRUE作为答案
知道为什么会这样吗?
区别在于两个函数如何度量相等。
LaplacesDemon::is.symmetric.matrix
使用严格相等
return(sum(x == t(x)) == (nrow(x)^2))
在比较浮点数时可能会出现问题:参见为什么这些数字不相等?要使用这个函数,一种方法是将协方差矩阵舍入。
isSymmetric.matrix
使用all.equal
:如果数字等于一个公差
all.equal(object, t(object), tolerance = tol, ...)