0

为什么可以通过不是正定的协方差矩阵来创建非奇异正态随机向量?例如它不可能执行chol(V)

pigeon<-data.frame(response=c(10,19,27,28,9,13,25,29,4,10,20,18,5,6,12,17),
               treatment=factor(rep(1:4,4)),
               subject=factor(rep(1:4,each=4))
               )
m<-dcast(pigeon,subject~treatment, value.var="response")
fit<-lm(as.matrix(m[,-1])~1)
V<-cov(residuals(fit))
eigen(V)$values
rmvnorm(mean=rep(0,4),sigma=V,n=subject,method="chol")
4

2 回答 2

2

首先,我假设您正在使用mvtnorm::rmvnorm. 当您指定 时method="chol"rmvnorm将使用带有旋转的 Cholesky 分解。这允许半正定矩阵,即一些特征值可以在数值上为零。强调数字;您的最小特征值是-2.546e-15负值为零到精度极限。

如果您使用 default method=eigen,在这种情况下您会得到一个 s 矩阵,NaN它可能更接近您的预期。

于 2013-06-27T16:14:04.270 回答
1

运行 MASS::rmvnorm 时

rmvnorm(mu=rep(0,4),V=V,nsim=4,method="chol"),

我明白了

chol.default(V) 中的错误:4 阶的前导次要不是正定的

,与运行 chol(V) 相同。我正在使用 R 2.15.3。你能澄清一下这个问题吗?

于 2013-06-27T15:57:21.347 回答