STAN - 给定分类向量的实参数

STAN - Real parameter given a categorical vector

我是一个使用 stan 的初学者(顺便说一句,还有 Whosebug,我完全不知道你是如何在上面漂亮地打印数据框的,找不到如何,抱歉)。

假设我想制作以下模型:

y ~ normal(I*S + P*J,sigma)
P ~ normal(dP,1)

(为了简化这个例子,我将围绕 P 的偏差固定为 1)

一方面,I 是 n,p 矩阵预测变量,S 是相应的回归系数(大小 p)

另一方面,dP 和 J 只能有 3 个不同的值,但我的数据框是这样构造的(R 项目):

dp <- c(0,0,0,0,0,0,0,2,2,2,2,2,2,2,1,1,1,1,1,1)
J <- c(5.2,5.2,....,2.3,2.3,....,7.5,7.5,...)

参数为 S、P 和 sigma。

我不想让stan改变P的每一个组成部分,dp代表3种类型的数据,我只想要P的三个不同值对应于dp的3个不同值。 但是,我的数据框的每一行都包含不同的 I.

编辑:换句话说:对于每一行 k,我想要:

y[k] ~ I[k,1]*S[1]+I[k,2]*S[2]...+ real_value_P * J[k]

我怎样才能做到这一点?

这是我的代码:

data {
 int < lower = 1 > NR; // Number of rows
 int < lower = 1 > NC; // Number of columns
 
 matrix [NR,NC] I ;// Predictor I
 vector [NR] dP;
 vector [NR] J ;

 vector [NR] y; // Outcome
}

parameters {
 real < lower = 0 > sigma; // Error SD
 vector [NC] S ;
 vector [NC] P ;     
 }

model {
P ~ normal(dP,1)
y ~ normal(I*S+P*J,sigma) ;
}

我不确定我是否真的清楚,统计数据对我来说仍然是一个难题,我的模型比介绍的要复杂一些。

谢谢

“技巧”似乎在向量(此处为“索引”)中指示 P 取哪个值 (1,1,1,1,1,...2,2,2,2,2 ,...,3,3,3,3,3) 然后在参数中遍历它以分配正确的值:

transformed parameters {
 vector [NR] JP ; //J*P
 for (k in 1:NR){ 
        JP[k]=True_P[indices[k]]*J[k] ;
 }

因此完整的代码:

data {
 int < lower = 1 > NR; // Number of rows
 int < lower = 1 > NC; // Number of columns
 
 matrix [NR,NC] I ;// Predictor I
 
 int indices[NR]; // indices
 vector [3] P ; 
 vector [NR] dP ;
 vector [NR] J ; 

 vector [NR] y; // Outcome
}

parameters {
 real < lower = 0 > sigma; // Error SD
 vector < lower = 0 > [NC] S ;     // regression coefficients for predictors I
 vector [2] True_P ;
}

transformed parameters {
 vector [NR] JP ; //J*P
 for (k in 1:NR){ 
        JP[k]=True_P[indices[k]]*J[k] ;
 }

}

model {

for (k in 1:3){
P[k] ~ normal(True_P[k],1) ; 
}

y ~ normal(I*S+JP,sigma) ;
}

generated quantities {
} // The posterior predictive distributiondistribution