python统计分析——线性模型的预测和评估

参考资料:用python动手学统计学

1、导入库

# 导入库
# 导入数据处理的库
import numpy as np
import pandas as pd
import scipy as sp
from scipy import stats
# 导入绘图的库
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()
# 导入估计统计模型的库
import statsmodels.formula.api as smf
import statsmodels.api as sm

2、数据准备

data=pd.DataFrame({
    'beer':np.array([45.3, 59.3, 40.4, 38. , 37. , 40.9, 60.2, 63.3, 51.1, 44.9, 47. ,
                     53.2, 43.5, 53.2, 37.4, 59.9, 41.5, 75.1, 55.6, 57.2, 46.5, 35.8,
                     51.9, 38.2, 66. , 55.3, 55.3, 43.3, 70.5, 38.8]),
    'temp':np.array([20.5, 25. , 10. , 26.9, 15.8,  4.2, 13.5, 26. , 23.3,  8.5, 26.2,
                     19.1, 24.3, 23.3,  8.4, 23.5, 13.9, 35.5, 27.2, 20.5, 10.2, 20.5,
                     21.6,  7.9, 42.2, 23.9, 36.9,  8.9, 36.4,  6.4])
})
data.head()

3、线性模型拟合

# 利用普通最小二乘法(ordinary least squares)拟合线性模型
lm=smf.ols(formula="beer~temp",data=data).fit()
# 查看模型的系数
lm.params

4、预测

当模型拟合完成后,可以用predict函数进行预测。当参数为空时,输出的是训练集对应的拟合值,如下:

在预测时可以指定气温的值,参数为dataframe格式。估计temp为0时的beer值,如下:

也可以用模型估计的系数来直接计算出对应的期望值,如下:

# 用线性模型的系数计算当temp为0时beer的期望值
beta0=lm.params[0]
beta1=lm.params[1]
temp=0
beta0+beta1*temp

5、模型评估——残差

原则上,我们应该在预测之前评估模型。模型的评估以分析残差为主。正态线性模型的残差应该服从均值为0的正态分布,所以我们要检查残差是否满足这个条件。

# 获取残差
resid=lm.resid
resid.head(3)

下面我们按照残差的计算公式获取残差,残差的计算公式为:

residuals=y-\hat{y}

其中,y为实际值,\hat{y}为估计值(拟合值)。

计算过程如下:

# 计算估计值
y_hat=beta0+beta1*data.temp
# 计算残差
res=data.beer-y_hat
res.head(3)

6、模型评估——决定系数

        在summary函数的输出中,R-squared叫作决定系数。决定系数用来评估模型与已知数据的契合度。决定系数的计算式如下:

R^2=\frac{\sum_{i=1}^{N}(\hat{y}-\mu)^2}{\sum_{i=1}^{N}(y-\mu)^2}

其中,y为相应变量的实际值,\hat{y}是模型的估计值(预测值),μ是y的均值。

如果相应变量的估计值(预测值)和实际值相等,则R^2=1。

决定系数的获取方式如下:

# 方法一:直接获取
lm.rsquared
print("lm.rsquared: ",lm.rsquared)
# 方法二:按公式进行计算
mu=np.mean(data.beer)
y=data.beer
y_hat=lm.predict()
R_squared=np.sum((y_hat-mu)**2)/np.sum((y-mu)**2)
print("R_squared: ",R_squared)

下面介绍决定系数的具体含义:由残差的计算公式residuals=y-\hat{y}变形可得y=\hat{y}+residuals。决定系数的计算公式的分母可分解为下式:

\sum_{i=1}^{N}(y-\mu)^2=\sum_{i=1}^{N}(\hat{y}-\mu)^2+\sum_{i=1}^{N}residuals^2

相应变量的差异等于模型可预测的差异加上模型不可预测的残差平方和。因此,模型可以预测的差异在整体中所占的比例就是决定系数。决定系数的表达式也可以表示为:

R^2=1-\frac{\sum_{i=1}^Nresiduals^2}{\sum_{i=1}^N(y-\mu)^2}

当解释变量越多,决定系数越大。决定系数过大会导致过拟合,因此需要对决定系数进行修正(修正决定系数考虑了解释变量过多地惩罚制表,通过自由度修正了决定系数。)修正决定系数的数学公式如下:

R^2=1-\frac{\sum_{i=1}^Nresiduals^2/(N-s-1)}{\sum_{i=1}^N(y-\mu)^2/(N-1)}

其中,s为解释变量的个数。

修正决定系数的获取方式如下:

