如何用Python进行回归分析与相关分析

作者:二十六夜. 时间:2023-11-24 01:08:14 

一、前言

1.1 回归分析

是用于研究分析某一变量受其他变量影响的分析方法,其基本思想是以被影响变量为因变量,以影响变量为自变量,研究因变量与自变量之间的因果关系。

1.2 相关分析

不考虑变量之间的因果关系而只研究变量之间的相关关系的一种统计方法。

二、代码的编写

2.1 前期准备

在编写代码之前,我们首先要知道需要用到的库有哪些。分别为:pandas\numpy\statsmodels\patsy。如果没有安装这些库是无法运行代码的 ,因此需要提前安装好这几个库。安装方法我在基础篇的第一章已经写有,可以进行参考:如何在Python中导入EXCEL数据

然后便可以导入库和所要处理的数据了。

import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices
data=pd.read_excel(r'D:\杂货\编码数据.xlsx',sheet_name='编码数据')

展示以下我所导入的数据的样式:

如何用Python进行回归分析与相关分析

 我准备的excel表格的数据比较多,在python中输出出来大概就是这个样子,至于这些数字是什么含义不用过多理会,这并不影响本篇方法的介绍。

2.2 编写代码

2.2.1 相关分析

首先介绍最简单的一个数据指标:相关系数

代码如下:

v=data['Q1'].corr(data['Q2'])#相关系数(求某两个变量的相关系数)
print(v)
v=data.corr()#求所有变量之间的相关系数
print(v)

前者是指定求某两个变量间的相关系数,而后者是直接接计算出所有变量的相关系数。

输出结果如下:

前者:

如何用Python进行回归分析与相关分析

 后者:

如何用Python进行回归分析与相关分析

 2.2.2 一元线性回归分析

代码如下:

x=np.array(data['Q1'])#一元线性回归分析
y=np.array(data['Q2'])
X=sm.add_constant(x)#向x左侧添加截距列x0=[1,……,1]
model=sm.OLS(y,X)#建立最小二乘估计
fit=model.fit()#拟合模型
print(fit.summary())

该方法是通过矩阵的形式进行运算的,首先将要输入的数据x,y转换为矩阵的形式,然后再给自变量x增加一列截距列,形成X矩阵,再进行最小二乘估计,然后拟合结果。

矩阵形式:如何用Python进行回归分析与相关分析

 输出结果如下:

如何用Python进行回归分析与相关分析

 2.2.3 多元线性回归分析

vars=['Q1','Q2','Q6','Q7']#多元线性回归分析
df=data[vars]#将输入的数据转换为矩阵(数组)形式
y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe')
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())

 多元的代码的编写形式与一元的编写形式实质上差别不大,不同的地方在于第三行代码,其形式为 y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe'),而该行代码的形式也是固定的,括号中的'Q1~Q2+Q6+Q7'这部分可根据个人想要模拟的方程形式编写,Q1为因变量,Q2,Q6,Q7……等部分为自变量,个数不限;data=df部分是将转换好的矩阵(数组)赋值给data;而return_type='dataframe'部分可以直接使用,一般不需要更改。

model=sm.OLS(y,X)进行最小二乘估计,fit=model.fit()进行模型的拟合,最后输出的fit.summary()即我们所需要的表格。

输出结果如下:

如何用Python进行回归分析与相关分析

 补充:

在此附上关于多元回归模型的一些内容,可帮助理解矩阵形式的回归模型。(摘自:《计量经济学基础》张晓峒)

如何用Python进行回归分析与相关分析

2.2.4 广义线性回归分析

广义的线性回归分析包括四种模型,分别为:正态分布拟合;二项分布拟合;泊松分布拟合;伽马分布拟合。

本人常用二项分布,因此本篇以二项分布为例进行介绍。

代码如下:

vars2=['Q1','Q2']#广义线性回归分析
vars1=['Q6','Q7','Q8','Q9']
glm_binom=sm.GLM(data[vars2],data[vars1],family=sm.families.Binomial())
res=glm_binom.fit()
print(res.summary())

需要注意的是:若在广义线性回归分析中的vars2的数据换成0-1形式的,则其结果与logistic回归分析的结果一致,即可以说0-1形式的因变量的广义线性回归为逻辑回归。

输出结果如下:

如何用Python进行回归分析与相关分析

 2.2.5 logistic回归分析

代码如下:

