You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Stan中实现任务绩效随时间变化的分层混合模型技术问询

嘿,我帮你把这个Stan分层混合模型的相关内容整理成规范的Markdown格式啦,这样不管是自己调试还是分享给同行都更清晰~

分层混合模型:任务绩效随时间变化的Stan实现

核心模型设定

  • 三个底层参数 dperf_int、dperf_sd 和 sf 被假定服从二元正态混合分布,因此在模型中为它们设定混合分布先验。
  • 另外两个仅在组层面估计的参数 perf1_int 和 perf1_sd,你已为其设定对应先验(可根据研究背景补充具体先验分布细节)。

模型代码示例

// 数据定义
data {
  int<lower=1> N;          // 总观测数
  int<lower=1> G;          // 分组数量
  int<lower=1, upper=G> group_id[N]; // 每个观测对应的组ID
  vector[N] time;          // 时间变量
  vector[N] performance;   // 任务绩效观测值
}

// 参数定义
parameters {
  // 组层面参数
  real perf1_int;
  real<lower=0> perf1_sd;
  
  // 底层混合参数
  vector[G] dperf_int;
  vector<lower=0>[G] dperf_sd;
  vector[G] sf;
  
  // 混合分布相关参数
  int<lower=1, upper=2> mix_component[G]; // 每组对应的混合成分
  simplex[2] mix_weight;                  // 混合权重
  vector[2] mu1;                          // 成分1的均值向量(对应二元正态)
  vector[2] mu2;                          // 成分2的均值向量
  matrix[2,2] Sigma1;                     // 成分1的协方差矩阵
  matrix[2,2] Sigma2;                     // 成分2的协方差矩阵
}

// 模型主体
model {
  // 组层面参数先验示例(可根据需求修改)
  perf1_int ~ normal(0, 5);
  perf1_sd ~ exponential(1);
  
  // 混合分布的先验设定
  mix_weight ~ dirichlet(rep_vector(1.0, 2));
  mu1 ~ normal(0, 5);
  mu2 ~ normal(0, 5);
  Sigma1 ~ inv_wishart(3, diag_matrix(rep_vector(1.0, 2)));
  Sigma2 ~ inv_wishart(3, diag_matrix(rep_vector(1.0, 2)));
  
  // 底层参数的混合先验
  for (g in 1:G) {
    vector[2] target_params = [dperf_int[g], sf[g]]'; // 对应二元混合的两个参数
    if (mix_component[g] == 1) {
      target_params ~ multi_normal(mu1, Sigma1);
    } else {
      target_params ~ multi_normal(mu2, Sigma2);
    }
    dperf_sd[g] ~ exponential(0.5); // 第三个参数单独设定先验
  }
  
  // 似然函数:任务绩效随时间变化的模型
  for (n in 1:N) {
    real perf_mean = perf1_int + dperf_int[group_id[n]] * time[n];
    real perf_var = perf1_sd + dperf_sd[group_id[n]] * time[n];
    performance[n] ~ normal(perf_mean, sqrt(perf_var));
  }
}

关键细节说明

  • 代码中针对 dperf_int 和 sf 实现了二元正态混合先验,dperf_sd 单独设定了指数先验,你可以根据实际研究目标调整混合覆盖的参数范围。
  • 用 mix_component[g] 标记每组所属的混合成分,通过条件判断实现混合分布的先验赋值;也可以用 log_mix 函数简化这部分代码,提升Stan的采样效率。
  • 协方差矩阵采用逆威沙特先验,混合权重采用Dirichlet先验,这些都属于贝叶斯分层模型的常规设定,可根据数据规模调整超参数。

内容的提问来源于stack exchange,提问作者Tim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:29:34