# 方法一:直接获取
lm.rsquared_adj
print("lm.rsquared_adj: ",lm.rsquared_adj)
# 方法二:按公式进行计算
n=len(data.beer)
s=1
mu=np.mean(data.beer)
y=data.beer
R_squared_adj=1-(np.sum(lm.resid**2)/(n-s-1))/(np.sum((y-mu)**2)/(n-1))
print("R_squared_adj: ",R_squared_adj)

7、模型评估——残差的直方图和散点图

要观察残差的特征,最简单的方法就是绘制出它的直方图。

根据残差的直方图,我们可知残差大致左右对称,形状接近正态分布。

sns.histplot(lm.resid,kde=True)

下面绘制横轴为拟合值、纵轴为残差的散点图,该图看起来是随机的,个数据都不相关也没有出现极端值。

sns.jointplot(x=lm.fittedvalues,y=lm.resid)

8、模型评估——残差的分位图

        分位图是用来比较理论分位数(theoretical quantiles)与实际分位数(sample quantiles)的散点图,也叫Q-Q图。正态分布的百分位数就是理论分位数,通过图形对比理论分位数与真实数据的分位数,可以直观地判断残差是否服从正态分布分布。具体原理可以参考excel统计分析——Q-Q图_excel 画q-q图-CSDN博客

由下图可以看出,残差基本服从正态分布分布。

# 绘制Q-Q图,line=‘s’表示绘制正态分布标准线。
# 如果散点落在线上表示数据服从正态分布。
sm.qqplot(lm.resid,line='s')

9、模型评估——根据summary函数的输出分析残差

利用summary函数查看其输出的第三个表:

Prob(Omnibus) 和 Prob(JB) 是残差的正态性检验结果。p值大于0.05,并不代表残差确实不服从正态分布,此处的检验只能用来判断结果是否存在明显的问题。

要判断残差是否服从正态分布,还要观察skew(偏度)和kurtosis(峰度)的值。有此表可以skew=-0.240,接近0;kurtosis=2.951,接近3,基本服从正态分布分布。具体原理可参考:excel统计分析——偏度、峰度_excel的峰度是减3后的值吗-CSDN博客

Durbin-Watson表示残差的自相关程度,如果它的值在2附近就说明没什么问题。在分析时间序列的数据时必须判断它是否在2附近。如果残差自相关,系数的检验结果便不可信,这个现象叫作伪回归。如果DurbinWatson统计量远大于2,就需要使用广义最小二乘法进一步讨论了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/405461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚马逊,速卖通,国际站测评补单的必要性与方法

亚马逊平台的规则与某宝有所不同。亚马逊平台没有产品推广引流和直通车等功能。而且,与某宝不同的是,亚马逊平台没有广告位和卖家客服。在某宝上,当我们选择款式和颜色时,通常会与卖家客服进行沟通。但在亚马逊上,没有…

【Docker】免费使用的腾讯云容器镜像服务

需要云服务器等云产品来学习Linux可以移步/-->腾讯云<--/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;新用户首次下单享超低折扣。 目录 1、设置密码 2、登录实例&#xff08;sudo docker login xxxxxx&#xff09; 3、新建命名空间&#xff08;每个命名空…

day40打卡

day40打卡 343. 整数拆分 状态表示 ​ dp[i] 表示将正整数i拆分成至少两个正整数的和之后&#xff0c;这些正整数的最大乘积 状态转移方程 ​ i > 2 时&#xff0c;对正整数i拆出的第一个正整数是j&#xff0c;则有&#xff1a; 将i拆分为 j 和 i-j&#xff0c;且 i-j…

初探Web客户端追踪技术

前言 案例1 当我们首次浏览网站时&#xff0c;在网页的下方位置经常会出现提示&#xff0c;询问是否允许使用 Cookie 来提供服务和流量。为了不被挡住浏览的内容&#xff0c;我们经常会下意识地点击“接受”&#xff0c;然后继续浏览。看似无害而有害增强你在这个网站上的体验…

MATLAB | 超多样式聚类分析树状图任你选择~~

这几天写了一个代码很长的聚类分析树状图绘图工具函数&#xff08;上一期文章立的flag总算实现了&#xff09;&#xff0c;能够比较轻松的绘制以下图形&#xff1a; 工具基本已经成型了&#xff0c;未来有需求未来有空再加哈哈哈&#xff0c;要求MATLAB至少需要17b版本&#xf…

微服务篇之分布式事务

一、Seata架构 Seata事务管理中有三个重要的角色&#xff1a; TC (Transaction Coordinator) - 事务协调者&#xff1a;维护全局和分支事务的状态&#xff0c;协调全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器&#xff1a;定义全局事务的范围、开始全局事务、…

Leetcode日记 2583. 二叉树中的第 K 大层和

