使用Gibbs采样时,rtmvnorm()R中的模拟协方差矩阵产生NAs

使用Gibbs采样时,rtmvnorm()R中的模拟协方差矩阵产生NAs,r,matrix,covariance,na,R,Matrix,Covariance,Na,我正在构造一个协方差矩阵,我想使用R中tmvtnorm包中的rtmvnorm()函数来模拟多元截断正态分布的随机值。这里的值在1.0和10.0之间截断 到目前为止,我已经成功地构造了一个协方差矩阵,它是对称的,并且在一开始不是正定的情况下,后来被强制为正定的。但是,当我对cov矩阵('sigma')使用rtmvnorm()函数时,我不能使用Gibbs采样,因为这会产生NAs 在一些试验错误之后,我发现只有当我使用cor.sd=1的cov矩阵作为输入时,才会出现这个问题,该矩阵通过使用以下命令强制

我正在构造一个协方差矩阵,我想使用R中
tmvtnorm
包中的
rtmvnorm()
函数来模拟多元截断正态分布的随机值。这里的值在1.0和10.0之间截断

到目前为止,我已经成功地构造了一个协方差矩阵,它是对称的,并且在一开始不是正定的情况下,后来被强制为正定的。但是,当我对cov矩阵('sigma')使用
rtmvnorm()
函数时,我不能使用Gibbs采样,因为这会产生NAs

在一些试验错误之后,我发现只有当我使用cor.sd=1的cov矩阵作为输入时,才会出现这个问题,该矩阵通过使用以下命令强制为正定:

#function to create cov-var matrix sigma, where sd of correlations between distributions can be either 0 or 1.   
sig <- function(cor.mean, cor.sd, n, s2T){ 
if (cor.sd == 0){
c <- c(rep(cor.mean, n*n)) #creating correlation vector where correlations are equal
sigma <- matrix(c,n,n)
diag(sigma) <- 1
 }
if (cor.sd > 0){
c <- c(rnorm((n*(n-1))/2, mean = cor.mean, sd = cor.sd)) #creating correlation vector with varying correlations for one halve of matrix
sigma <- diag(n)
sigma[lower.tri(sigma, diag=F)] <- c
sigma <- forceSymmetric(sigma, "L") #creating symmetric cor matrix  
 }
s <- c(rep(sqrt(s2T), n)) #vector with SD for each test
D = diag(s)
sigma = D%*%sigma%*%D   #creating covariance matrix from correlation matrix & sd
return(list(first = as.matrix(sigma), second = c(mean(c), sd(c))))
}

#creating cov-var matrix
sigma <- sig(.7,1,8,1.5)$first    
sigma <- as.matrix(nearPD(sigma)$mat)
  a = c(rep(1.0, 8))
  b = c(rep(10.0, 8))
  mean = rnorm(8, 6.5, 1.5)
  t <- rtmvnorm(10, mean, sigma, lower = a, upper = b, algorithm = "gibbs")
  t
           [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
  [1,] 5.667528  Inf  NaN  NaN  NaN  NaN  NaN  NaN
  [2,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [3,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [4,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [5,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [6,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [7,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [8,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
  [9,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
 [10,]      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
不幸的是,鉴于我的录取率相当高,我不确定这个ABSEP代表什么,也不确定自己是否可以降低它。 总的来说,在我的协方差矩阵中使用
rtmvnorm()
似乎出现了一些错误,其中分布之间的相关性的sd等于1。我正在努力找出哪里出了问题。在此方面的任何帮助都将不胜感激

pmvnorm(lower = a, upper = b, mean = mean, sigma = sigma)
[1] 0.8911258
attr(,"error")
[1] 0.002500692
attr(,"msg")
[1] "Completion with error > abseps"