因此该sn
包具有rmsn
清楚显示以下代码段的功能:
function (n = 1, xi = rep(0, length(alpha)), Omega, alpha, tau = 0, dp = NULL) {
//....
lot <- dp2cpMv(dp = dp0, family = "SN", aux = TRUE)
d <- length(dp0$alpha)
y <- matrix(rnorm(n * d), n, d) %*% chol(lot$aux$Psi)
//....
}
mvtnorm::rmvn
这与方法中的矩阵chol()
来自此处核心库中的 dp2cpMv 函数的工作方式非常相似。您可以将其移植到您的functions{}
块中。然后在你的 stan 程序中(我假设 cov 矩阵chol()
是一个参数)
functions {
// Contains code for your ported cholesky factor
}
transformed parameters {
matrix[K, J] z;
cholesky_factor_corr[K] L_tri = dp2cvClone(...); // Cholesky factor from your function{} block..
beta = foo + (L_tri * z)'; // Assuming foo is baseline parameter representing the mean of dimensionality J*K.
....
}
parameters {
matrix[K, J] beta; //# J levels/groups and K dimensional parameters
to_vector(z) ~ normal_pdf(0, 1);
....
}
此外,如果输入是数据,您可能希望将内容从转换的参数块转移到数据或转换的数据块dp2cvClone()
。但你明白了。最后一段代码摘自 stan 手册section 8.15
,并为简洁起见进行了解释,并希望捕捉到使其工作所需的重要部分。