从离散观测参数推断连续潜在参数的Stan实现方法问询
离散化连续潜在参数模型的Stan实现
我们要实现的是一类观测值由连续潜在参数离散化得到的模型,具体例子如下:
观测值$J_i$与潜在变量$L_i$满足映射关系:
J_i = 1 当 L_i >= 1 J_i = -1 当 L_i < -1 J_i = 0 当 -1 <= L_i < 1
其中潜在变量$L_i = \mu + \epsilon_i$($\epsilon_i$默认取标准正态分布,可按需调整),目标是推断参数$\mu$。
完整Stan代码
data { int<lower=0> N; // 观测样本量 int<lower=-1, upper=1> J[N]; // 离散观测值 } parameters { real mu; // 待推断的参数 } model { // 先验分布:可根据实际需求调整,此处为弱信息先验 mu ~ normal(0, 5); // 遍历每个观测值,计算对应区间的概率并累加至目标对数密度 for (i in 1:N) { if (J[i] == 1) { target += 1 - normal_cdf(1, mu, 1); } else if (J[i] == -1) { target += normal_cdf(-1, mu, 1); } else { // J[i] == 0 target += normal_cdf(1, mu, 1) - normal_cdf(-1, mu, 1); } } }
代码关键说明
- 数据块:定义样本量
N和离散观测数组J,限定J的取值范围为{-1,0,1},避免非法输入。 - 参数块:仅定义待推断的核心参数$\mu$。
- 模型块:
- 先验分布:这里给$\mu$设定了宽范围的正态先验
normal(0,5),属于弱信息先验;若有领域知识支撑,可替换为更贴合实际的先验分布。 - 似然计算:针对每个观测值$J_i$的取值,利用正态分布累积分布函数
normal_cdf()计算潜在变量$L_i$落在对应区间的概率,并累加到目标对数密度target中,以此构建模型的似然部分。
- 先验分布:这里给$\mu$设定了宽范围的正态先验
内容的提问来源于stack exchange,提问作者OldMcFartigan
相关产品推荐
相关产品推荐

