Lindia 包简介
Lindia 是 ggplot2 的扩展,提供更详细的线性模型诊断结果的可视化功能。Lindia 中的所有函数输入都必须为 lm 对象(包括 lm()
和 glm()
),并以 ggplot 对象的形式返回线性诊断图。
引言
这里以 Cars93 数据集为例,建立一个线性回归模型。
library(MASS) data(Cars93) cars_lm <- lm(Price ~ Passengers + Length + RPM, data = Cars93)
首先,介绍一下使用 base 包中的 plot()
函数进行回归诊断
par(mfrow = c(2,2)) plot(cars_lm)
【🌟🌟🌟】这四幅图的含义为[2]:
(1) Residuals vs Fitted:残差和拟合值。 如果红线能很好地拟合大部分散点且是近乎水平的,则说明自变量和因变量是线性相关的。若呈较明显的曲线,则应考虑可能存在非线性关系。
(2) Normal Q-Q:QQ图,用来检验正态性。 若满足正态假设,那么图上的点应该落在呈45度角的直线上;若不是如此,那么就违反了正态性的假设。
(3) Scale - Location:检验方差齐性。 若满足假设,则散点会均匀地分布在水平线上。
(4) Residuals - Leverage:判断是否有极端值。 判断依据是 cook's distance(库克距离),在红色等高线外的点可以考虑将其删除。
方法介绍
下面正式介绍今天的主角:Lindia
包,该包来源于 github ,使用其中的gg_diagnose()
函数实现诊断结果全输出:
# 安装包 devtools::install_github("yeukyul/lindia") library(lindia) #绘图 gg_diagnose(cars_lm)
【🌟结果解读】:输出结果不仅包含了
plot()
函数输出的四幅图,还多了 5 幅图。(1) Histogram of Residuals:残差直方图[3]。 使用残差的直方图可确定数据是偏斜还是包含异常值。图中可看出存在异常值,残差分布有轻微右偏。因为直方图的外观取决于用来进行数据分组的区间数,所以请勿使用直方图评估残差的正态性。
(2) Residuals vs 变量名:残差与变量[4]。 如果在残差中看到非随机图形,则表明变量会系统性地影响响应。请考虑在分析中包含该变量
(5)-(8):这四幅图参照引言中的解释。
(9) Cook's distance Plot:库克距离。 这幅图的含义和引言中提到的杠杆图类似,相比之下含义更清晰一些,红线之上的点即为异常值。
其他函数
lindia 还包含许多实用的函数,可以根据分析需要单独输出某一张诊断图。
gg_reshist()
: 残差直方图gg_resfitted()
: 残差与拟合值gg_resX()
: 残差与预测值gg_qqplot()
: QQ图gg_boxcox()
: box-cox图gg_scalelocation()
: 检验方差齐性gg_resleverage()
: Residual by leverage plotgg_cooksd()
: 库克距离图