【Python数据分析】实践编写篇2:用Python进行回归分析与相关分析

article/2025/10/28 23:38:48

目录

一、前言

1.1 回归分析

1.2 相关分析

二、代码的编写

2.1 前期准备

2.2 编写代码

2.2.1 相关分析

 2.2.2 一元线性回归分析

 2.2.3 多元线性回归分析

 2.2.4 广义线性回归分析

 2.2.5 logistic回归分析

 三、代码集合


一、前言

1.1 回归分析

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

1.2 相关分析

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

二、代码的编写

2.1 前期准备

在编写代码之前,我们首先要知道需要用到的库有哪些。分别为:pandas\numpy\statsmodels\patsy。如果没有安装这些库是无法运行代码的 ,因此需要提前安装好这几个库。安装方法我在基础篇的第一章已经写有,可以进行参考:https://blog.csdn.net/Deng333333555/article/details/125092526?spm=1001.2014.3001.5501

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

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='编码数据')

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

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

2.2 编写代码

2.2.1 相关分析

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

代码如下:

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

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

输出结果如下:

前者:

 后者:

 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矩阵,再进行最小二乘估计,然后拟合结果。

矩阵形式:Y=X\beta

 输出结果如下:

 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()即我们所需要的表格。

输出结果如下:

 补充:

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

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形式的因变量的广义线性回归为逻辑回归。

输出结果如下:

 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形式,亦可说必须为虚拟变量的形式,否则程序会报错。这是逻辑回归本身的含义,具体可自行查找逻辑回归的资料学习。

输出结果如下:

 三、代码集合

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回归分析的结果一致。

http://chatgpt.dhexx.cn/article/FJwsUn5j.shtml

相关文章

chatgpt赋能Python-python_patsy

Python Patsy: 一个用于统计建模的Python库 什么是Patsy? Patsy是一个Python库,用于进行统计建模和数据预处理。Patsy的主要目的是将数据转换为适合统计建模的格式。它是一个基于公式的语言,通过描述预测变量和目标变量之间的关系&#xff…

Simple Linear Regression:ONE

前言 对于一些库的说明 numpy:支持矩阵运算,在矩阵运算这方面可以完全替代基于向量编程的matlab pandas:这个是一个数据存储库,是以表单(dataframe)为基本单位,这个库的好处在于行列 索引并不是…

python建模库介绍:pandas与建模代码的结合,使用Patsy创建模型描述

13.1 pandas与建模代码的结合 使用pandas用于数据载入和数据清洗,之后切换到模型库去建立模型是一个常见的模型开发工作流。在机器学习中,特征工程时模型开发的重要部分之一,特征工程就是指从原生数据集中提取可用于模型上下文的有效信息的数…

py之patsy:patsy的简介、安装、使用方法之详细攻略

py之patsy:patsy的简介、安装、使用方法之详细攻略 目录 patsy的简介 patsy的安装 patsy的使用方法 patsy的简介 Patsy是一个python库,用于描述统计模型(尤其是线性模型,或具有线性组件的模型)和构建设计矩阵。Pats…

两个线程循环打印121212...

A线程打印1,B线程打印2,要求循环打印121212... 思路 两个线程,可以想到的是多线程编程,共享变量,数据等,设想先让一个线程打印1,然后处于等待(wait)状态,接着…

静态路由实验总结

静态路由试验 实验目的 实现此图的全网互通 实验基础知识 路由的工作原理:路由器收到数据包之后,会查看其目标IP地址,会查询本地的路由表,若表中记录有去往目标的路径,则无条件转发;若没有去往目标的路…

C++第八次上机实验总结(多态)

一、实验目的: ①.掌握C语言多态性的基本概念; ②.掌握运算符重载函数的声明和定义方式; 二、试验任务: 1. 编写一个程序,实现两个负数相加(分别用类外定义运算符重载函数、友元运算符重载函数、成员运算符…

java程序实验总结_Java实验报告一及作业总结二

Java实验报告 实验一 Java开发环境与简单Java程序 一、 实验目的 (1) 熟悉JDK开发环境 (2) 熟练掌握结构化程序设计方法 二、 实验内容 1. 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如,153是一个“水仙花数”。 2. 编写…

计算机网络实验总结

一、ICMP抓包观察及Tracert 抓包分析 1.实验目的 理解ICMP,掌握ICMP帧结构,掌握IP协议原理,理解IP帧结构 2.实验步骤 1、观察ICMP目标不可达消息 使用Ping命令,去ping一个不存在的主机IP,如10.104.125.344。使用wi…

STM32 PWM输出实验总结

本实验是基于STM32 407的板子,使用的是通用定时器TIM14,相关的博文其实有很多,本文主要是基于他们结合个人学习理解总结整理,并非完全原创,只希望能帮助更好理解PWM输出的过程尤其是TIM_ARRPreloadConfig(TIM14, ENABL…

matlab信号与系统实验总结

求特征根 特征方程的求解 A[1 7 16 12] rroots(A)结果 求线代数方程组 format rat A[3 0 0; 4 3 0;2 2 3]; %左边 C[1 2 0]; %右边 Binv(A)*C求单位冲激响应 a2; t0:0.01:5; A[1 a]; B[0 a]; impulse(B,A,t)零状态冲激响应 syms t; y1exp(-2*t)*cos(3*t)*heaviside(t);%原…

DNS配置实验小结

DNS server是完成域名和IP之间正向、反向查询的一台服务提供者,由于互联网上的各种类型(例如Web、Mail、FTP等)的服务器地址都是由IP 构成,不方便记忆也不方便使用,因此需要使用一段方便记忆的文字(即域名)来翻译它进行使用,而DNS就是完成这个翻译过程的一个系统,DNS服务器…

11.10 VLAN实验总结

VLAN:虚拟局域网,隔离广播域(将原本的一个广播域逻辑的切分成多个广播域)—通过在交换机上创建不同的VLAN,并且将不通的接口 划入相应的VLAN,让交换机在洪泛时按照不同的VLAN发送数据,实现广播域…

Spark SQL实验小结(2022.4.10)

Spark SQL实验小结(2022.4.10) 说实话,这作业写的也是真够久的,给我累到了~但是,我不能让我辛辛苦苦学的东西过几天就忘了,所以呢,所以呢,学一下大佬的学习方法,写个博客…

嵌入式综合实验小结

一:实验目的 利用CC2530 的GPIO读取按键值并相应对进行LED发光二极管的亮灭操作;利用CC2530的串口0进行数据收发通讯。 二:实验环境 1.硬件:通用节点、USB仿真器、USB电缆、PC机; 2.软件:IAR Embedded Wor…

Windows 实验总结

关于DLL的生成地址 在CreateDLL.cpp文件中,我定义了两个函数,同时这里 __stdcall:Windows API默认的函数调用协议。 在头文件做好相对应的定义: __declspec(dllexport) 将一个函数声名为导出函数,就是说这个函数要…

java实验总结_java第一次实验总结第三周总结

Java第一次实验报告,java开发环境与简单的Java程序 一.实验目的 1.熟悉JDK开发环境 2.熟练掌握结构化程序设计方法 二.实验内容 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身。例如&#xff0c…