首页 > 编程语言 >Python统计实战:一题搞定一元线性回归分析、模型诊断分析

Python统计实战:一题搞定一元线性回归分析、模型诊断分析

时间:2024-06-21 19:31:32浏览次数:21  
标签:分析 搞定 plt fit Python df ols 拟合 import

为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。

(以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。)


练习题

下面是来自R语言的anscombeh数据集(前3行和后3行)。

x1x2x3x4y1y2y3y4
10101088.049.147.466.58
88886.958.146.775.76
13131387.588.7412.747.71
........................
121212810.849.138.155.56
77784.827.266.427.91
55585.684.745.736.89

分别绘制x1和y1、x2和y2、x3和y3、x4和y4的散点图,并建立一元线性回归模型,从散点图和各回归模型中你会得到哪些启示?


计算与结果分析

1、先分别绘制x1和y1、x2和y2、x3和y3、x4和y4的散点图以观察它们之间的关系,如下图所示。明显可以看到图(d)是不合理的。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False     # 正常显示负号
df = pd.read_csv('exercise10_1.csv')

plt.subplots(2, 2, figsize = (8, 5))

plt.subplot(221)
sns.regplot(data = df, x = df['x1'], y = df['y1'],
           fit_reg = True, marker = '+')  # 添加回归线
plt.title('(a)x1与y1添加回归线和置信带的散点图', fontsize = 10)

plt.subplot(222)
sns.regplot(data = df, x = df['x2'], y = df['y2'],
           fit_reg = True, marker = '+')  # 添加回归线
plt.title('(b)x2与y2添加回归线和置信带的散点图', fontsize = 10)

plt.subplot(223)
sns.regplot(data = df, x = df['x3'], y = df['y3'],
           fit_reg = True, marker = '+')  # 添加回归线
plt.title('(c)x3与y3添加回归线和置信带的散点图', fontsize = 10)

plt.subplot(224)
sns.regplot(data = df, x = df['x4'], y = df['y4'],
           fit_reg = True, marker = '+')  # 添加回归线
plt.title('(d)x4与y4添加回归线和置信带的散点图', fontsize = 10)

plt.tight_layout()

2、针对每组数据建立一元回归模型。Python计算结果如下图呈现。

拟合回归模型 y1 ~ x1

# 拟合回归模型 y1 ~ x1
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('exercise10_1.csv')

model1 = ols('y1 ~ x1', data = df).fit()
print(model1. summary())

拟合回归模型 y2 ~ x2

# 拟合回归模型 y2 ~ x2  
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('exercise10_1.csv')

model2 = ols('y2 ~ x2', data = df).fit()
print(model2. summary())

拟合回归模型 y3 ~ x3

# 拟合回归模型 y3 ~ x3
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('exercise10_1.csv')

model3 = ols('y3 ~ x3', data = df).fit()
print(model3. summary())

拟合回归模型 y4 ~ x4

# 拟合回归模型 y4 ~ x4
import pandas as pd
from statsmodels.formula.api import ols
df = pd.read_csv('exercise10_1.csv')

model4 = ols('y4 ~ x4', data = df).fit()
print(model4. summary())

最后对4个模型进行诊断,分别绘制出它们的残差和拟合值图。

比较可知,各模型基本相同。但散点图和诊断图均显示,建立的 4 个线性模型中, 只有模型 1 是正确的,其余均不正确,应考虑建立非线性模型。

# 绘制模型诊断图
import pandas as pd
import numpy as np
from statsmodels.formula.api import ols
import statsmodels.api as sm
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Songti SC'] # 设置中文字体
plt.rcParams['axes.unicode_minus'] = False     # 正常显示负号
df = pd.read_csv('exercise10_1.csv')

model1 = ols('y1 ~ x1', data = df).fit() # 拟合模型
model2 = ols('y2 ~ x2', data = df).fit()
model3 = ols('y3 ~ x3', data = df).fit()
model4 = ols('y4 ~ x4', data = df).fit()

# 绘制残差与拟合值图
plt.subplots(2, 2, figsize = (8, 5))

