我正在训练我在py中学习我的数据技能,这是我在R中学到的 . 虽然,我对一个简单的线性回归有疑问
气候变化数据:[link here]
Python脚本
import os
import pandas as pd
import statsmodels.api as sm
train = df[df.Year>=2006]
X = train[['MEI', 'CO2', 'CH4', 'N2O', 'CFC.11', 'CFC.12', 'TSI', 'Aerosols']]
y = train[['Temp']]
model = sm.OLS(y, X).fit()
predictions = model.predict(X)
model.summary()
Python结果
Dep . 变量:温度R平方:0.972型号:OLS Adj . R平方:0.964方法:最小二乘法F统计量:123 . 1日期:星期一,2018年10月1日Prob(F统计量):9.54e-20时间:14:52:53对数似然:46.898否观察:36 AIC :-77.80 Df残差:28 BIC:-65.13 Df型号:8协方差类型:非粗糙MEI 0.0361 CO2 0.0046 CH4 -0.0023 N2O -0.0141 CFC-11 -0.0312 CFC-12 0.0358 TSI -0.0033气溶胶69.9680 Omnibus:8.397 Durbin-Watson: 1.484 Prob(Omnibus):0.015 Jarque-Bera(JB):10.511偏斜:-0.546 Prob(JB):0.00522峰度:5.412 Cond . 第6.35e 06号
R脚本
train <- climate_change[climate_change$Year>=2006,]
prev <- lm(Temp ~ ., data = train[,3:NCOL(train)])
summary(prev)
R结果
残差:最小1Q中位数3Q最大值-0.221684 -0.032846 0.002042 0.037158 0.167887系数:MEI 0.036056 CO2 0.004817 CH4 -0.002366 N2O -0.013007 CFC-11 -0.033194 CFC-12 0.037775 TSI 0.009100气溶胶70.463329残余标准误差:27自由度为0.07594多个R平方:0.5346,调整后的R平方:0.3967 F-统计:8和27 DF时为3.877,p值:0.003721
问题
R平方它们之间有很大差异,自变量系数也有一点差异 . 有人可以解释为什么吗?
2 回答
只是指出这一点:
statsmodel
's least squares fit does by default not include a constant. If we remove the constant from R'适合,我们得到与Python实现非常相似的结果,或者相反,如果我们向statsmodel
-fit添加一个常量,我们得到类似于R
的结果:删除
R
的lm
-call中的常量:让我们为
statsmodel
的调用添加一个常量:给我们相同的结果:
正如评论中所提到的,基于给出的警告,它可能是多重共线性的问题 . 测试我们是否获得相同r平方的一种方法是使用另一个包
sklearn
并基于LinearRegression
模块构建模型但是,
LinearRegression
不会给出任何summary
输出 . 必须提取感兴趣的参数