从statsmodels到线性回归
本文作者:孙晓玲 文字编辑:钱梦璇 技术总编:张 邯
作为强大的数据分析工具库,Numpy与Pandas是可以与其他第三方库合作进行建模,如 scikit-learn为Python的机器学习库,它包含多种标准监督和非监督机器学习方法模型选择和评估、数据转换、数据加载和模型持久化⼯具。
今天我将介绍到的第三方库为 statsmodels库,statsmodels是常用的统计模型库,下面我将介绍借助 Numpy、 Pandas和 statsmodels进行普通最小二乘估计的方法。首先导入所需的第三方库。为了建模的需要,我自己生成一个数据集。我生成了三个变量“x1”(服从均值为1方差为9的正态分布)、“x2”(服从均值为2方差为49的正态分布)、“x3”(服从均值为0方差为1的正态分布)对其进行描述性统计,生成的数据比较理想。
import numpy as np
import pandas as pd
import statsmodels.api as sm
np.random.seed(12345)
data = {'x1':1+3*np.random.randn(100),
'x2':2+7*np.random.randn(100),
'x3':0+1*np.random.randn(100)}
X = pd.DataFrame(data)
X.describe()
这里,我模拟使用已知模型,设置“x1”、“x2”、“x3”的系数矩阵为[2.5, 3, 1.6],生成因变量y的程序如下:
eps = np.random.rand(100) #生成随机误差项
beta = [2.5, 3, 1.6]
y = np.dot(X, beta) + eps
y[:10]
结合计量经济学知识可知,拟合线性模型通常需要拟合带截距项的模型,就需要将常系数列合并到解释变量矩阵中去,使用函数sm.add_constant可以解决这个问题,查看添加常数列的矩阵。
X_with_const = sm.add_constant(X)
X_with_const[:5]
使用sm.OLS便可得到这个最小二乘估计模型,模型的fit方法可以得到模型的返回结果(results)。results.params返回其回归系数。
model = sm.OLS(y, X_with_const)
results = model.fit()
results.params
统计建模分析中,只得到回归系数往往是不够的,回归系数的显著水平、模型的R2等都是需要的。如果想得到像其他统计软件一样的回归明细表,对模型返回结果使用summary方法即可。
results.summary()
因为这里我使用的是已知模型的拟合,所以回归系数都是强显著的,模型的R2达到了最大值1,演示的结果很合理。我从原始数据中随机选取20个数据进行预测演示,用predict方法进行预测如下:
X_test = X_with_const.sample(20)
results.predict(X_test[:10])
以上,就是普通最小二乘回归的基本操作,使用的是statsmodels库构造线性模型的基于数组途径,基于公式途径也能得到类似的结果。
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。