plt.subplot(221)
plt.scatter(model1.fittedvalues, model1.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('(a)y1与x1残差与拟合值图', fontsize = 10)
plt.axhline(0, ls = '--')

plt.subplot(222)
plt.scatter(model2.fittedvalues, model2.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('(a)y2与x2残差与拟合值图', fontsize = 10)
plt.axhline(0, ls = '--')

plt.subplot(223)
plt.scatter(model3.fittedvalues, model3.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('(a)y3与x3残差与拟合值图', fontsize = 10)
plt.axhline(0, ls = '--')

plt.subplot(224)
plt.scatter(model4.fittedvalues, model4.resid)
plt.xlabel('拟合值')
plt.ylabel('残差')
plt.title('(a)y4与x4残差与拟合值图', fontsize = 10)
plt.axhline(0, ls = '--')

plt.tight_layout()

都读到这里了,不妨关注、点赞一下吧!

标签:分析,搞定,plt,fit,Python,df,ols,拟合,import
From: https://blog.csdn.net/lucasluy2020/article/details/139814993

相关文章

  • Python统计实战:一题搞定双因子方差分析(交互效应分析)
    为了解决特定问题而进行的学习是提高效率的最佳途径。这种方法能够使我们专注于最相关的知识和技能,从而更快地掌握解决问题所需的能力。(以下练习题来源于《统计学—基于Python》。联系获取完整数据和Python源代码文件。)练习题城市道路交通管理部门为研究不同路段和不同时段......
  • python web框架哪家强?Flask、Django、FastAPI对比
    前言当你掌握了python的基础知识,并且会用和HTML和CSS编写简单的静态网页。现在你只需再掌握一个pythonweb框架的知识,就可以开始编写一个动态的网站了。目前市面比较流程的pythonweb框架有三个flask、Django、FastAPI。接下来我们对比一下。他们三个各自有什么特点。Flas......
  • Python+selenium+unittest框架实现网易邮箱的自动登录
    文章目录概要整体架构流程技术细节小结概要 本实例只针对简单的账密登录场景做处理,涉及登录方式切换、人机检测部分未作处理,后续会跟进处理。整体架构流程依赖环境    Python3.7    selenium3.141.0    ddt1.6.0        目......
  • Python标注工具labelImg使用Pyinstaller打包成EXE的过程及问题处理
    直接上过程1.在python项目中使用pip命令安装pyinstaller。2.在python编辑器(如Pycharm)终端切换到要打包的.py文件所在目录。3.使用pyinstaller工具命令打包.py文件,如:pyinstallerlabelImg.py--noconsole--workpath.\Pyinstaller\temp --distpath.\Pyinstaller\dist 4.......
  • python pyinstaller打包的exe 反编译问题记录 破解加密
    首先是用pyinstxtractor这个网上很多教程,不详说了。生成一个xxx.exe_extracted目录生成过程中,如果pyinstaller用key加密了,会[!]Error:FailedtodecompressPYZ-00.pyz_extracted\Cython\__init__.pyc,probablyencrypted.Extractingasis. 这个说是fail了,其实可以解......
  • 详解pip换源步骤,打造极速Python开发环境
    在当今日益数字化的世界中,Python及其包管理工具pip已成为开发者们不可缺少的工具。Python的广泛应用,从数据分析到人工智能,从Web开发到科学计算,都离不开大量高质量的库和包的支持。但是,在安装和管理这些库和包时,网络速度和源的可靠性往往成为制约效率的瓶颈。为了解决这一问题,......
  • Python批量保存Excel文件中的图表为图片
    Excel工作簿作为一款功能强大的数据处理与分析工具,被广泛应用于各种领域,不仅能够方便地组织和计算数据,还支持用户创建丰富多彩的图表,直观展示数据背后的洞察与趋势。然而,在报告编制、网页内容制作或分享数据分析成果时,直接嵌入整个Excel文件往往不够便捷,且可能受限于接收者......
  • Lombok注解引发的空指针问题分析
    一、问题描述在一次上线后,日志中出现空指针的报错,但是报错代码位置以及相应工具类未进行过修改,接下来进一步分析。以下为报错堆栈信息:java.lang.NullPointerException:null atnet.sf.cglib.core.ReflectUtils.getMethodInfo(ReflectUtils.java:424)~[cglib-3.1.jar:?] a......
  • kakfa发版丢消息事件分析
    背景其他部门同事反馈在项目发版/重启(kill-15)的那段时间,经常会出现导致C端业务出现问题,从而产生资损一听资损,赶紧应答下来,了解了下具体情况,然后立马去排查了问题分析结合同事的描述以及对业务的了解,很快就定位到是kafka消息丢失导致C端业务出现问题业务当前......
  • python中的yield与yield from
    生成器与迭代器在Python中,迭代器就是可以用来迭代(比如for循环中的迭代)操作的对象,任何实现了__next__方法的对象都可以称之为迭代器。classFib:def__init__(self,n)->None:self.prev=0self.cur=1self.n=ndef__next__(self......