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

JAGS模型对数据不敏感求助:模型比较结果不受数据影响

问题根源与修正方案

你的核心问题是模型结构完全偏离了“对比两国成功率是否不同”的目标,当前模型是给法国、西班牙分别独立选择“固定成功率为c”或“自由估计成功率”的子模型,而非比较“两国成功率相同”vs“两国成功率不同”的全局模型,这直接导致了对称的后验结果,甚至模型指示变量完全不受数据影响。

具体问题拆解

  1. 模型目标错位
    你需要的是两个全局模型的比较:
  • M0:法国和西班牙的成功率相同($\theta_f = \theta_s$)
  • M1:法国和西班牙的成功率独立($\theta_f \neq \theta_s$)
    但你当前的代码给每个国家单独设置了模型指示变量mf/ms,相当于同时做两个独立的“单国家固定vs自由”模型比较,结构对称、先验一致,自然会得到完全相同的后验结果。
  1. 模型指示变量与似然脱节
    当你修改似然为z_F ~ dbin(theta_f, N_F)时,mf变量完全没有参与似然计算——不管mf取1还是2,似然都只依赖theta_f,因此mf的后验概率完全等于你设定的先验model_probs,完全不受数据影响。

修正后的模型代码

以下是符合你需求的JAGS模型,用于比较“两国成功率相同”vs“两国成功率不同”:

model {
  # 全局模型指示变量:1=两国成功率相同(M0),2=两国成功率不同(M1)
  m ~ dcat(model_probs[])
  
  # 先验定义
  # M0下共享一个theta
  theta_shared ~ dbeta(a, b)
  # M1下两国theta独立
  theta_f ~ dbeta(a, b)
  theta_s ~ dbeta(a, b)
  
  # 根据模型选择赋值
  theta_f_used <- ifelse(m == 1, theta_shared, theta_f)
  theta_s_used <- ifelse(m == 1, theta_shared, theta_s)
  
  # 似然
  z_F ~ dbin(theta_f_used, N_F)
  z_S ~ dbin(theta_s_used, N_S)
}

修正后的Python调用注意事项

  • 采样时需要跟踪变量m、theta_shared(如果需要)、theta_f、theta_s
  • 贝叶斯因子计算:假设先验model_probs = [0.5, 0.5],则贝叶斯因子BF_{10} = (P(M1|data)/P(M0|data)) / (P(M1)/P(M0)) = (post_m1 / post_m0),其中post_m1是采样中m==2的比例,post_m0是m==1的比例

原第二个模型的问题

你尝试的第二个模型同样错误:z_F直接用theta_f,z_m0f是冗余变量,既没有关联到模型指示变量mf的似然,也没有实现两国成功率的比较逻辑,因此同样无法得到正确结果。

内容的提问来源于stack exchange,提问作者Zoë Sandle

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:08:11