如何判断我们的线性回归模型是正确的?

1、回归诊断的基本方法
opar<-par(no.readOnly=TRUE)

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

为理解这些图形,我们来回顾一下OLS回归的统计假设。
(1)正态性(主要使用QQ图) 当预测变量值固定时,因变量成正态分布,则残差值也应该是一个均值为0的正态分布。正态Q-Q图(Normal Q-Q,右上)是在正态分布对应的值下,标准化残差的概率图。若满足正态假设,那么图上的点应该落在呈45度角的直线上;若不是如此,那么就违反了正态性的假设。
(2)独立性 你无法从这些图中分辨出因变量值是否相互独立,只能从收集的数据中来验证。上面的例子中,没有任何先验的理由去相信一位女性的体重会影响另外一位女性的体重。假若你发现数据是从一个家庭抽样得来的,那么可能必须要调整模型独立性的假设。
(3)线性(使用左上角的图,该曲线尽量拟合所有点) 若因变量与自变量线性相关,那么残差值与预测(拟合)值就没有任何系统关联。换句话说,除了白噪声,模型应该包含数据中所有的系统方差。在“残差图与拟合图”Residuals vs Fitted,左上)中可以清楚的看到一个曲线关系,这暗示着你可能需要对回归模型加上一个二次项。
(4)同方差性(左下角,点随机分布在曲线的周围) 若满足不变方差假设,那么在位置尺度图(Scale-Location Graph,左下)中,水平线周围的点应该随机分布。该图似乎满足此假设。最后一幅“残差与杠图”(Residuals vs Leverage,右下)提供了你可能关注的单个观测点的信息。从图形可以鉴别出离群点、高杠杆值点和强影响点

通过看图重新修改模型

newfit <- lm(weight ~ height + I(height^2), data = women[-c(13, 15),])
par(mfrow = c(2, 2))
plot(newfit)
par(opar)

2、使用改进的方法进行

主要使用的car包,进行回归诊断

(1)自变量的正态分布

qqPlot()函数提供了更为精确的正态假设检验方法

library(car)

fit <- lm(Murder ~ Population + Illiteracy + Income + 

Frost, data = states)
qqPlot(fit, labels = FALSE, simulate = TRUE, main = "Q-Q Plot")

(2)误差的独立性

durbinWatsonTest(fit)

lag Autocorrelation D-W Statistic p-value
   1      -0.2006929      2.317691   0.248
 Alternative hypothesis: rho != 0

(3)线性相关性

crPlots(fit, one.page = TRUE, ask = FALSE)

(4)同方差性

1、car包提供了两个有用的函数,可以判断误差方差是否恒定。ncvTest()函数生成一个计分检验,零假设为误差方差不变,备择假设为误差方差随着拟合值水平的变化而变化。

2、spreadLevelPlot()函数创建一个添加了最佳拟合曲线的散点图,展示标准化残差绝对值与拟合值的关系

library(car)
ncvTest(fit)

Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 1.746514    Df = 1     p = 0.1863156

满足方差不变 p = 0.1863156   
spreadLevelPlot(fit)

3、线性模型假设的综合验证

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

Call:
lm(formula = Murder ~ Population + Illiteracy + Income + Frost, 
    data = states)

Residuals:
    Min      1Q  Median      3Q     Max 
-4.7960 -1.6495 -0.0811  1.4815  7.6210

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) 1.235e+00  3.866e+00   0.319   0.7510    
Population  2.237e-04  9.052e-05   2.471   0.0173 *  
Illiteracy  4.143e+00  8.744e-01   4.738 2.19e-05 ***
Income      6.442e-05  6.837e-04   0.094   0.9253    
Frost       5.813e-04  1.005e-02   0.058   0.9541    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 2.535 on 45 degrees of freedom
Multiple R-squared:  0.567,     Adjusted R-squared:  0.5285 
F-statistic: 14.73 on 4 and 45 DF,  p-value: 9.133e-08

ASSESSMENT OF THE LINEAR MODEL ASSUMPTIONS
USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
Level of Significance =  0.05

Call:
 gvlma(x = fit) 
                    Value p-value                Decision
Global Stat        2.7728  0.5965 Assumptions acceptable.
Skewness           1.5374  0.2150 Assumptions acceptable.
Kurtosis           0.6376  0.4246 Assumptions acceptable.
Link Function      0.1154  0.7341 Assumptions acceptable.
Heteroscedasticity 0.4824  0.4873 Assumptions acceptable.

4、多重共线性

如何检测多重共线性

library(car)

vif(fit)

Population Illiteracy     Income      Frost 
  1.245282   2.165848   1.345822   2.082547 
sqrt(vif(fit)) > 2

Population Illiteracy     Income      Frost 
     FALSE      FALSE      FALSE      FALSE

如何解决多重共线性?

逐步回归法(此法最常用的,也最有效)

R语言回归分析中的异常值点的介绍

(1)离群点

如何识别离群点?

1、Q-Q图,落在置信区间带[-2,2]外的点即可被认为是离群点。

2、一个粗糙的判断准则:标准化残差值大于2或者小于2的点可能是离群

3、library(car)
   outlierTest(fit)  显示离群点

       rstudent unadjusted p-value Bonferonni p
Nevada 3.542929         0.00095088     0.047544

(2)高杠杆值点

它们是由许多异常的预测变量值组合起来的,与响应变量值没有关系

高杠杆值的观测点可通过帽子统计量(hat statistic)判断

