查看原文
其他

自己动手进行线性回归计算

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

本文作者:孙晓玲

文字编辑:钱梦璇

技术总编:张   邯

导读

NumPy库与Pandas库是Python进行数据分析时基础而强大的两个第三方库,这两个库经常作为基准库进行连用解决各类数据分析问题,尤其是Pandas库,其支持大部分NumPy语言风格的数组计算。经过一段时间的NumPy数组与Pandas数组基本操作的学习,今天小编将两个库结合起来做一个实战分析——多元线性回归。

一、多元线性回归模型

在进行正式的回归分析之前,我们来回顾一下多元线性回归的基本原理。多元线性回归的一般形式为:

为计算回归系数向量β,需要设置解释变量矩阵X和被解释变量向量y,分别如下:

求解系数向量β向量为:

二、实战分析——美国汽车数据多元线性回归

本案例使用的是1978年美国汽车数据,熟悉Stata的朋友应该对这个数据很熟悉了。为了演示的方便,这里选取了汽车数据的三个变量,分别为:mpg,weight,foreign,拟合weight,foreign对mpg的二元线性回归。

(一)读入数据

这里,首先导入本案例中需要用到的两个第三方库,NumPy库和Pandas库。用Pandas库的read_csv函数读入auto.csv格式文件,设置解释变量矩阵X0和被解释变量向量y0,具体的程序如下:

import numpy as npimport pandas as pddata=pd.read_csv(r'D:\regression\auto.csv')data['beta0']=1X0=data.iloc[:, [0,1,3]]y0=data['mpg']
读入数据后,从变量窗口可以查看数据集data、解释变量矩阵X0、被解释变量向量y0,74条观测值全部读入。其数据类型都是Pandas数组分别为DataFrame、DataFrame、Series。

  

(二)求解多元线性模型

利用NumPy库的array函数生成X和y两个数组矩阵,使用transpose函数对矩阵转置,dot函数计算矩阵点乘,用线性代数函数模块linalg中的solve函数求解多元线性回归的系数值并输出,具体程序如下:

X=np.array(X0[:]) #将X0读成数组 y=np.transpose(np.array(y0[:])) #将y读成数组并转置 Xt=np.transpose(X) #求X的转置 XtX=np.dot(Xt,X) #矩阵点乘 Xty=np.dot(Xt,y) beta=np.linalg.solve(XtX,Xty) #求解多元线性方程 print(beta) #输出系数值

通过上述程序计算输出结果如下:

因此,得到回归模型为:

(三)模型的预测

为比较模型的拟合效果,选取前10条观测值进行预测,并将预测值与原始数据进行比较,具体程序如下:

for index in range(10): data1=X0.loc[index] x = np.array([data1]) actual=y0[index] prediction = np.dot(x,beta) #计算预测值 #print(prediction) print('prediction = '+str(prediction)+' actual = '+str(actual))

今天的介绍就到这里了,从输出结果可知拟合值与实际值接近,拟合效果不错。虽然已经有许多库可以直接进行回归计算,但是通过自己动手写程序可以熟悉回归系数的计算方法,大家快来动手操作一下吧(#^.^#)!






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

personage与年龄

原来这才是查看盲评结果的正确方式
教你把Python当美图秀秀用(一)
用数据透视表剖析泰坦尼克号乘客数据
读入文本文档,intext来帮忙
matchit——解锁文本相似度的钥匙
基于广义线性模型的机器学习算法——线性回归
听说你会魔法?
dummieslab——从分类变量到虚拟变量的“一步之遥”
线上Python课程都面向哪些方向?
子类与父类
用requests库爬取淘宝数据
WordStat—Stata的文本分析小助手
数据筛选理还乱,datacheck能诊断

如何用简单的手法绘制出不一样的海外疫情趋势图

matplotlib绘制数学函数
gen的再进化

关于我们



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

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

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

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