R语言——(六)、线性回归模型

2023-11-07

提示:以下是本篇文章正文内容,下面案例可供参考,以下纯属学习笔记。其中借助到了许多资料。书籍。

回归分析*

回归分析(regression analysis)是统计分析中最重要的思想之一
被广泛应用于社会经济现象中变量之间的影响因素分析

回归分为:线性回归、非线性回归

问题提出*

例1:为了研究家庭月消费支出与月可支配收入之间的关系,
随机调查了12户家庭,具体数据如下:
可支配收入(income):800,1100,1400,1700,2000,2300,2600,2900,3200,3500
消费支出(consume):594,638,1122,1155,1408,1595,1969,2078,2585,2530

consum=c(594,638,1122,1155,1408,1595,1969,2078,2585,2530)
income=c(800,1100,1400,1700,2000,2300,2600,2900,3200,3500)
#首先对数据探索性分析
cor(income,consum) #计算pearson相关系数
plot(income,consum) #画散点图
abline(lm(consum~income))#添加回归趋势线

在这里插入图片描述

可以发现,income和consum之间具有较强的正线性关系
但是,从探索性结果并不知道这种线性关系的具体数量关系。

例2: 一组年龄与最大心率数据:
年龄Age (x): 18,23,25,35,65,54,34,56,72,19,23,42,18,39,37
最大心率MaxRate (y): 202,186,187,180,156,169,174,172,153,199,193,174,198,183,178
研究年龄与最大心率之间的关系。

x = c(18,23,25,35,65,54,34,56,72,19,23,42,18,39,37) 
y=c(202,186,187,180,156,169,174,172,153,199,193,174,198,183,178)
探索性分析x、y之间的关系:
cor(x,y)#计算pearson相关系数
cor.test(x,y)  #相关性检验
plot(x,y)
abline(lm(y~x))

在这里插入图片描述

从以上分析可知,x,y之间具有很强的负(线性)相关性
但不知道具体的数量关系

以上两个例子中,想要知道两个变量之间的具体数量关系,
需要作线性回归分析

一、 一元线性回归

在这里插入图片描述

data=read.table("consum_p.txt")
data
x=data$V1 #定义可支配收入V1为x
y=data$V2 #定义消费支出V2为y

plot(x,y,xlab="x(可支配收入)",ylab="y(消费支出)")

在这里插入图片描述

由散点图可知,家庭消费支出y的平均值随可支配收入x的增加而增加并且y的条件均值和收入x近似落在一条直线上,称这条直线即为回归线(总体的),相应的函数E(Y|Xi)=f(Xi)称为回归函数(总体的),总体回归函数,刻画了被解释变量Y的平均值随解释变量X变化的规律。

二、一元线性回归的参数估计

回归分析的目的:
通过样本回归模型尽可能准确地估计总体回归模型

回归模型中参数的估计方法很多,其中最常用的是:
普通最小二乘法(OLS)和极大似然估计法(MLE).

1. 普通最小二乘估计(OLS)

原理:使得样本观测值Y_i与拟合值Y_hat之间的差的平方和最小,从而达到估计模型参数的目的。

R中OLS估计的命令是:

lm(formula, data, subset, weights, na.action,
   method = "qr", model = TRUE, x = FALSE, y = FALSE, qr = TRUE,
   singular.ok = TRUE, contrasts = NULL, offset, ...)
formula表示回归模型里的表达式,一般为y~x,
前面是被解释变量,~ 后面是解释变量
默认模型中包含截距项
当不需要截距项时,在解释变量前面添加一项-1,即:y~-1+x

例1:上面收入与支出中的OLS估计:

 lm1=lm(consum~income);lm1
 coef(lm1)#提取回归系数
 lm2=lm(consum~-1+income);lm2
 coef(lm(consum~-1+income))

在这里插入图片描述

例2:x和y的线性回归,OLS估计:

 x = c(18,23,25,35,65,54,34,56,72,19,23,42,18,39,37) 
 y=c(202,186,187,180,156,169,174,172,153,199,193,174,198,183,178)
 lm3=lm(y~x);lm3
 coef(lm3)

在这里插入图片描述

2. 极大似然估计(MLE)

MLE的原理:利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值!

在满足基本假设条件下,模型的MLE估计与OLS估计是相同的。
R中,求MLE的函数是maxLik包中的maxLik()函数
但是,在求MLE之前,需要先写出对数似然函数的表达式

install.packages(“maxLik”)#安装极大似然估计函数包
library(maxLik) #或者使用require(maxLik)函数加载
定义对数似然函数的表达式:

loglik=function (para){
       N=length(consum)#自变量(consum消费)的观测值个数
       e=consum-para[1]-para[2]*income #消费的真实值与消费的估计值之间的误差(即为残差)
       ll=-0.5*N*log(2*pi)-0.5*N*log(para[3]^2)-0.5*sum(e^2/para[3]^2)
       return(ll)
       }

