Stan避坑:别这样建模

Stan避坑的核心不是背更多语法,而是知道哪些写法会让采样器痛苦。很多模型看起来数学没错,跑起来却Rhat飘、ESS低、满屏divergence。下面我按几个高发坑逐项拆开讲。

宽先验 vs 合理弱信息先验

新手最爱写uniform(0,1000),以为这叫客观。Stan避坑第一条:过宽先验经常不是中立,而是把采样器扔进一片巨大荒地。尤其是尺度参数,后验会出现长尾、漏斗形几何结构,NUTS走得很难受。

更稳的做法是把变量标准化,再给弱信息先验。比如回归系数用normal(0,1)或normal(0,2),标准差用exponential(1)或normal(0,1)截正。先验不是拍脑袋,最好能转成原始量纲问一句:这个范围在业务上离谱吗?

中心化层级 vs 非中心化层级

层级模型里,中心化写法直观:theta[j] ~ normal(mu, tau)。数据充足时它很好;数据稀疏、组内样本少时,就容易形成著名的funnel,divergence跟着来。

非中心化写法是theta = mu + tau * z,z ~ normal(0,1)。它让采样空间更规整。经验上,每组数据少、层级方差不确定时先试非中心化;每组样本很多时中心化可能更快。别迷信某一种,诊断结果说了算。

想要完整资源?

会员专享,海量内容

立即查看 →

原始尺度建模 vs 标准化建模

如果一个自变量是收入,范围从几千到几十万,另一个是0到1的比例,直接丢进Stan,采样器要同时处理很不一样的曲率。结果就是步长变小,采样慢,ESS难看。

标准化不是为了让结果变神秘,而是让几何形状更友好。连续自变量减均值除标准差,响应变量必要时也缩放。汇报时再把结果换回原始尺度。这个小动作能省掉大量无意义的调参。

只看参数表 vs 做后验预测检查

Stan跑完给你一张参数摘要表,均值、中位数、区间都很整齐。但模型可能完全不贴数据。只看参数显著不显著,是把贝叶斯工具用成了传统回归表生成器。

后验预测检查要看模拟出来的数据像不像真实数据:均值、极值、零值比例、分组差异、时间趋势。比如真实数据有很多零,模型预测几乎没有零,那参数再漂亮也没用。

硬调adapt_delta vs 修模型

遇到divergence,很多人第一反应是把adapt_delta从0.8调到0.99。这个办法有时有效,但它像把车开慢,不等于路修好了。divergence集中在某些参数区域时,通常说明模型几何有问题。

正确顺序是看pairs图或诊断图,检查先验、尺度、参数化,再决定是否提高adapt_delta或max_treedepth。Stan避坑最重要的心态是:采样警告不是烦人的噪音,它在告诉你模型哪儿不舒服。

常见问题

Stan出现divergent transitions还能用结果吗?

少量也不能直接忽略。先定位它们集中在哪些参数区域,尝试重参数化、收紧不合理先验、标准化变量。修完后重新采样再解释结果。

Stan里先验越宽越客观吗?

不是。过宽先验可能制造数值问题,还会把不现实的参数区域纳入计算。弱信息先验通常比“无限宽”的先验更可靠。

Rhat等于1就代表模型正确吗?

不代表。Rhat只说明多条链混合情况较好,不说明模型贴合数据。还要看ESS、divergence、后验预测检查和业务解释。

获取完整内容

加入会员,海量资源任你看

立即进入 →