为什么通过协方差矩阵创建非奇异正态随机向量是不可能的?例如它无法执行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")
答案 0 :(得分:2)
首先,我假设你正在使用mvtnorm::rmvnorm
。当您指定method="chol"
时,rmvnorm
将使用Cholesky分解和旋转。这允许正半定矩阵,即,一些特征值可以在数值上为零。强调数字;你的最小特征值是-2.546e-15
,而负值是零到精度的极限。
如果您使用默认的method=eigen
,则在这种情况下会得到NaN
的矩阵,这可能更接近您的预期。
答案 1 :(得分:1)
当运行MASS :: rmvnorm为
时 rmvnorm(mu=rep(0,4),V=V,nsim=4,method="chol")
,
我得到了
chol.default(V)中的错误:订单4的前导次要不是 肯定的
,与运行chol(V)相同。我使用的是R 2.15.3。你能澄清一下这个问题吗?