R语言 回归诊断几种方法

2023-11-01

回归诊断技术提供了评价回归模型使用性的必要工具,能帮助发现并且纠正问题。

有几种方法进行回归诊断。

分别是标准方法、car包中的函数、gvlma函数。建议先通过gvlma函数进行验证,如果违反假设条件,再使用其他方法来判断哪些假设没有满足并进行修改。

第一种:标准方法(了解),对lm()函数的返回对象使用plot()函数。

> fit<-lm(weight~height,data=women)
> par(mfrow=c(2,2))
> plot(fit)

在这里插入图片描述

最好满足线性假设(左上),残差正态性(右上)和同方差性(左下)。

线性假设:若因变量与自变量线性相关,那么残差值和预测值应该没有任何关联。如果在左上图中看到清楚的曲线关系,那么需要对回归模型加上一个二次项。

正态性:若满足正态假设,那么右上图的点应该落在呈45度角的直线上。

同方差性:若满足不变方差假设,那么左下图中,水平线周围的点应该随机分布。

从上面四个图可见,这次的拟合看起来满足了正态性和同方差性,但是最好对回归模型加上一个二次项来满足线性假设。

> fit<-lm(weight~height+I(height^2),data=women)
> par(mfrow=c(2,2))
> plot(fit)

在这里插入图片描述

这样看起来就满足了线性假设,残差正态性和同方差性。
右下的图为残差杠杆图,可以鉴别出离群点、高杠杆点和强影响点。可以通过剔除强影响点来提高模型的拟合程度,但是后面还有更好的呈现方法,所以这里就不对这张图作深入,稍微了解即可。

方法二:使用car包中的函数进行验证:

1、正态性:通过qqPlot()检测正态性

> library(car)
> fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
> qqPlot(fit,labels=row.names(states),id.method="identify",simulate=TRUE,main="Q-Q Plot")

在这里插入图片描述

看起来除了Nevada和Rhode Island,其他州通过模型,根据该州的人口、收入、文盲率和温度预测所得的谋杀率结果都十分理想。

2、误差的独立性:通过函数作Durbin-Wstson检验

> library(car)
> fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
> durbinWatsonTest(fit)

p值是0.234,显然误差项之间相互独立

3、线性
使用car包中的crPlots()函数绘制。

> library(car)
> crPlots(fit)

在这里插入图片描述

如果图中显示出了非线性的关系,可能说明假设的模型不够精确,需要添加适当的曲线成分,比如多项式项或者对其中的变量进行变换(例如用log(x)代替x)。
从图中看,似乎线性模型对这个数据集是比较合适的。

4、同方差性:
car包提供了两个函数:
**ncvTest():**生成一个计分检验。若检验显著,则拒绝零假设。
**零假设:**误差方差不变
**备选假设:**误差方差随着拟合值水平变化而变化
**spreadLevelPlot():**创建添加了最佳拟合曲线的散点图。

> ncvTest(fit)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 1.746514, Df = 1, p = 0.18632

p=0.18,不显著,说明满足方差不变的假设。

> spreadLevelPlot(fit)
Suggested power transformation:  1.209626 

也可以通过这个函数绘制出来的图片看到出这个结论,如果违反假设,那么会看到非水平的曲线。其中suggested power transformation为建议转换的幂,比如如果为0.5,那么fit可以改为:

> fit<-lm(Murder~I((Population+Illiteracy+Income+Frost)^(0.5)),data=states)

方法三:使用gvlma()函数进行线性模型假设的综合验证
它给模型提供了一个单独的综合检验(通过/不通过)

> library(gvlma)
> gvmodel<-gvlma(fit)
> summary(gvmodel)

在这里插入图片描述

可见,Global Stat中,p=2.5965 ,满足OLS回归模型中的所有统计假设。若p值过小,可以使用前面的方法来判断哪些假设没有被满足。

PS:
多重共线性:

多重共线性是指线性回归模型中的解释变量之间由于存在精确相关关系或高度相关关系而使模型估计失真或难以估计准确,具体表现为模型参数的置信区间过大,使单个系数难以解释。

可以使用car包中的vif函数计算vif值,一般原则下,如果(vif)^(1/2) >2就表明村庄多重共线问题(结果为TRUE)。

> library(car)
> fit<-lm(Murder~Population+Illiteracy+Income+Frost,data=states)
> vif(fit)
Population Illiteracy     Income      Frost 
  1.245282   2.165848   1.345822   2.082547 
> sqrt(vif(fit))>2#problem?
Population Illiteracy     Income      Frost 
     FALSE      FALSE      FALSE      FALSE 

可见,此模型不存在多重共线性问题,

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

R语言 回归诊断几种方法 的相关文章