hat.plot <- function(fit){
    p <- length(coefficients(fit))
    n <- length(fitted(fit))
    plot(hatvalues(fit), main = "Index Plot of Hat Values")
    abline(h = c(2, 3) * p/n, col = "red", lty = 2)
    identify(1:n, hatvalues(fit), names(hatvalues(fit)))
}
hat.plot(fit)

(3)强影响点

强影响点,即对模型参数估计值影响有些比例失衡的点。例如,若移除模型的一个观测点时模型会发生巨大的改变,那么你就需要检测一下数据中是否存在强影响点了

cutoff <- 4/(nrow(states) - length(fit$coefficients) - 2)
plot(fit, which = 4, cook.levels = cutoff)
abline(h = cutoff, lty = 2, col = "red")

4、如何对线性模型进行改进?

1、删除观测点;

删除离群点通常可以提高数据集对于正态假设的拟合度,而强影响点会干扰结果,通常也会被删除。删除最大的离群点或者强影响点后,模型需要重新拟合
2、变量变换:


Box-Cox正态变换

library(car)
summary(powerTransform(states$Murder))

library(car)
boxTidwell(Murder ~ Population + Illiteracy, data = states)
3、添加或删除变量;
4、
使用其他回归方法。

转载于:http://blog.csdn.net/u011955252

R语言中的回归诊断-- car包相关推荐

  1. r语言中判断属于回纹元素_R语言中的回归诊断-- car包

    如何判断我们的线性回归模型是正确的? 1.回归诊断的基本方法 opar fit par(mfrow = c(2, 2)) plot(fit) par(opar) 为理解这些图形,我们来回顾一下OLS回 ...

  2. R 语言中的高级图像处理包

    最新的 magick 包是为能够在 R 中更现代化.简单化高质量图像处理而进行的一次努力.该包封装了目前最强大的开源图片处理库 ImageMagick STL . ImageMagick 库具有大量功 ...

  3. 色彩 | R 语言中的渐变色: viridis 包(色盲友好的颜色包)

    viridis [ˈvɪrɪˌdɪs] n.翠绿色; 该包提供了一系列 色盲友好的颜色. Robust to colorblindness, so that the above properties ...

  4. r语言中检测异常值_R中的异常值检测

    r语言中检测异常值 介绍 (Introduction) An outlier is a value or an observation that is distant from other obser ...

  5. R语言中如何计算C-Statistics?几种计算方法详解

    R语言中如何计算C-Statistics?几种计算方法详解 目录 R语言中如何计算C-Statistics? #包导入 #数据加载编码

  6. R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片

    R语言ggplot2可视化使用ggplot2包patchwork包在可视化结果(右上角)中插入logo图片 目录

  7. R语言中的数据处理包dplyr、tidyr笔记

    R语言中的数据处理包dplyr.tidyr笔记 dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其 ...

  8. R语言中最强的神经网络包RSNNS

    转载自:http://www.dataguru.cn/article-1470-1.html R语言中已经有许多用于神经网络的package.例如nnet.AMORE以及neuralnet,nnet提 ...

  9. R语言中的管道操作——magrittr包

    R语言中的管道操作--magrittr包 一.项目环境 开发工具:RStudio R:3.5.2 相关包:magritter 二.数据准备以及问题阐述 这次要解决的问题是如何使用提取数据框中所有包含缺 ...

最新文章

  1. 面试官:如果要存ip地址,用什么数据类型比较好
  2. css 图片居中放大,不同比例图片居中缩放显示的三种方法
  3. 51nod1092(lcs简单运用/dp)
  4. Python 框架篇
  5. java 获取当月第一天和最后一天 获取前一个月第一天和最后一天
  6. 什么?使用cmd登陆mysql的命令忘了?我辞职学习去了。。。
  7. 201403-5 任务调度
  8. linux不支持32,Visual Studio Code 1.36发布,不再支持Linux 32位
  9. IntelliJ 创建main函数、for循环、输出语句快捷键
  10. 自用_C/C++报错记录汇总
  11. 电子签章(Electronic Signature)在C#中的实现方法
  12. 钓鱼网站制作Kali
  13. gc方法写法_Unity3D研究院之字符串拼接0GC(一百零四)
  14. Android WIFI列表搜索及无线热点的开启和关闭
  15. 53Java模拟器,515最好的java模拟器
  16. 云计算技术与应用 - 大数据与云计算
  17. gcc4.7.4降级编译
  18. continue语句只用于循环语句中_Python尚学堂高淇|P60P63break语句,else语句使用,循环代码的优化...
  19. 面向对象设计原则_面向对象的设计原则
  20. Vue 3.0终于来了!官方凌晨开源代码,导读一波

热门文章

  1. 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。【LeetCode Hot 100】
  2. 三星资产管理 (香港)推出元宇宙ETF 专注投资未来的风口赛道
  3. python 使用scipy中的curve_fit拟合自定义曲线
  4. 【渝粤题库】陕西师范大学292061 会计学基础 作业 (高起专)
  5. [HNUOJ10029] 幻方矩阵(奇数阶幻方的两种解法)
  6. 卷皮九块邮官方邀请码8imrdm 注册即为VIP
  7. android 仿多米音乐点击弹出歌词界面(部分)
  8. Vue + Java 实现QQ第三方登录授权
  9. 钉钉 ISV 接入流程
  10. unity3d:Astar寻路,A星,A*,二叉堆优化Open表