vars1=['Q6','Q7','Q8','Q9']
logit_mod=sm.Logit(data['Q13|3'],data[vars1])#logistic回归分析,注意:data['Q13|3']的位置里的数据必须是0-1形式!!!
logit_res=logit_mod.fit(disp=0)
print(logit_res.summary())

logistic回归的代码的编写形式与前面几个回归差别不大,理解起来不难,就不再重复讲述。但需要注意的是,在使用逻辑回归时,sm.Logit(data['Q13|3'],data[vars1])中的data['Q13|3']的数据必须为0-1形式,亦可说必须为虚拟变量的形式,否则程序会报错。这是逻辑回归本身的含义,具体可自行查找逻辑回归的资料学习。

输出结果如下:

如何用Python进行回归分析与相关分析

 三、代码集合

import pandas as pd
import numpy as np
import statsmodels.api as sm
from patsy import dmatrices
data=pd.read_excel(r'D:\杂货\编码数据.xlsx',sheet_name='编码数据')
pd.set_option('display.max_columns',1000)
pd.set_option("display.width",1000)
pd.set_option('display.max_colwidth',1000)
pd.set_option('display.max_rows',1000)
print(data)

v=data['Q1'].corr(data['Q2'])#相关系数
print(v)

x=np.array(data['Q1'])#一元线性回归分析
y=np.array(data['Q2'])
X=sm.add_constant(x)#向x左侧添加截距列x0=[1,……,1]
model=sm.OLS(y,X)#建立最小二乘估计
fit=model.fit()#拟合模型
print(fit.summary())

vars=['Q1','Q2','Q6','Q7']#多元线性回归分析
df=data[vars]
y,X=dmatrices('Q1~Q2+Q6+Q7',data=df,return_type='dataframe')
model=sm.OLS(y,X)
fit=model.fit()
print(fit.summary())

vars2=['Q1','Q2']#广义线性回归分析
vars1=['Q6','Q7','Q8','Q9']
glm_binom=sm.GLM(data[vars2],data[vars1],family=sm.families.Binomial())
res=glm_binom.fit()
print(res.summary())

logit_mod=sm.Logit(data['Q13|3'],data[vars1])#logistic回归分析,注意:data['Q13|3']的位置里的数据必须是0-1形式!!!
logit_res=logit_mod.fit(disp=0)
print(logit_res.summary())
#若在广义线性回归分析中的vars2的数据换成0-1形式的,则其结果与logistic回归分析的结果一致。

来源:https://blog.csdn.net/Deng333333555/article/details/125835660

标签:python,回归,数据分析
0
投稿

猜你喜欢

  • pytorch中tensor张量数据类型的转化方式

    2022-03-19 20:07:24
  • 使用python和Django完成博客数据库的迁移方法

    2022-05-16 03:58:25
  • 基于Python编写一个微博抽奖小程序

    2023-04-02 16:40:00
  • sql随机记录之如何解决每次RND的结果都一样的问题?

    2007-09-11 13:24:00
  • 用python3读取python2的pickle数据方式

    2023-06-05 09:45:48
  • 利用Python将文本中的中英文分离方法

    2023-01-06 11:55:58
  • Golang中互斥锁和读写互斥锁原理及示例代码

    2024-05-29 22:06:52
  • Python常用类型转换实现代码实例

    2022-05-20 06:03:43
  • Django结合ajax进行页面实时更新的例子

    2023-02-14 21:15:45
  • Python简单定义与使用字典dict的方法示例

    2023-03-10 03:22:48
  • MySQL5.7 JSON类型使用详解

    2024-01-15 23:57:04
  • python面向对象之类属性和类方法案例分析

    2022-01-18 06:00:36
  • pymongo为mongodb数据库添加索引的方法

    2024-01-22 17:51:51
  • Python DataFrame 设置输出不显示index(索引)值的方法

    2022-01-13 20:02:38
  • 设计较好付款流程的12个建议

    2009-06-08 12:45:00
  • Python将列表数据写入文件(txt, csv,excel)

    2023-04-09 13:24:49
  • MySQL中in和exists区别详解

    2024-01-19 20:55:10
  • SQL Server误区30日谈 第12天 TempDB的文件数和需要和CPU数目保持一致

    2024-01-21 19:07:29
  • Asp.net清空控件值的方法(可自定义控件类型)

    2023-07-22 23:23:16
  • 深入解析Python中的集合类型操作符

    2022-06-19 01:04:33
  • asp之家 网络编程 m.aspxhome.com