(R,线性回归)R语言里的模型诊断图(Residuals vs Fitted,Normal QQ , Scale-Location ,Residuals Leverage)

2023-10-26

线性回归,是概率统计学里最重要的统计方法,也是机器学习中一类非常重要的算法。线性模型简单理解非常容易,但是内涵是非常深奥的。尤其是线性回归模型中的Diagnostics plot的阅读与理解一直被认为是线性回归中的一个难点。

在任何线性模型中,能够直接“lm”(模型有意义),既要考虑各个参数的t-test所得出的p-value,也要考虑总体模型F-检验得出的p-value。在这之后,还要清楚一个线性模型是建立在以下五个假设的基础上的。如果不满足以下五个假设,那么模型即使通过了t-test和F-test,其预测效果也大打折扣。同时,也可以通过对这五个指标的研究,进一步优化模型(比如使用其他非参数统计方法,Box-Cox等变换方法,基于AIC,BIC,Adjusted-R^2,Cpd等方法的特征选择,Lasso,Ridge-regression,Elastic Net等等)。

• Normal i.i.d. errors

• Constant error variance

• Absence of influential cases

• Linear relationship between predictors and outcome variable

• Collinearity

而针对这五个假设进行验证,最直观和简单的方法就是用R语言自带的模型诊断图。但如前面所说,这些模型诊断图的阅读和理解,一直是一个难点。本人在这里详细的介绍这种方法。

我本人是习惯用python的。我其实非常不喜欢R复杂的包依赖关系以及在使用中繁琐的手动包安装过程。但是精细处理线性回归的问题,使用R比使用Python有更多的好处。

Python其实也有一个性能不错的统计学包,StatsModel:

http://www.statsmodels.org/stable/index.html

欢迎各位读者朋友尝试使用这一工具完成我们这篇文章中所讲的内容。在这里我们使用RStudio以及最新版本(当前时间是2019年3月8日)来进行项目分析。其实这也是我个人认为非常罕见的R的功能竟然比Python还要强大的地方。

我们首先使用lm()方法,也就是R语言中求线性回归的命令对任意一个线性模型进行线性回归。但是为了方便起见,我们可以把这个“线性回归"命名为fit。

fit=lm(因变量~自变量)

之后我们就可以用R语言绘制Diagnostics plot了。同样的,在R语言里,这里也只有一行代码。

 plot(fit)

如果您的代码确实可以执行,在RStudio中应该显示出四张图片。 分别是:

1. Residuals vs Fitted

2. Normal QQ

3. Scale-Location

4. Residuals vs Leverage

如图所示。就是一个这样的图:

æ¥çæºå¾å

但是这些图,画出来了,怎么去理解?在这里我们引用美国弗吉尼亚大学的一篇参考资料来给大家进行讲解。

原文地址是:https://data.library.virginia.edu/diagnostic-plots/

1. Residuals vs Fitted

 

diagnostics1

Resiuals即为残差的意思(估计值与真实值之差)。这就是残差与真实值之间的关系画图。在理想线性模型中有五大假设。其中之一便是残差应该是一个正态分布,与估计值无关。如果残差还和估计值有关,那就说明模型仍然有值得去改进的地方,当然,这样的模型准确程度也就大打折扣。

显然,左边的图残差和估计值基本是无关的。但是右边的图,残差和估计值几乎成一个二次关系。那么这样的模型就需要进行修正了。

如果您觉得单纯用图来看还不放心,在统计学里有四种检测方法可以进一步去测试残差和估计值是否是无关的。那便是:

Shapiro-Wilk

Kolmogorov-Smirnov

Anderson-Darling

Correlation test

你可以使用R,对你的模型分别进行以上四大检验。相关的资料可以参考Julian Faraway的Linear Model with R等著名统计学书籍。这些检验理论上都比较复杂,所以我们可能会在后面展开讨论。但是实际操作是非常简单的。至于哪一种检测方法最好?Based on a 2011 paper by Razali and Wah, Shapiro-Wilk is the best test, while Anderson-Darling performs almost the same. 其实在实际操作中都是差不多的,您挑几个看着顺眼的试一下就okay。

2. Normal QQ

diagnostics2

Normal QQ-plot用来检测其残差是否是正态分布的。左边是一个残差基本正态分布的图。右边则是一个用Normal QQ-plot进行分析显示出问题的图。1和2其实用来干的事情是差不多的。

注意一条:R语言可以显示出偏差比较大的数据组。比如左边图中的38,98,36等等。这些点从改进模型的角度可以把它删除。但是有时候这些不正常的点或许暗含着一些特殊的规律。机器学习专家应该在这里和领域专家进行沟通。或者从业务的角度上来说,机器学习专家或者统计学家应该立即对出现偏差的点进行汇报。看是这些点本身有误差,还是暗含着不一样的物理或者统计规律。