随机推荐

  • 新安装Android Studio创建项目失败解决方法

    一 梗概 第一次安装Android Studio的时候 因为被墙等原因 Gradle总是出错导一直构建不了项目 Failed to open zip file Gradle s dependency cache may be corrupt
  • Delphi / C ++ Builder / Lazarus报表开发:如何直接从代码中保存BPM / JPEG / TIFF / GIF?

    报表生成器FastReport VCL是用于在软件中集成商务智能的现代解决方案 它提供了可视化模板设计器 可以访问最受欢迎的数据源 报告引擎 预览 将过滤器导出为30多种格式 并可以部署到云 Web 电子邮件和打印中 近日 FastRepo
  • Hexo + GitHub 搭建个人博客(三) Hexo配置

    Hexo 博客配置 你可以 在根目录下 config yml 中 修改大部分的配置 网站 参数 描述 title 网站标题 subtitle 网站副标题 description 网站描述 keywords 网站的关键词 支持多个关键词 au
  • TCP/UDP/Socket 通俗讲解

    1 封包和拆包 封包 就是发送数据前把自己本地需要发送的数据包装一下 即把要发送的原始数据附加上接受者可以辨识到自己身份等一些额外信息 有点像寄一封信 信封上填写的寄件人和收件人以及地址 拆包 是接收到对方封包后发送来的数据后 拆出原始信息
  • c++基础2:使用VS2010 创建最简单的MFC应用程序窗体

    1 添加 新建项目 选择 VISUAL C MFC应用程序 确定 下一步 2 在 应用程序类型 中选择 基于对话框 下一步 3 在 用户界面功能 只选择 粗框架 下一步 4 在 高级功能 取消所有选择 下一步 5 生成的类 点击 完成
  • 用Cmake生成opencv_contrib的python接口

    最近在看opencv的Fisherface Eigenface的部分 但具体实现时发现该库包含在opencv的contrib模块里 这个模块是opencv的扩展库 里面包括很多特征的算法 SIFT SURF Adaboost算法 ml还有神
  • Ubuntu 下命令行创建(删除)文件(夹)

    很多时候我们都会在终端进行文件 文件夹的创建与删除 使用快捷键ctrl alt t 打开终端 创建文件 touch a txt 创建文件夹 mkdir NewFolder 删除文件 rm a txt 删除文件夹 rmdir NewFolde
  • php 格式化 字符串

    private function setStringSubstr str len sublen len string strip tags str string preg replace n is string string preg re
  • CentOS使用 wget 命令报错Temporary failure in name resolution 解决方法

    在CentOS中安装Redis时使用wget下载一个文件出现了如下问题 wget http download redis io releases redis 3 0 7 tar gz failed Temporary failure in
  • 煤矿智能化相关50项团体标准征求意见

    智能化煤矿总体架构 原文地址 https chinacs scimall org cn a3651 html 由煤矿智能化创新联盟等单位提出 中国煤炭学会归口 中煤科工集团常州研究院有限公司等单位起草的 煤矿通信接口与协议通用技术要求 50
  • java中序列化与反序列化_Java中的序列化示例

    java中序列化与反序列化 Serialization in Java is the process of converting an object into bytes stream to save it in file Or we ca
  • 图:最小生成树

    一 最小生成树 1 1 生成树的定义 一个连通图的生成树是 个极小的连通子图 它包含图中全部的n个顶点 但只有构成 棵树的n 1条边 连通图和它相对应的 成树 可以 于解决实际生活中的问题 假设A B C 和 D 为 4 座城市 为了 便
  • window服务器上发布net项目,在windows服务器上使用winsw部署spring boot项目

    简介 springboot项目需要在windows上部署 spring官方推荐使用winsw来将springboot项目作为服务运行 参考 安装使用 winsw的使用比较简单 从github上下载 winsw下载 要下载的文件有两个 1 w
  • 《Kotlin从小白到大牛》第22章:Kotlin I/O与文件管理

    第22章 Kotlin I O与文件管理 Kotlin I O 输入与输出 是基于Java I O流技术 但是Java I O流技术使用起来比较繁琐 Kotlin提供了很多扩展 使代码变得简洁 本章介绍Kotlin I O流和文件管理相关知
  • 使用jstack排查线上故障:高CPU占用

    1 前言 一个应用占用CPU很高 除了确实是计算密集型应用之外 通常原因都是出现了死循环 我们以当时出现的实际故障为例 来介绍怎么定位和解决这类问题 2 排查步骤 思路 找出tomcat 进程中使用CPU最高 时间最长的线程 分析堆栈信息
  • Java中栈的实现(1)-使用顺序存储结构(数组)以及实现

    栈和队列其实是与普通的线性发展而来的 为普通的线性表增加一些特殊的限制就可以得到栈和队列了 从功能上看 栈和队列比普通的线性表功能相对弱一点 但是在特殊的场合下 使用栈和队列更有利 例如 编译器在实现函数的调用的时候需要使用栈来存储断点 实
  • js中apply方法的使用详细解析_宿雪家的小镇_新浪博客

    1 对象的继承 一般的做法是复制 Object extendprototype js的实现方式是 复制代码代码如下 Object extend function destination source for property in sour
  • Android平台实现ping功能方案----避过ping数据构建需要root权限的限制

    PingForAndroid C库采用SOCK DGRAM方式构建icmp包 避开raw socket必须root权限的限制 实现ping功能 Github https github com bgylde PingForAndroid pi
  • linux shell 等待输入_shell中获得用户的输入

    有时我们需要shell脚本有更多的交互性 比如我们安装某个linux命令的时候 会提示 N Y 选择安装或者放弃 这时就需要用到shell的read命令 read命令的基本使用 演示代码如下 其中 n表示字符串输出尾端不换行 还可以直接在r
  • R语言 回归诊断几种方法

    回归诊断技术提供了评价回归模型使用性的必要工具 能帮助发现并且纠正问题 有几种方法进行回归诊断 分别是标准方法 car包中的函数 gvlma函数 建议先通过gvlma函数进行验证 如果违反假设条件 再使用其他方法来判断哪些假设没有满足并进行