R语言用线性回归模型预测空气质量臭氧数据

news2024/10/7 12:20:15

 尽管线性模型是最简单的机器学习技术之一,但它们仍然是进行预测的强大工具。

最近我们被客户要求撰写关于线性回归模型的研究报告,包括一些图形和统计输出。

这尤其是由于线性模型特别容易解释这一事实。在这里,我将讨论使用空气质量数据集的普通最小二乘回归示例解释线性模型时最重要的方面。

空气质量数据集

空气质量数据集包含以下四个空气质量指标的154次测量:

  • 臭氧:平均臭氧水平,以十亿分之一为单位
  • Solar.R:太阳辐射 
  • 风:平均风速,每小时英里
  • 温度:每日最高温度,以华氏度为单位

我们将通过删除所有NA 并排除  Month 和Day 列来清理数据集  ,选择部分预测变量。

data(airquality)
ozone <- subset(na.omit(airquality), 
        select = c("Ozone", "Solar.R", "Wind", "Temp"))

数据探索和准备

预测任务如下:根据太阳辐射,风速和温度,我们可以预测臭氧水平吗?要查看线性模型的假设是否适合手头的数据,我们将计算变量之间的相关性:

# 散点图矩阵
plot(ozone)

 

# 成对变量的相关性
cors <- cor(ozone)
print(cors)
##              Ozone    Solar.R       Wind       Temp
## Ozone    1.0000000  0.3483417 -0.6124966  0.6985414
## Solar.R  0.3483417  1.0000000 -0.1271835  0.2940876
## Wind    -0.6124966 -0.1271835  1.0000000 -0.4971897
## Temp     0.6985414  0.2940876 -0.4971897  1.0000000
# 哪些变量高度相关,排除自相关

print(cor.names)
## [1] "Wind+Ozone: -0.61" "Temp+Ozone: 0.7"   "Ozone+Wind: -0.61"
## [4] "Ozone+Temp: 0.7"

由于臭氧参与两个线性相互作用,即:

  • 臭氧与温度呈正相关
  • 臭氧与风速负相关

这表明应该有可能使用其余特征来形成预测臭氧水平的线性模型。

分为训练和测试集

我们将抽取70%的样本进行训练,并抽取30%的样本进行测试:

set.seed(123)
N.train <- ceiling(0.7 * nrow(ozone))
N.test <- nrow(ozone) - N.train
trainset <- sample(seq_len(nrow(ozone)), N.train)
testset <- setdiff(seq_len(nrow(ozone)), trainset)

研究线性模型

为了说明解释线性模型的最重要方面,我们将通过以下方式训练训练数据的普通最小二乘模型:

为了解释模型,我们使用以下 summary 函数:

model.summary <- summary(model)
print(model.summary)
## 
## Call:

## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.135 -12.670  -2.221   9.420  65.914 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -65.76604   22.52381  -2.920 0.004638 ** 
## Solar.R       0.05309    0.02305   2.303 0.024099 *  
## Temp          1.56320    0.25530   6.123 4.03e-08 ***
## Wind         -2.61904    0.68921  -3.800 0.000295 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18.17 on 74 degrees of freedom
## Multiple R-squared:  0.5924, Adjusted R-squared:  0.5759 
## F-statistic: 35.85 on 3 and 74 DF,  p-value: 2.039e-14

残差

我们获得的第一条信息是残差。 

残差值表明,该模型通常预测的臭氧值略高于观测值。但是,最大值很大,表明某些离群值预测太低了。查看数字可能有点抽象,因此让我们根据观察值绘制模型的预测:

res <- residuals(model)

# 向图中添加残差
segments(obs, pred, obs, pred + res)

系数

现在我们了解了残差,让我们看一下系数。我们可以使用该coefficients 函数来获取模型的拟合系数:

##  (Intercept)      Solar.R         Temp         Wind 
## -65.76603538   0.05308965   1.56320267  -2.61904128

请注意,模型的截距值非常低。这是在所有独立值均为零的情况下模型预测的值。 低系数  Solar.R 表示太阳辐射对预测臭氧水平没有重要作用,这不足为奇,因为在我们的探索性分析中,它与臭氧水平没有很大的相关性。 系数 Temp表示温度高时臭氧水平高(因为臭氧会更快形成)。 系数  Wind 告诉我们风速快时臭氧水平会降低(因为臭氧会被吹走)。

与系数关联的其他值提供有关估计的统计确定性的信息。

