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

Stan模型含generated quantities模块时出现‘anon_model无样本’报错求助

问题解决:Stan模型generated quantities模块报错“does not contain samples”

核心错误原因

你的generated quantities模块调用binomial_rng时,传入的第二个参数是logit尺度的线性预测值(alpha + beta * treatment[i]),但binomial_rng要求第二个参数必须是**[0,1]区间内的概率值**。当logit值超出合理范围时,Stan无法生成有效样本,触发报错。

修正后的Stan模型代码

修改generated quantities模块,用inv_logit()函数将logit值转换为概率:

// The input data is an array 'treatment', 'total' and 'dead' of length 'N'.
data {
  int<lower=1> N;
  int<lower=0, upper=1> treatment[N];
  int<lower=0> total_cases[N];
  int<lower=0> dead_cases[N];
}

// The parameters accepted by the model. Our model
// accepts two parameters 'alpha' and 'beta'.
parameters {
  real<lower=0> alpha;
  real<lower=0> beta;
}


// 
model {
  for (i in 1:N) {
   dead_cases[i] ~ binomial_logit(total_cases[i], alpha + beta * treatment[i]);
  }
  // dead_cases ~ binomial_logit(total_cases, alpha + beta * treatment);
}

//
generated quantities {
  int dead_cases_sim[N];
  for (i in 1:N){
    // 用inv_logit将logit值转换为概率
    dead_cases_sim[i] = binomial_rng(total_cases[i], inv_logit(alpha + beta * treatment[i]));
  }
  // dead_cases_rep = binomial_rng(total_cases, inv_logit(alpha + beta * treatment));
}

额外优化建议

  1. 参数alpha和beta的<lower=0>约束意味着你假设对照组logit死亡概率为正(死亡概率>0.5),且治疗组死亡概率更高。如果这不符合你的先验假设,建议移除约束改为real alpha; real beta;,或根据医学知识设置合理先验分布。
  2. 可向量化generated quantities代码提升运行效率:
int dead_cases_sim[N] = binomial_rng(total_cases, inv_logit(alpha + beta * treatment));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 06:35:20