因此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功能的核心庫here。您可以將其移植到您的functions{}
區塊。而在你斯坦計劃你走(我在chol()
假設COV矩陣是一個參數)
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
中解脫出來,並且爲了簡潔起見,希望能夠捕捉到使其工作所需的重要部分。
來源
2017-05-10 18:43:16
Sid
我沒有斯坦代碼,但這可能有幫助:http://www.anstuocmath.ro/mathematics/pdf10/83_96_RVernic.pdf。 –