Statsmodels OLS摘要与resid.kurtosis()峰度结果不一致,咨询可靠性及提取方法
问题解答
1. 峰度数值差异的原因
statsmodels OLS摘要中的Kurtosis(2.726)是原始峰度(皮尔逊峰度),而res.resid.kurtosis()(-0.264)和scipy的stats.kurtosis()(-0.274)默认返回的是超额峰度(减去3后的结果)。两者的换算关系为:
原始峰度 = 超额峰度 + 3
你的案例中:-0.274 + 3 ≈ 2.726,和摘要数值完全匹配,说明差异只是计算定义不同,并非方法错误。
2. 哪个结果更可靠?
两种结果都是正确的,选择取决于你的需求:
- 若需要和OLS摘要一致的统计量,使用原始峰度(2.726);
- 若需要衡量数据相对于正态分布的峰度偏离(正态分布超额峰度为0),使用超额峰度(-0.264/-0.274)。
pandas和scipy的结果略有差异,是因为两者计算标准差时的自由度设置不同:pandas的kurtosis()默认用样本标准差(ddof=1),scipy的stats.kurtosis()默认用总体标准差(ddof=0),调整自由度后结果会完全一致。
3. 如何提取OLS摘要中的峰度结果?
有两种可靠方式:
- 直接从结果对象提取:statsmodels的OLS结果对象提供了
kurtosis属性,直接调用res.kurtosis即可获取和摘要一致的原始峰度值; - 手动计算:如果需要自定义计算,用原始峰度公式(注意使用总体标准差,分母为样本量n):
import numpy as np resid = res.resid mean = resid.mean() std = resid.std(ddof=0) # 总体标准差,分母为样本量n kurtosis_raw = ((resid - mean)**4).sum() / (len(resid) * std**4)
4. 偏度的验证
你可以将res.resid.skew()的结果和OLS摘要中的Skewness对比:两者都是样本偏度,计算逻辑一致(公式为sum((resid-mean)^3)/(n*std^3)),如果数值匹配,说明你的数组方法是正确的。
内容的提问来源于stack exchange,提问作者Heitor Nunes Rosa
相关产品推荐
相关产品推荐

