Skip to content

Commit 961bc25

Browse files
author
Jonathan Bartlett
committed
Fixing cholesky decomposition issue when drawing from a multivariate normal distribution.
1 parent 9a37082 commit 961bc25

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

R/smcfcs.r

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ smcfcs <- function(originaldata,smtype,smformula,method,predictorMatrix=NULL,m=5
444444
sigmasq <- summary(ymod)$sigma^2
445445
varcov <- vcov(ymod)
446446
outcomeModResVar <- (sigmasq*ymod$df) / rchisq(1,ymod$df)
447-
outcomeModBeta = beta + chol((outcomeModResVar/sigmasq)*varcov) %*% rnorm(length(beta))
447+
covariance <- (outcomeModResVar/sigmasq)*vcov(ymod)
448+
outcomeModBeta = beta + MASS::mvrnorm(1, mu=rep(0,ncol(covariance)), Sigma=covariance)
448449
if (noisy==TRUE) {
449450
print(summary(ymod))
450451
}
@@ -732,7 +733,8 @@ smcfcs <- function(originaldata,smtype,smformula,method,predictorMatrix=NULL,m=5
732733
sigmasq <- summary(ymod)$sigma^2
733734
varcov <- vcov(ymod)
734735
outcomeModResVar <- (sigmasq*ymod$df) / rchisq(1,ymod$df)
735-
outcomeModBeta = beta + chol((outcomeModResVar/sigmasq)*varcov) %*% rnorm(length(beta))
736+
covariance <- (outcomeModResVar/sigmasq)*vcov(ymod)
737+
outcomeModBeta = beta + MASS::mvrnorm(1, mu=rep(0,ncol(covariance)), Sigma=covariance)
736738
outmodxb <- model.matrix(as.formula(smformula),imputations[[imp]]) %*% outcomeModBeta
737739
imputations[[imp]][imputationNeeded,outcomeCol] <- rnorm(length(imputationNeeded),outmodxb[imputationNeeded], sigmasq^0.5)
738740
}

0 commit comments

Comments
 (0)