Leetcode日记 2583. 二叉树中的第 K 大层和 题目&#xff1a;解题思路&#xff1a;代码实现制作不易&#xff0c;感谢三连&#xff0c;谢谢啦 题目&#xff1a; 给你一棵二叉树的根节点 root 和一个正整数 k 。 树中的 层和 是指 同一层 上节点值的总和。 返回树中第 k 大的层和…

欢迎 Gemma: Google 最新推出开源大语言模型

今天&#xff0c;Google 发布了一系列最新的开放式大型语言模型 —— Gemma&#xff01;Google 正在加强其对开源人工智能的支持&#xff0c;我们也非常有幸能够帮助全力支持这次发布&#xff0c;并与 Hugging Face 生态完美集成。 Gemma 提供两种规模的模型&#xff1a;7B 参数…

idea配置javafx

一、下载sdk 在jdk8之后&#xff0c;需要下载sdk包 &#x1f4ce;javafx-sdk-18.zip 这里适用的jkd版本如图 二、配置 创建一个项目之后&#xff0c;进行如下配置&#xff0c;将sdk导入到项目中 配置启动参数 可以使用-号将之前的去掉&#xff0c;创建一个新的 打开下面的V…

MyBatisPlus条件构造器和常用接口

前置配置文章 一、wapper介绍 wrapper的继承体系&#xff1a; Wrapper &#xff1a; 条件构造抽象类&#xff0c;最顶端父类 AbstractWrapper &#xff1a; 用于查询条件封装&#xff0c;生成 sql 的 where 条件 QueryWrapper &#xff1a; 查询条件封装UpdateWrapper &#x…

windows 11+docker desktop+grafana+influxDB

下载安装docker desktop 出现WSL相关的错误。WSL是一个linux内核的子系统&#xff0c;docker是基于linux内核的&#xff0c;所以运行docker需要WSL。 以管理员权限打开powershell&#xff0c;查看WSL状态 wsl --status 我遇到的错误是因为我关闭了windows的某些更新 执行上…

2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架

应用介绍 本文来自&#xff1a;2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于ThinkPHP框架 - 源码1688 简介&#xff1a; 2023全新UI千月影视APP源码 | 前后端完美匹配、后端基于thinkphp框架 图片&#xff1a;

每日一题——LeetCode1502.判断是否能形成等差数列

方法一 排序 var canMakeArithmeticProgression function(arr) {arr.sort((a,b)>a-b)let diff arr[1]-arr[0]for(let i1;i<arr.length;i){if(arr[i]-arr[i-1]diff) continueelse return false}return true }; 消耗时间和内存情况&#xff1a; 方法二 数学方法 找出ar…

SpringBoot实现缓存预热方案

缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。 那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系统呢? 实现方案概述 在 Spring Boot 启动之后,可以通过以下手段实现缓存预热: 使用…

开源的表单设计器拥有什么显著特点?

开源的表单设计器的特点是什么&#xff1f;广州流辰信息是专业研发低代码技术平台的服务商&#xff0c;可以为企业提供系统开发、数据治理、数据分析各环节技术和方案支撑。为了帮助大家了解开源的表单设计器的相关优势特点&#xff0c;小编将为大家做一个详细介绍。 什么是开源…

陪玩软件系统的开发-用PHP书写,uni开发的陪玩平台更有质量-线上线下功能齐全-APP小程序H5公众号都有,源码交付!

线上陪玩系统的功能 在线预订&#xff1a;用户可以在陪玩系统中在线预订陪玩服务&#xff0c;系统会根据用户的订单要求自动匹配陪玩人员。 指定搜索&#xff1a;用户可以通过搜索指定的ID来找到他们想要的陪玩人员。 在线交流&#xff1a;在陪玩系统中提供在线沟通功能&…

Jmeter之单接口的性能测试

前言&#xff1a; 服务端的整体性能测试是一个非常复杂的概念&#xff0c;包含生成虚拟用户&#xff0c;模拟并发&#xff0c;分析性能结果等各种技术&#xff0c;期间可能还要解决设计场景、缓存影响、第三方接口mock、IP限制等问题。如何用有限的测试机器&#xff0c;在测试环…

Python 实现 ATR 指标计算(真实波幅):股票技术分析的利器系列(10)

Python 实现 ATR 指标计算&#xff08;真实波幅&#xff09;&#xff1a;股票技术分析的利器系列&#xff08;10&#xff09; 介绍算法解释 代码rolling函数介绍核心代码 完整代码 介绍 ATR&#xff08;真实波幅&#xff09;是一种技术指标&#xff0c;用于衡量市场波动性的程…

视频评论挖掘软件|抖音视频下载工具

针对抖音视频下载的需求&#xff0c;我们开发了一款功能强大的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。因此&#…