rmvnorm包中的Cholesky分解

时间:2013-06-25 11:03:34

标签: r normal-distribution

为什么通过协方差矩阵创建非奇异正态随机向量是不可能的?例如它无法执行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")

2 个答案:

答案 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。你能澄清一下这个问题吗?