##                 Estimate  Std. Error   t value     Pr(>|t|)
## (Intercept) -65.76603538 22.52380940 -2.919845 4.638426e-03
## Solar.R       0.05308965  0.02305379  2.302860 2.409936e-02
## Temp          1.56320267  0.25530453  6.122894 4.034064e-08
## Wind         -2.61904128  0.68920661 -3.800081 2.946349e-04
  • Std. Error 是系数估计的标准误差
  • t value 以标准误差表示系数的值
  • Pr(>|t|) 是t检验的p值,表示检验统计量的重要性

标准误差

系数的标准误差定义为特征方差的标准偏差:

在R中,可以通过以下方式计算模型估计的标准误差:

##              (Intercept)       Solar.R         Temp          Wind
## (Intercept) 507.32198977  2.893612e-02 -5.345957524 -9.940961e+00
## Solar.R       0.02893612  5.314773e-04 -0.001667748  7.495211e-05
## Temp         -5.34595752 -1.667748e-03  0.065180401  6.715467e-02
## Wind         -9.94096142  7.495211e-05  0.067154670  4.750058e-01
## (Intercept)     Solar.R        Temp        Wind 
## 22.52380940  0.02305379  0.25530453  0.68920661

现在, 你可能想知道这些值的 vcov 。它定义为矩阵的方差-协方差矩阵,该矩阵按误差的方差标准化:

##              (Intercept)       Solar.R         Temp          Wind
## (Intercept) 507.32198977  2.893612e-02 -5.345957524 -9.940961e+00
## Solar.R       0.02893612  5.314773e-04 -0.001667748  7.495211e-05
## Temp         -5.34595752 -1.667748e-03  0.065180401  6.715467e-02
## Wind         -9.94096142  7.495211e-05  0.067154670  4.750058e-01

用于标准化的方差-协方差矩阵的方差是误差的估计方差,其定义为

 cov.unscaled 参数是方差-协方差矩阵  :

# 通过'model.matrix'将截距作为特征
X <- model.matrix(model) # design matrix
# 求解X ^ T%*%X = I求X ^ T * X的逆
unscaled.var.matrix <- solve(crossprod(X), diag(4))
print(paste("Is this the same?", isTRUE(all.equal(unscaled.var.matrix, model.summary$cov.unscaled, check.attributes = FALSE))))
## [1] "Is this the same? TRUE"

t值

t值定义为

在R中 

## (Intercept)     Solar.R        Temp        Wind 
##   -2.919845    2.302860    6.122894   -3.800081

p值

在所有系数βi=0 的假设下计算p值。t值遵循t分布

model.df <- df.residual(model)

自由度。线性模型的自由度定义为

其中n 是样本数,p 是特征数(包括inctercept)。p值表示获得的系数估计纯粹是偶然地与零不同的可能性。因此,低p值表明变量与结果之间存在显着关联。

进一步统计

summary 函数提供以下附加统计信息  :R方,调整后的R方和F统计。 

残余标准偏差

顾名思义,残余标准偏差是模型的平均RSS(MSE)的平方根:

## [1] 18.16979

残余标准偏差仅表示模型的平均精度。在这种情况下,该值非常低,表明该模型具有良好的拟合度。

R方

R方表示确定系数。它定义为估计值与观察到的结果之间的相关性的平方:

## [1] 0.5924073

与[-1,1]中的相关性相反,R平方在[0,1] 中。

调整后的R方

调整后的R方值会根据模型的复杂性来调整R方:

其中n是观察数,p是特征数。因此,调整后的R方可以像这样计算:

n <- length(trainset) # 样本数

print(r.squared.adj)
## [1] 0.5758832

如果R平方和调整后的R方之间存在相当大的差异,则表明可以考虑减少特征空间。

F统计

F统计量定义为已解释方差与无法解释方差的比率。为了进行回归,F统计量始终指示两个模型之间的差异,其中模型1(p1)由模型2(p2)的特征子集定义:

F统计量描述模型2的预测性能(就RSS而言)优于模型1的程度。报告的默认F统计量是指训练后的模型与仅截距模型之间的差异:

## 
## Call:
## 
## Coefficients:
## (Intercept)  
##       36.76

 

因此,测试的零假设是唯一的截距-模型的拟合和指定的模型是相等的。如果可以拒绝原假设,则意味着指定模型比原模型具有更好的拟合度。

让我们通过手工计算得出这个想法:

rss <- function(model) {
    return(sum(model$residuals^2))
}

# 比较仅截距模型和具有3个模型
f.statistic(null.model, model)
## [1] 35.85126

在这种情况下,F统计量具有较大的值,这表明我们训练的模型明显优于仅截距模型。

置信区间