然后可以使用maxLik()函数求MLE,命令:maxLik(logLik, start)
logLik为极大似然函数
start为参数的初始值,

mle1=maxLik(loglik,start=c(0.1,1,1));mle1

在这里插入图片描述

start=c(0.1,1,1)中的0.1是指截距项的初始值,
第二个分量中的1是指解释变量回归系数的初始值,
第三个分量中的1是方差的初始值

coef(mle1)

在这里插入图片描述

coef(mle1)是返回极大似然估计的系数,

第一个系数-103.3670361是截距项
第二个系数0.7770876是自变量income的回归系数
第三个系数103.4893151是σ^2的估计值
可以发现,和前面的OLS估计结果一致

上面maxLik()函数的作用也等价于:
使得残差平方和最小,求得参数的估计值,

3.随机误差项μ的方差σ^2的估计

R中,估计误差项μ的方差σ^2时,
需要先利用summary()函数将OLS估计的结果
保存到一个对象中,然后在该对象中提取sigma成分(即(σ_hat)^2)

求收入、支出方差σ^2的估计结果:

consum=c(594,638,1122,1155,1408,1595,1969,2078,2585,2530)
income=c(800,1100,1400,1700,2000,2300,2600,2900,3200,3500)
lm1=lm(consum~income);lm1
slm<-summary(lm1)#将lm()的结果lm1保存到一个对象slm中
slm 

#如果要单独提取μ的方差σ^2的估计量,则用下面的命令:
slm$sigma #提取回归结果中的sigma(即,误差项μ的方差σ^2估计量(σ_hat)^2)

#单独提取参数估计值β0_hat和β1_hat的标准差:
slm$coef #得到系数有关的矩阵
slm$coef[,2] #提取矩阵中的第二列,即是系数的标准差

在这里插入图片描述

二、一元线性回归模型的检验

模型检验主要包括:
拟合优度检验(可决系数R^2);
变量的显著性检验(t检验)。

1. 拟合优度检验(R^2)

拟合优度检验,是检验模型对观测值的拟合程度;
拟合优度用指标R^2度量;
0 <= R^2 <= 1,R^2越接近1,说明拟合程度越高,模型越好。
通常,R^2 >= 0.8 时认为模型的拟合程度较好。

求R^2非常简单,在模型回归结果中提取即可,命令是:保存回归结果的对象$r.squared

2. 解释变量的显著性检验(t test)

模型检验的第二个内容是:
检验解释变量x是否为被解释变量Y的一个显著影响因素。
检验的统计量为 t 统计量

在R中,summary()函数会自动提供线性回归的t检验统计量,
可以通过命名: “回归结果的存储对象$coef” 提取,
可以提取到 “回归系数的估计值、标准差、t值、相应的P值”。

例如:

slm<-summary(lm1)
slm
slm$coef[,3]#提取相应矩阵中的第3列,即t值
slm$coef[,4]#提取相应矩阵中的第4列,即P值

在这里插入图片描述

从t统计量相应的P值可知:
β0_hat的t值为-1.048429,相应P值为3.250795e-01, 大于0.05,说明β0_hat不显著;
β1_hat的t值为18.289003,相应P值为8.217449e-08, 小于0.05,说明β1_hat显著。

三、 一元线性回归的预测

分为:点预测、区间预测

1. 点预测

(1).样本点外的解释变量观测值X0所对应的Y0_hat的预测值,
将x0带入回归模型中即可:

Y0_hat <- slm$coef[,1][1]+ slm$coef[,1][2]*4000; Y0_hat
Y0_hat <- coef(lm1)[1]+coef(lm1)[2]*4000; Y0_hat

Y0_hat也可以利用函数predict(),
但这需要在回归结果lm1基础上,且X0的格式要求是数据框的形式。

Y0_hat <- predict(lm1,newdata=data.frame(income=4000))
Y0_hat

(2).求样本内X给定下Y_hat的值:
在回归结果lm1上调用函数fitted()即可。

fitted(lm1)
round(fitted(lm1),2)#保留2位小数

如果想要返回残差,则在回归结果lm1上调用resid()函数即可:

resid(lm1)
round(resid(lm1),2)#保留2位小数
plot(resid(lm1))#画残差的散点图

2. 区间预测

(1)均值E(Y0|X0)的区间预测:

predict(lm1,newdata=data.frame(income=4000),interval="confidence",level=0.95)
#注意在设置参数interval时,要设置为"confidence"

在这里插入图片描述

预测结果中,fit=3004.869为点预测,
lwr=2804.927, upr=3204.811 分别为区间预测的下限和上限。

(2)Y0的区间预测:

