查看原文
其他

从statsmodels到线性回归

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:孙晓玲 文字编辑:钱梦璇 技术总编:张   邯

作为强大的数据分析工具库,Numpy与Pandas是可以与其他第三方库合作进行建模,如 scikit-learn为Python的机器学习库,它包含多种标准监督和非监督机器学习方法模型选择和评估、数据转换、数据加载和模型持久化⼯具。

今天我将介绍到的第三方库为 statsmodels库,statsmodels是常用的统计模型库,下面我将介绍借助 Numpy、 Pandas和 statsmodels进行普通最小二乘估计的方法。首先导入所需的第三方库。为了建模的需要,我自己生成一个数据集。我生成了三个变量“x1”(服从均值为1方差为9的正态分布)、“x2”(服从均值为2方差为49的正态分布)、“x3”(服从均值为0方差为1的正态分布)对其进行描述性统计,生成的数据比较理想。 

import numpy as npimport pandas as pdimport statsmodels.api as smnp.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) + epsy[: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库构造线性模型的基于数组途径,基于公式途径也能得到类似的结果。







对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

Pandas的GroupBy机制

首行数据如何快速转变量名?
文件太多乱乱的?合并一下吧!
线性回归的正则化 ——岭回归与LASSO回归
Pandas中节约空间的小tip—categorical类型
Ftools命令组之flevelsof命令介绍
疫情下的家庭关系|《请回答1988》影评爬取
教你把Python当美图秀秀用(二)
自己动手进行线性回归计算
personage与年龄
原来这才是查看盲评结果的正确方式
教你把Python当美图秀秀用(一)
用数据透视表剖析泰坦尼克号乘客数据
读入文本文档,intext来帮忙
matchit——解锁文本相似度的钥匙
基于广义线性模型的机器学习算法——线性回归
听说你会魔法?

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存