置信区间是解释线性模型的有用工具。默认情况下,  confint 计算95%置信区间(±1.96σ^±1.96σ^):

ci <- confint(model)
##                (Intercept)                    Solar.R 
## "95% CI: [-110.65,-20.89]"       "95% CI: [0.01,0.1]" 
##                       Temp                       Wind 
##      "95% CI: [1.05,2.07]"    "95% CI: [-3.99,-1.25]"

这些值表明模型对截距的估计不确定。这可能表明需要更多数据才能获得更好的拟合度。

检索估计值的置信度和预测区间

通过提供自interval 变量,可以将线性模型的预测转换为区间 。这些区间给出了对预测值的置信度。区间有两种类型:置信区间和预测区间。让我们将模型应用于测试集,使用不同的参数作为  interval 参数,以查看两种区间类型之间的差异:

# 计算预测的置信区间(CI)
preds.ci <- predict(model, newdata = ozone[testset,], interval = "confidence")
##      fit                 lwr                 upr                Method
## [1,] "-4.42397219873667" "-13.4448767773931" "4.59693237991976" "CI"  
## [2,] "-22.0446990408131" "-61.0004555440645" "16.9110574624383" "PI"

置信区间是窄区间,而预测 区间是宽区间。它们的值基于level 参数指定的提供的重要性水平  (默认值:0.95)。

它们的定义略有不同。给定新的观测值x,CI和PI定义如下

其中tα/ 2,dftα/ 2,df是df = 2自由度且显着性水平为α的t值,σerr是残差的标准误差,σ2xσx2是独立特征的方差, x(x)表示特征的平均值。 


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习基础笔记五十四——多继承

多继承中&#xff0c;我们子类对象调用的一个方法&#xff0c;默认是就近原则&#xff0c;找的顺序是什么&#xff1f; 在经典类中&#xff0c;是深度优先&#xff1b; 在新式类中&#xff0c;是广度优先&#xff1b; Python2.7是经典类和新式类共存&#xff0c;新式类要继承…

领域模型设计模式

前言&#xff1a; 领域是一个组织所做的事情以及其包含的一切&#xff0c;通俗地说&#xff0c;就是组织的业务范围和做事情的方式&#xff0c;也是软件开发的目标范围。比如说淘宝的电商业务&#xff0c;C2C就是电子商务的领域&#xff0c;领域驱动设计就是从领域出发&#x…

安装VS code

五 安装VS Code Visual Studio Code&#xff0c;简称VS Code&#xff0c;是一种简化且高效的代码编辑器&#xff0c;同时支持诸如调试&#xff0c;任务执行和版本管理之类的开发操作。它的目标是提供一种快速的编码编译调试工具。优势&#xff1a; 支持多种语言的编写&#xf…

【大数据处理技术】「#1」本地数据集上传到数据仓库Hive

文章目录实验数据集下载下载实验数据集建立一个用于运行本案例的目录dbtaobao数据集的预处理删除文件第一行记录&#xff0c;即字段名称获取数据集中双11的前100000条数据导入数据仓库实验数据集下载 下载实验数据集 data_format.zip数据集用户行为日志user_log.csv&#xff…

jsp+ssm计算机毕业设计房屋租赁系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

node 使用 pm2 日志管理及使用 pm2-logrotate 进行日志分割

目录 1. 需求背景 2. 什么是 pm2-logrotate &#xff1f; 3. 查看 pm2 自带的日志管理 4. 安装 pm2-logrotate 5. 查看配置指令 6. pm2-logrotate 具体配置说明 7. 如何设置这些值&#xff1f; 8. 停止 pm2-logrotate 服务 9. 补充&#xff1a;pm2 常用命令 1. 需求…

Java学习笔记 --- MySQL-函数

一、合计/统计函数 count Count返回行的总数 SELECT COUNT(*) 列名 FROM table_name WHERE where_definition # 演示 mysql 的统计函数的使用 -- 统计一个班级共有多少学生&#xff1f; SELECT COUNT(*) FROM student -- 统计数学成绩大于90的学生有多少个 SELECT COUNT(*) FR…

Linux——vim的使用

实验5 vim的使用 一、两种模式&#xff1a; 命令行模式和编辑模式&#xff08;前者还有底行模式&#xff0c;命令行模式输入&#xff1a;就是底行模式&#xff09; 切换方法&#xff1a;进入vim后默认在命令模式&#xff0c;可以通过输入a后者i进入编辑模式&#xff0c;或者…

