【发布时间】:2014-11-27 17:58:29
【问题描述】:
我正在尝试使用取决于某个随机向量 z 的 sigma 创建截断的多元正态 r.vector。由于最初的 sigma(在我的代码中称为 nn)不是正定的,所以我使用了函数 make.positive.definite(),然后我得到 nn 是正定的(并且是对称的)。
但在调用rtmvnorm 时出现以下错误:
“checkSymmetricPositiveDefinite(sigma) 中的错误 -sigma 必须是正定的”。
知道可能出了什么问题吗?
library(tmvtnorm)
library(matrixcalc)
library(corpcor)
zmean <- rep(0, 100)
zSigma <- diag(100)
z <- rmvnorm(n=1, mean=zmean, sigma=zSigma)
umean <- rep(0, 100)
usigma <- exp(-0.5 * rep(1, 100) + z)
nn <- t(usigma) %*% usigma
is.positive.definite(nn)
nn <- make.positive.definite(nn)
is.positive.definite(nn)
isSymmetric(nn)
a <- rep(0,100)
b <- rep(+Inf, 100)
U <- rtmvnorm(n=1, mean=umean, sigma=nn, lower=a, upper=b, algorithm="gibbs")
【问题讨论】:
-
不知道,但也许你可以试试
Matrix::nearPD,用ensureSymmetry=TRUE代替? -
它似乎没有帮助,假设我以正确的方式使用 nearPD...