predict(lm1,newdata=data.frame(income=4000),interval="prediction",level=0.95)
#注意在设置参数interval时,要设置为"prediction"

为了比较均值的预测区间和个值的预测区间,
将样本内观测值、回归线、均值预测区间,个值预测区间画在同一张图上:

 par(mfrow=c(1,1))
 sx=sort(income) # 先将自变量income的值从小到大排序
 conf = predict(lm1,data.frame(income=sx),interval="confidence")#求所有均值的预测区间
 conf
 pred = predict(lm1,data.frame(income=sx),interval="prediction")#求所有个值的预测区间
 pred
 plot(income,consum); #画散点图
abline(lm1) # 添加回归线
lines(sx,conf[,2]); lines(sx,conf[,3])#添加总体均值的95%置信区间
lines(sx,pred[,2],lty=3); lines(sx,pred[,3],lty=3)
#添加个体值的95%置信区间,lty=3是指虚线表示

在这里插入图片描述

四、 多元线性回归分析

1. 模型估计

例:研究中国税收收入增长的主要影响因素:
被解释变量:税收tax (Y)
解释变量:GDP (X1)、财政支出expand (X2)、物价指数CPI (X3)
模型设定:Y=β0+β1X1+β2X2+β3*X3+μ
在这里插入图片描述

模型估计:OLS估计

dat<-read.csv(file="tax.csv"); dat
lm3=lm(tax~GDP+expand+CPI,data=dat);lm3
lm4=lm(tax~GDP+expand+CPI+0,data=dat);lm4 #表示模型不含截距项
lm4=lm(tax~GDP+expand+CPI-1,data=dat);lm4
lm5=lm(tax~-1+GDP+expand+CPI,data=dat);lm5 #同样表示模型不含截距项
coef(lm3)

模型估计:MLE估计

attach(dat)
loglik=function (para){
       #para[5]=sigma
       N=length(tax)
       e=tax-para[1]-para[2]*GDP-para[3]*expand-para[4]*CPI
       ll=-N*log(sqrt(2*pi)*para[5])-(1/(2*para[5]^2))*sum(e^2)
       #ll=-0.5*N*log(2*pi)-0.5*N*log(para[5]^2)-0.5*sum(e^2/para[5]^2)
       return(ll)
       }
library(maxLik)
mle3=maxLik(loglik,start=c(6616,0.04,0.6,58,100),iterlim=10000)
mle3
coef(mle3)
detach()

2. 模型检验

(1)模型检验:拟合优度检验

检验模型的拟合优度

slm3<-summary(lm3)
slm3$r.squared
slm3$adj.r.squared #提取调整的可决系数

在这里插入图片描述

(2)模型检验:检验模型整体显著性

summary(lm3)

在这里插入图片描述

查看F统计量及对应的P值
F统计量为8982,对应P值为2.2e-16 < 0.05,说明模型整体显著。

(3)模型检验:检验各变量显著性

summary(lm3)$coef
#查看各t值及其对应的P值
#全部变量都显著
summary(lm3)

在这里插入图片描述

3. 模型预测

(1)单值预测
在上述例子假设2013年的GDP为520000亿元,财政支出expand为130000亿元,物价指数CPI为103%,预测2013年我国的税收tax。

coef(lm3)
coef(lm3)[1]+coef(lm3)[2]*520000+coef(lm3)[3]*130000+coef(lm3)[4]*103

在这里插入图片描述

(2)区间预测:E(Y0)和Y0的区间预测
求E(Y0)的预测区间时,设置参数interval=“confidence”
求Y0的预测区间时,设置参数interval=“prediction”

predict(lm3,interval="confidence")#E(Y0)的区间预测
predict(lm3,interval="prediction")#Y0的区间预测
predict(lm3,newdata=data.frame(GDP=520000,expand=130000,CPI=103),interval="confidence")
predict(lm3,newdata=data.frame(GDP=520000,expand=130000,CPI=103),interval="prediction")

参考教材:《R数据分析方法与案例详解》

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言——(六)、线性回归模型 的相关文章