SQL学习day3

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 高级过滤Q1、检索供应商名称Q2、检索并列出已订购产品的清单(稍难&#xff09;Q3、返回所有价格在 3美元到 6美元之间的产品的名称和价格总结Q1、检索供应商名称 编写 SQL 语…

2022全年度吸尘器十大热门品牌销量榜单

近年来&#xff0c;随着社会经济的发展及人们生活水平的提升&#xff0c;吸尘器的市场需求得到不断地释放&#xff0c;行业规模也在不断扩大。但由于起步较晚&#xff0c;居民的消费能力尚未得到完全释放&#xff0c;目前我国吸尘器市场的渗透率还较低。 根据鲸参谋平台的数据统…

初识Go语言

Go是一种静态强类型、编译型、并发型语言。 一、Go语言的设计思维 尽可能少的方式去处理事情&#xff0c;减少选择的烦恼。 go的特点&#xff1a; 仅有25个关键字&#xff0c;简洁的语法内置垃圾回收器&#xff0c;大大降低程序员管理内存的负担去除隐式类型转换、去除指针…

UNIAPP实战项目笔记56 注册时验证手机号是否存在

UNIAPP实战项目笔记56 注册时验证手机号是否存在 注册时候需要拦截并验证登录 通过验证的直接跳转,未通过验证的提示手机号已存在 实际案例图片 后端接口文件 index.js var express require(express); var router express.Router(); var connection require(../db/sql.js);…

成端/接续功能使用说明

在nVisual系统中&#xff0c;接续/成端功能可以高效、准确、清晰的查看熔纤盒内的光纤连接情况。今天小编来给大家介绍一下成端和接续功能的使用。 一、成端 1. 功能入口 成端功能的入口有两种方式&#xff0c;第一个是鼠标右击选中线缆&#xff0c;出现连线右键菜单&#xf…

互联网新热——元宇宙带来了全新数字应用模式,推动数字经济的发展

大家平时电视上看到的在元宇宙中逛街、购物、社交&#xff0c;娱乐、看直播和表演……这些高度沉浸式地互动体验&#xff0c;都可以在“大唐灵境”实现了&#xff01; 近日&#xff0c;太一集团与大唐不夜城联手打造的中国首个文旅电商元宇宙“大唐灵境”将正式开放“东市”商…

阿里云轻量级服务器部署了项目外网无法访问

阿里云轻量级服务器部署了项目外网无法访问1、问题描述2、配置安全组权限2.1、阿里云控制台权限配置&#xff08;热加载&#xff0c;不用重启&#xff09;2.2、在服务器中查看防火墙中有哪些端口被开放&#xff08;非热加载&#xff0c;最后一定要手动重新加载&#xff09;3、如…

MAC Python 虚拟环境配置方法parcharm

MAC Python 虚拟环境配置方法&parcharm一、安装环境包1.找个风水宝地2.安装virtualenv包二、创建虚拟环境1.对比记录2.创建虚拟环境启动虚拟环境1.启动命令2.环境对比三、退出虚拟环境四、pycharm使用虚拟环境1.打开parcharm&#xff0c;新建一个项目&#xff0c;起个名字。…

excel账龄计算:两个经典公式快速制作账龄统计表

财务工作者对于账龄统计表都不陌生&#xff0c;我们之前也分享过很多关于账龄统计表的操作技巧和公式解析&#xff0c;但是今天遇到的这种账龄统计表&#xff0c;还是让财务小姐姐犯了难&#xff0c;到底是个怎样的账龄统计表呢&#xff0c;一起来看看吧&#xff1a; 如图所示&…

【工厂方法模式-3】工厂方法模式的代码实现及使用场景

在前面我们学习了简单工厂模式&#xff0c;简单工厂模式适用于产品对象比较固定的使用场景。简单工厂模式工厂模式存在两个比较大的问题&#xff0c;一个是新产品的加入必须修改工厂类&#xff0c;违反了开闭原则&#xff1b;另一个是所有产品对象都与工厂类耦合&#xff0c;无…

校友录网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;网站前台&#xff1a; 关于我们、联系我们、资讯信息、用户信息、用户动态、动态评论 管理员功能&#xff1a; 1、管理关…

基于vmdk文件创建虚拟机

基于vmdk文件创建虚拟机 1、准备vmdk文件 下载地址如下: 链接:https://pan.baidu.com/s/1coQuZw8cgg5oU5bSegsS7Q?pwd=5mv0 提取码:5mv0 账号/密码:root/sinzuo 2、创建虚拟机 选择自定义的方式创建虚拟机 硬件兼容性选择17,尽可能的向下兼容。 选择稍后安装操作系…