JAGS模型对数据不敏感求助:模型比较结果不受数据影响
问题根源与修正方案
你的核心问题是模型结构完全偏离了“对比两国成功率是否不同”的目标,当前模型是给法国、西班牙分别独立选择“固定成功率为c”或“自由估计成功率”的子模型,而非比较“两国成功率相同”vs“两国成功率不同”的全局模型,这直接导致了对称的后验结果,甚至模型指示变量完全不受数据影响。
具体问题拆解
- 模型目标错位
你需要的是两个全局模型的比较:
- M0:法国和西班牙的成功率相同($\theta_f = \theta_s$)
- M1:法国和西班牙的成功率独立($\theta_f \neq \theta_s$)
但你当前的代码给每个国家单独设置了模型指示变量mf/ms,相当于同时做两个独立的“单国家固定vs自由”模型比较,结构对称、先验一致,自然会得到完全相同的后验结果。
- 模型指示变量与似然脱节
当你修改似然为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
相关产品推荐
相关产品推荐