3. Scale-Location

这个图是用来检查等方差假设的。在一开始我们的五大假设第二条便是,我们假设预测的模型里方差是一个定值。如果方差不是一个定值那么这个模型的可靠性也是大打折扣的。

diagnostics3

左边的图是一个方差基本确定的情况。这种情况就是可以通过测试的。方差基本是一个常数。但是右边就不对了。大家发现方差是在不断增长的。如果出现这种情况,那么就需要进一步对模型进行分析。

在实际操作中,还会出现类似“微笑曲线”或者“倒微笑曲线”的情况。也是无法通过方差恒定测试的。如果您在这个地方依然还不相信其结果,那么可以使用Berush-Pegan test进行分析。

4. Residuals vs Leverage

Leverage就是杠杆的意思。这种图的意义在于检查数据分析项目中是否有特别极端的点。

diagnostics5

在这里我们引入了一个非常重要的指标:Cook距离。我们在线性模型里用Cook距离分析一个点是否非常“influential。”一般来说距离大于0.5的点就需要引起注意了。在这里我们借用了物理学电磁场理论中的等电势理念。那个1,和0.5分别就是Cook距离为1和0.5的等高线。

需注意,即使R将这些特殊的点标记了出来,也不等于他们一定需要被删除。还是要参考Cook距离的绝对大小。

线性回归的模型诊断的确是一个难点。大家也可以参考Julian Farway等一批国内外的优秀著作进行学习。

 

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

(R,线性回归)R语言里的模型诊断图(Residuals vs Fitted,Normal QQ , Scale-Location ,Residuals Leverage) 的相关文章

  • C++析构函数调用异常问题研究

    最近又遇到一个奇葩问题 程序在自己的开发机器和某些机器上运行完好 但是在测试人员的几台机器上运行就直接推出了 开始以为是出现了野指针 因为delete野指针时程序会直接退出 代码翻来覆去过来即便确认没有野指针后问题就陷入了死循环 经过多次调
  • mysql超时连接问题

    一 问题 nested exception is com mysql jdbc exceptions jdbc4 CommunicationsException Communications link failure The last pa
  • 28岁,从字节退休了···

    大厂一直是每个程序员都向往职业目标 大厂意味着薪资高 福利好 倍有面儿 而且发展空间也大 甚至有人调侃不想进大厂的程序员不是好程序员 而在网上 也有各个网友分享自己在大厂的经历 在某平台还有一个近2600万浏览的话题 在字节跳动工作是怎么样
  • jvm堆大小的设置

    问题引入 Xmx10240m Xms10240m Xmn5120m XXSurvivorRatio 3 其最小内存值和Survivor区总大小分别是 10240m 2048m 解析 Xmx 最大堆大小 Xms 初始堆大小 Xmn 年轻代大小
  • es6常见的相关问题

    文章目录 ES6常见的相关问题 1 var let const之间的区别 1 var 注意点1 变量提升 注意点2 块级作用域 注意点3 重复声明 2 let ES6 注意点1 变量提升 不存在 注意点2 块级作用域 注意点3 重复声明 注
  • ICCV2019 oral papers

    ICCV2019 oral papers Exploring Randomly Wired Neural Networks for Image Recognition Paper Video Progressive Differentiab
  • 10个良心网站推荐

    对效率工具感兴趣的可以看一看我的往期视频 10个良心网站推荐第三期 10个良心网站推荐 10个良心网站推荐第二期 av76255938 13个逆天网站工具 av70359966 10个改变生活的网站 10个改变生活的网站 本期推荐 1 Vi
  • ctf从零开始学0x02 ctf的逆向reverse 常见思路和如何入门(文末)

    逆向是啥 很多人一开始都感到很糊涂 下面给出相关的概念 对于相关如何打逆向的基础可以看 https blog csdn net qq 43504939 article details 90246409 其中 80 的题目都与crypto结合
  • 005-1基于深度优先搜索查找图中连通路径

    基于图的深度优先搜索 图学习笔记索引 本文参考 算法 第4版 基于图的深度优先搜索 1 自定义输入流In 2 定义背包类Bag 3 无向图G的构造 4 深度优先搜索DepthFirstSearch 5 使用深度优先搜索查找连通路径Depth
  • Win7 X86上搭建Android开发环境

    Android SDK有Mac Linux和Windows三个平台的版本 处于个人习惯 决定在Win7 X86的电脑上搭建Android开发环境 windows平台搭建Android开发环境 需要以下相关安装包 1 JDK6 需下载并安装
  • Apollo 应用与源码分析:CyberRT-protobuf

    目录 概念 特点 优点 缺点 文件的创建 1 字段规则 2 数据类型 3 字段名称 4 字段编号 文件的编译 protobuf 编译命令编译 protobuf cmake 方式编译 使用bazel 编译 在protobuf 文件夹下创建bu
  • python实现超市商品销售管理系统

    class Goods object def init self id name price self id id self name name self price price def str self info 编号 s t商品名称 s
  • 使用VirtualBox安装Ubuntu虚拟机 - 完整教程

    前言 本教程将演示通过 VirtualBox 安装 Ubuntu 请提前下载好以下文件哦 VirtualBox 软件 Ubuntu 的 镜像文件 iso 下载地址 VirtualBox 版本 VirtualBox 7 0 2 官网链接 ht
  • eclipse常用快捷键

    Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合 通过这些组合可以更加容易的浏览源代码 使得整体的开发效率和质量得到提升 1 ctrl shift r 打开资源 这可能是
  • 如何安装iGG

    优点 1 安装 iGG 不能访问视频网站 但可以支持GG学术 GG搜索进行学术研究 2 作为GG扩展程序客户端只用登陆一次 非常便捷 3 性价比高 充值会员手机端也可以安装使用 步骤
  • 学习大数据所需的关键知识

    在人工智能领域 学习大数据技术是一项重要的任务 随着数据的快速增长和各行各业对数据的需求不断增加 掌握大数据技术可以帮助我们有效地处理 存储和分析海量数据 本文将介绍学习大数据所需的关键知识 并提供相应的源代码示例 数据存储和处理 在学习大
  • 【背包问题】之01背包和完全背包

    文章目录 1 01 背包 1 1 题目描述 1 2 基本思路 1 3 空间上的优化 1 4 算法实现 1 5 递归版本 1 6 按照递归修改的动态规划版本 1 7 总结 2 完全背包 2 1 题目描述 2 2 基本思路 2 3 优化一下 2
  • C语言:冒泡排序法:将若干字符串按字母顺序(由小到大)排序输出

    include
  • 大二上详细计划(量化到周)

    目录 前言 统筹安排 每周量化 每周进度 总体 花絮 前言 1 思来想去 决定对大二上的四个月进行一个安排 量化每周任务 具体到一本书看多少页 一套视频学多少 每个节点任务完成度 2 我们都是思想上的巨人 行动上的矮子 各种各样的欲望会阻碍
  • SpringCloud:Gateway之StripPrefix使用

    StripPrefix 过滤配置 很多时候也会有这么一种请求 用户请求路径是 api goods 而真实路径是 goods 这时候我们需要去掉 api才是真实路径 此时可以使用StripPrefix功能来实现路径的过滤操作 如下配置 ser

