为何statsmodels中test_normality与jarque_bera结果不一致?
SARIMAX test_normality 与 Jarque-Bera 直接调用结果差异的原因
核心差异来自残差的标准化处理:
- 直接调用
sm.stats.stattools.jarque_bera(best_model_fit.resid, axis=0)时,使用的是模型输出的原始残差序列。 - 而SARIMAX实例的
test_normality(method=None)方法内部,会先将残差除以模型拟合得到的标准差(即best_model_fit.scale),得到标准化残差后,再执行Jarque-Bera检验。
验证方法很直接:
- 提取标准化残差:
std_resid = best_model_fit.resid / best_model_fit.scale - 对标准化残差调用检验:
sm.stats.stattools.jarque_bera(std_resid, axis=0) - 此时输出结果会和
best_model_fit.test_normality(method=None)完全匹配。
另外需要明确:SARIMAX的resid属性本身就是模型的拟合残差(filtered residuals),这部分和test_normality内部使用的残差来源一致,差异仅在于是否做了标准化处理。查看statsmodels的SARIMAX源码,能直接看到test_normality方法里的标准化步骤。
内容的提问来源于stack exchange,提问作者Nihad Huseynov
相关产品推荐
相关产品推荐