随机推荐

  • 大数据分析实例:使用Python进行数据清洗与可视化

    大数据分析实例 使用Python进行数据清洗与可视化 随着大数据时代的到来 数据分析在各个领域中扮演着重要的角色 本文将介绍如何使用Python进行大数据分析的实例 包括数据清洗和可视化技术 我们将使用Python中一些常用的库 如NumP
  • Flask+MySQL学生信息维护系统

    Python课程期末项目 小白一个 学生信息维护系统项目概述 学生管理系统是一个基于 Python 的 Flask MySQL 项目 旨在实现对学生信息的管理和查询 该系统主要包括学生信息录入 信息查询 信息修改和信息删除 信息可视化等功能
  • 定时器的相关知识与运用定时器相关的程序

    一 定时器的介绍 1 定时器的介绍 51单片机的定时器属于单片机的内部资源 其电路的连接和运行均在单片机内部完成 2 定时器作用 1 用于计时系统 实现软件计时 或者使程序每隔一固定时间完成一项操作 2 替代长时间的Delay 提高CPU的
  • 如何解决IE浏览器主页被改为2345.com

    如何解决IE浏览器主页被改为2345 com 将桌面上IE图标删除 也将开始中的IE图标删除了 找到C Program Files Internet Explorer 将IE图标重新放在了桌面上 点击IE之后 终于好使了
  • 安装rpm软件,丢失库解决方案

    1 问题 root fei rpm ivh libevent 1 4 13 4 el6 i686 rpm error Failed dependencies libc so 6 is needed by libevent 1 4 13 4
  • go语言WaitGroup 实现原理

    Go语言中的WaitGroup是一种并发原语 用于等待一组goroutine的完成 它提供了三个方法 Add Done 和Wait Add delta int 向计数器添加或减去给定的值 delta可以为负数 Done 减少计数器的值 相当
  • [网络安全提高篇] 一二三.恶意样本分类之基于API序列和深度学习的恶意家族分类详解

    终于忙完初稿 开心地写一篇博客 网络安全提高班 新的100篇文章即将开启 包括Web渗透 内网渗透 靶场搭建 CVE复现 攻击溯源 实战及CTF总结 它将更加聚焦 更加深入 也是作者的慢慢成长史 换专业确实挺难的 Web渗透也是块硬骨头 但
  • SpringCloud -Nacos服务注册与发现

    Nacos简介 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务发现 服务配置 服务元数据及流量管理 Nacos 具有如下特性 服务发现和服务健康监测 支持基于DNS和基于RPC
  • c++ 实现压缩

    简介 目标 使用c 压缩文件夹 方法 调用exe来实现的压缩 这里调用的是自己编译的minizip exe 环境 win10 win7 visual studio 2019 资源 https github com ltCodeW miniz
  • Big Endian与Little Endian区别

    author skatetime 2010 03 05 Big Endian与Little Endian区别 1 什么是Big Endian和Little Endian 在设计计算机系统的时候 有两种处理内存中数据的方法 一种叫为littl
  • CoreData 如新如故

    真正的陪伴不是你的所有绝望我都感同身受 而是有我在一切都会好起来 乱糟糟的一天 最近在为新项目做准备 想使用CoreData框架作为数据持久化的操作方式 因为没用过 之前直接用的SQLite 就研究了下 才发现这是一个比较大的内容 既然是骨
  • 在使用函数式 setState 时报错 this.setState is not a function

    在react中点击事件里面 setState 时会使this重新定义 所以在点击的函数里面使用this setState 时会报错this setState not a function 因此需要提前给点击事件的函数绑定this
  • Python爬虫——异常处理(try/except/else/finally)

    1 什么是异常 当程序运行中检测到一个错误时 无法继续执行 出现了一些错误的提示 这就是异常 常见错误类型 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户终端执行
  • PAT乙级练习题_1023“组个最小数”_python解题

    原题 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 10015558 现给定数字 请
  • maven项目建立pom.xml报无法解析org.apache.maven.plugins:maven-resources-plugin:2.4.3

    原文地址 http blog csdn net woshixuye article details 14661983 一 发现问题 建立maven项目后 pom xml在显示红叉 鼠标放上去 显示Execution default test
  • IEEE模板解决找不到引用文献错误 Citation ‘×××ב on page x undefined.

    IEEE模板解决找不到引用文献错误 Citation on page x undefined 使用官网下载的IEEEtrans模板 bib文件格式正确 发现使用winedt编译就正常 但是使用vscode texlive编译器编译出来一个参
  • 1.5.2 ZFNet

    目录 1 5 2 ZFNet 5 7 反卷积 Deconvnet 5 7 1 上采样池化 UnPooling 5 7 2 反卷积过程 5 8 ZFNet 架构设计 5 9 ZFNet 的贡献 1 5 2 ZFNet 在前文中 我们对 Ale
  • 含面试题 Redis 为什么这么快?深度解析性能的奥秘超级用心的图文版

    面试题分享 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java python面试题 项目实战 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器
  • JNI odx bridge install dependent libs

    please copy bellow content to Markdown editor for better reading dependency libs libtool libxml2 cjson gtest glog gflags
  • R语言——(六)、线性回归模型

    文章目录 回归分析 问题提出 一 一元线性回归 二 一元线性回归的参数估计 1 普通最小二乘估计 OLS 2 极大似然估计 MLE 3 随机误差项 的方差 2的估计 二 一元线性回归模型的检验 1 拟合优度检验 R 2 2 解释变量的显著性