Python与Excel线性回归结果差异大,求原因解析
线性回归结果差异的核心原因
1. 截距项设置不一致
- statsmodels的OLS模型默认包含截距项,除非你手动通过
add_constant=False或者不传入常数项来移除。 - Excel的LINEST函数默认也拟合截距,但如果将第三个参数设为
FALSE(即LINEST(y, x, FALSE, ...)),就会强制不拟合截距,这时候和statsmodels带截距的结果必然差异巨大。
2. 自变量顺序与解读偏差
- LINEST返回的系数顺序是从最后一个自变量到第一个,比如你传入X1、X2两个自变量,LINEST输出的第一个系数对应X2,第二个对应X1,最后才是截距;而statsmodels的输出严格按照你传入的自变量顺序排列。很多人会因为没注意这个顺序差,误以为系数结果完全不同。
3. 数值计算与精度差异
- 算法不同:statsmodels依赖numpy的QR分解等稳定数值方法计算OLS,而Excel的LINEST用的是另一种最小二乘实现。当数据量大、变量量级差异悬殊,或者存在接近奇异的矩阵时,两种算法的数值稳定性差异会被放大,导致系数结果偏差。
- 浮点数精度:虽然都是双精度浮点数,但Excel和Python在计算过程中的中间步骤处理方式不同,极端情况下(比如残差平方和极小),精度差异会直接影响最终系数。
4. 缺失值处理逻辑不同
- statsmodels默认整行删除含缺失值的样本(listwise deletion),只要某一行有一个NA就会被排除;而Excel的LINEST会忽略单个缺失的单元格,但如果缺失值分布导致两者实际参与拟合的样本量或样本集合不同,回归结果自然会不一样。
5. 多重共线性的影响
如果数据存在严重多重共线性(自变量高度相关),LINEST可能返回不稳定的系数,甚至出现符号异常;而statsmodels会在summary里给出方差膨胀因子(VIF)警告,且数值算法的稳定性更好,结果相对更可靠。
内容的提问来源于stack exchange,提问作者Bogaso
相关产品推荐
相关产品推荐