随机推荐

  • c语言时间序列预测,2.5.2 扩展案例:预测离散值时间序列

    2 5 2 扩展案例 预测离散值时间序列 假设我们观察到取值为0或1的数据 每个时刻一个值 为了了解具体应用 假设这是每天的天气数据 1代表有雨 0代表没有雨 假设已经知道最近几天是否下雨 我们希望预测明天是否会下雨 具体而言 对于某个k值
  • C++指针

    指针是一个存放内存地址的变量 通过指针 可以间接操作其它变量 指针的常用操作 int a 0 定义一个变量 int p a 定义一个指针 并指向a p 1 通过指针间接操作a 此时a 1 注意 p的类型是int 访问区域为4字节 Ps in
  • Revit二次开发--过滤对象(Revit 2014)

    1 获取元素的ID 通过UIDocument的Selection属性获取当前视图中选中的元素的ID 类型 using System using System Collections Generic using System Linq usi
  • QT - QML 遇到 module “QtQuick.Controls“ version 2.5 is not installed 的相关问题的解决策略

    问题由来 在跟着视频敲代码时 需要用到 DelayButton 这个控件 因此需要导入相关的库模块 跟着视频敲的是import QtQuick Controls 2 5 但可能由于版本较低的原因没有安装这个库模块 根据输入提示 有个 imp
  • STM32F407的CAN通信实验CAN1CAN2的设置

    CAN2的初始化参照上一篇博文就OK了 需要修改的地方 配置过滤器 CAN FilterInitStructure CAN FilterNumber 14 那为什么要修改额 查datasheet 双 CAN CAN1 主 bxCAN 用于管
  • Flex应用程序启动详解

    编写一个简单的Flex应用程序并不复杂 就算你从来没接触过Flex程序设计 照着帮助的实例步骤 不需花多长时间也能做出一个漂亮简捷的小程序出来 不过 随着对Flex程序编写的深入 会越来越觉得 其实要编写一个好的Flex应用程序并不简单 涉
  • uniapp切片-可视化设计工具(一套代码编译到7个平台iOS、Android、H5、小程序)

    uni app 是一个使用 Vue js 开发跨平台应用的前端框架 开发者编写一套代码 可编译到iOS Android H5 小程序等多个平台 一套代码编到7个平台 难以置信吗 依次扫描7个二维码 亲自体验最全面的跨平台效果 uni app
  • C++之sort()函数详解,刷题必备~

    顾名思义 sort就是用来排序的函数 它根据具体情形使用不同的排序方法 效率较高 一般来说 不推荐使用C语言中的qsort函数 原因是qsort用起来比较烦琐 涉及很多指针的操作 而且sort在实现中规避了经典快速排序中可能出现的会导致实际
  • C# 中的sealed修饰符学习

    转载原地址 http developer 51cto com art 200908 147327 htm C 语言还是比较常见的东西 这里我们主要介绍C sealed修饰符 包括介绍两个修饰符在含义上互相排斥用于方法和属性等方面 C sea
  • python爬虫网络出错怎么办_Python爬虫异常处理

    100 继续 客户端应当继续发送请求 客户端应当继续发送请求的剩余部分 或者如果请求已经完成 忽略这个响应 101 转换协议 在发送完这个响应最后的空行后 服务器将会切换到在Upgrade 消息头中定义的那些协议 只有在切换新的协议更有好处
  • linux上redis常用命令以及遇到的问题

    1 在linux上解压缩后使用make命令进行编译的时候 错误类型 zmalloc h 50 31 致命错误 jemalloc jemalloc h 没有那个文件或目录 原因是因为编译的时候Linux默认内存分配器是jemalloc 而Re
  • 添加商品到购物车 Vuex

    商品详情 购物车页面 code
  • OFDM插入导频过程详解

    ofdm符号的长度 有效数据 cp的长度 cp就是将有效数据的后半部分1 4截取并添加到有效数据的开始部分 比如一个ofdm符号的长度为4us 那么有效数据的长度为3 2us cp的长度为0 8us 子载波的间隔 1 有效数据的长度 就是有
  • Unity使用c#开发遇上的问题(十三)(unity平台下使用 Vuforia 以及 ARFoundiation 的总结,根据个人观点)

    文章目录 前言 一 Vuforia的使用感觉 二 ARfoundiation的使用感觉 总结 前言 有一段时间没有更新系列的内容 上次更新完又重新思考了一下以后进行的方向 这里就目前接触的Vuforia 和 unity 自带的AR 之前叫A
  • 自动生成根据mysql表创建hive表脚本

    bin bash source etc profile 该脚本为手动传参根据MySQL表信息创建hive表 输入参数判断逻辑 必须数据两个参数 一个是MySQL库名 第二个是表名 if eq 2 then db name 1 mysql 库
  • 浅析java垃圾回收机制

    一 什么是垃圾回收 1 垃圾回收 顾名思义 便是将已经分配出去的 但却不再使用的内存回收回来 以便能够再次分配 在 Java 虚拟机的语境下 垃圾指的是死亡的对象所占据的堆空间 垃圾回收只会负责释放那些对象占有的内存 此时对象也就被销毁 2
  • 0长度数组的使用,重点掌握的知识

    0长度的数组在ISO C和C 的规格说明书中是不允许的 但是GCC的C99支持的这种用法 GCC对0长度数组的文档参考 Arrays of Length Zero 如下代码片段 哪个更简洁更灵活 看一眼就知道了 include
  • 用vscode开发autojs,输出窗口不显示任何输出结果

    我的情况是 我vscode开发autojs 程序 之前在一切正常的情况下 输出窗口可以正常显示程序运行结果 右侧红圈里可以选择我连接的手机型号 如下图 但是现在出现问题 就是输出窗口不显示任何结果 在右侧的选项卡里也找不到我的手机型号 之前
  • 2021年全球与中国龙胆苦苷行业市场规模及发展前景分析

    2021年全球与中国龙胆苦苷行业市场规模及发展前景分析 本报告研究全球与中国市场龙胆苦苷的发展现状及未来发展趋势 分别从生产和消费的角度分析龙胆苦苷的主要生产地区 主要消费地区以及主要的生产商 重点分析全球与中国市场的主要厂商产品特点 产品
  • (R,线性回归)R语言里的模型诊断图(Residuals vs Fitted,Normal QQ , Scale-Location ,Residuals Leverage)

    线性回归 是概率统计学里最重要的统计方法 也是机器学习中一类非常重要的算法 线性模型简单理解非常容易 但是内涵是非常深奥的 尤其是线性回归模型中的Diagnostics plot的阅读与理解一直被认为是线性回归中的一个难点 在任何线性模型中