详解用statsmodels 进行回归分析 | Statsmodels 教學

详解用statsmodels进行回归分析Python中文社区2020-09-1909:00:004413收藏37文章标签:python机器学习人工智能深度学习编程语言原文链接:https://jinshuju.net/f/kb1Bcq版权很多人在做线性回归时都会使用scikit-learn中的linear_model这个模块,用linear_model的好处是速度快、结果简单易懂,但它的使用是有条件的,就是使用者在明确该模型是线性模型的情况下才能用,否则生成的结果很可能是错误的。

如果不知道该模型是否是线性模型的情况下,我们该怎么办呢?今天笔者就介绍一下statsmodels,statsmodels是python中专门用于统计学分析的包,它能够帮我们在模型未知的情况下来检验模型的线性显著性,笔者就用一个简单的例子(一元回归模型)来详细介绍一下statsmodels在线性回归的应用。

首先还是来看一下数据集,本次使用的数据集是统计学中很常用的一个例子,就是火灾损失与住户到最近消防站距离之间的相关关系数据,代码如下。

distance = [0.7, 1.1, 1.8, 2.1, 2.3, 2.6, 3, 3.1, 3.4, 3.8, 4.3, 4.6, 4.8, 5.5, 6.1]loss = [14.1, 17.3, 17.8, 24, 23.1, 19.6, 22.3, 27.5, 26.2, 26.1, 31.3, 31.3, 36.4, 36, 43.2]这里有两个list,distance就是指住户到最近消防站的距离,其单位是千米,而loss是用户遭受的火灾损失,单位是千元。

这两个list每个都包含15个数据,其数据是一一对应的。

接下来笔者就用代码来展示一下如何用statsmodels进行线性回归分析,对每一个步骤和每一个结果,笔者也都会详细解释,目的就是让大家了解statsmodels的用法。

在statsmodels中进行回归分析有两种方法,分别是statsmodels.api和statsmodels.formula.api,前者和我们平常用的各种函数没啥区别,输入参数即可,但后者却要求我们自己指定公式,其中formula的意思就是公式,两者的具体用法还是直接看代码吧。

首先还是导入各种库,并把数据做一个简单处理,这里我们把distance和loss放在一个dataframe中,这是为了方便后面使用。

import numpy as npimport pandas as pdimport statsmodels.api as smimport statsmodels.formula.api as smfdistance = [0.7, 1.1, 1.8, 2.1, 2.3, 2.6, 3, 3.1, 3.4, 3.8, 4.3, 4.6, 4.8, 5.5, 6.1]loss = [14.1, 17.3, 17.8, 24, 23.1, 19.6, 22.3, 27.5, 26.2, 26.1, 31.3, 31.3, 36.4, 36, 43.2]data = pd.DataFrame({'distance':distance, 'loss':loss})接下来我们先用statsmodels.api来进行分析,代码如下。

y1 = loss #更换变量名X1 = distance #更换变量名X1 = sm.add_constant(X1) #增加一个常数1,对应回归线在y轴上的截距regression1 = sm.OLS(y1, X1) #用最小二乘法建模model1 = regression1.fit() #数据拟合仅仅5行代码我们就完成了这个回归分析,在这里我们对每一行代码都解释一下。

前两行代码我们用y1和X1来代替loss和distance,这纯粹是为了符合日常使用习惯,因为(一元)线性回归模型的公式是y=β0+β1x+ε,所以这两行没有什么实质性影响,根据用户的个人习惯而定吧。

第三行代码X1=sm.add_constant(X1)是给X1加上一列常数项1,为什么要加1呢,这是因为该模型是一条直线,其在y轴上是有截距的,这个常数1最终会反映出这个截距。

加上常数1后X1就变成了一个15行2列的矩阵,如图1所示。

而regression1=sm.OLS(y1,X1)就是用最小二乘法来进行建模,最小二乘法(ordinaryleastsquares,即OLS)是回归分析中最常用的方法。

model1=regre


常見投資理財問答


延伸文章資訊