statsmodels学习——使用多元回归拟合数据

1. 多元回归拟合代码

首先构造一个任意的dataframe

import pandas as pd
import numpy as np
import statsmodels.api as sm

df = pd.DataFrame(data=np.random.randint(0, 20, size=(100, 4)),
                  columns=['x1', 'x2', 'x3', 'y'])
# 开始切分x与y
X = df.loc[:, 'x1':'x3']
Y = df['y']

构造的dataframe如下:

x1x2x3y
01213110
1111098
21218182
318111812

然后切分出自变量与因变量:

X = df.loc[:, 'x1':'x3']
Y = df['y']

然后使用statsmodels拟合数据:

X = sm.add_constant(X)  # adding a constant
model = sm.OLS(Y, X).fit()

这样就拟合成功了,预测:

predictions = model.predict(X)

predictions即为模型对原来训练集数据的预测结果,这里可以换成新的测试集数据

2. 分析结果

  1. 打印全部的结果:
print(model.summary())

得到如下的表格:

==============================================================================
Dep. Variable:                      y   R-squared:                       0.032
Model:                            OLS   Adj. R-squared:                  0.001
Method:                 Least Squares   F-statistic:                     1.046
Date:                Fri, 11 Jun 2021   Prob (F-statistic):              0.376
Time:                        10:29:28   Log-Likelihood:                -316.20
No. Observations:                 100   AIC:                             640.4
Df Residuals:                      96   BIC:                             650.8
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const          5.8099      1.793      3.241      0.002       2.252       9.368
x1             0.1445      0.094      1.533      0.128      -0.043       0.332
x2             0.0976      0.104      0.936      0.352      -0.109       0.305
x3             0.0169      0.102      0.165      0.869      -0.186       0.220
==============================================================================
Omnibus:                       27.225   Durbin-Watson:                   1.684
Prob(Omnibus):                  0.000   Jarque-Bera (JB):                5.946
Skew:                           0.162   Prob(JB):                       0.0512
Kurtosis:                       1.850   Cond. No.                         55.4
==============================================================================
  1. 得到拟合的结果

coef为拟合出的系数,使用如下代码可以打印出来:

print(model.params)

其他变量:

  • Dep.Variable: 就是因变量,dependent variable,也就是咱们输入的y1,不过这里statsmodels用y来表示模型的结果。
  • Model:就是最小二乘模型,这里就是OLS。
  • Date/Time:模型生成的日期/时间
  • No. Observations:样本量
  • Df Residuals:残差自由度(degree of freedom of residuals),其值= No.Observations - Df Model - 1
  • Df Model:模型自由度(degree of freedom of model),值等于输入的维度,这里x1,x2,x3是三个维度
  • Covariance Type:协方差阵的稳健性
  • R-squared:决定系数,计算方法为SSR/SST,SSR是Sum of Squares for Regression,SST是Sum of Squares for Total
  • Adj. R-squared:利用奥卡姆剃刀修正后的R-squared值(奥卡姆剃刀是一种理论,认为通用的模型倾向于更简单的参数,正所谓大道至简)
  • F-statistic:F检验,这个值越大越能推翻原假设,值越大说明模型是线性模型,原假设是“我们的模型不是线性模型”。
  • Prob (F-statistic):为F-statistic的概率,值越小越能拒绝原假设,本例中为1.25e-08,该值非常小了,足以证明我们的模型是线性显著的
  • Log likelihood:对数似然
  • AIC:赤池信息量,其用来衡量拟合的好坏程度,一般选择AIC较小的模型
  • BIC:贝叶斯信息准则
  • std err:系数估计的标准误差。
  • t:就是我们常用的t统计量,这个值越大越能拒绝原假设。
  • P>|t|:统计检验中的P值,这个值越小越能拒绝原假设。
  • [0.025, 0.975]:置信度为95%的置信区间的下限和上限。
  • Omnibus:基于峰度和偏度进行数据正态性的检验,通常与Jarque-Bera检验共同使用
  • Prob(Omnibus):Omnibus检验的概率。
  • Durbin-Watson:检验残差中是否存在自相关,其主要通过确定两个相邻误差项的相关性是否为零来检验回归残差是否存在自相关。
  • Skewness:偏度
  • Kurtosis:峰度
  • Jarque-Bera(JB):同样是基于峰度和偏度进行数据正态性的检验,通常与Omnibus检验共同使用
  • Prob(JB):JB检验的概率。
  • Cond. No.:多重共线性的检验,即检验变量之间是否存在精确相关关系或高度相关关系

3. 完整案例

import pandas as pd
import numpy as np
import statsmodels.api as sm

df = pd.DataFrame(data=np.random.randint(0, 20, size=(100, 4)),
                  columns=['x1', 'x2', 'x3', 'y'])
# 开始切分x与y
X = df.loc[:, 'x1':'x3']
Y = df['y']

X = sm.add_constant(X)  # adding a constant
model = sm.OLS(Y, X).fit()
predictions = model.predict(X)

print_model = model.summary()
print(print_model)

参考资料

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值