回归分析是统计学中一种强大的工具,用于建立因变量与一个或多个自变量之间的关系。然而,构建回归模型并非仅仅是拟合数据那么简单,我们还需要对模型的合理性进行诊断。一个不合理的回归模型可能会导致错误的预测和解释,因此回归诊断是回归分析中不可或缺的环节。本文将详细介绍回归诊断的方法,并通过 R 语言进行演示。
回归诊断主要包括以下几个方面:
我们使用 R 语言内置的 mtcars
数据集进行演示,该数据集包含了 32 辆汽车的相关信息,我们将使用 mpg
(每加仑英里数)作为因变量,wt
(车重)和 hp
(马力)作为自变量构建多元线性回归模型。
# 加载数据集
data(mtcars)
# 构建多元线性回归模型
model <- lm(mpg ~ wt + hp, data = mtcars)
可以通过绘制散点图和残差图来检查线性关系。
# 绘制散点图
par(mfrow = c(1, 2))
plot(mtcars$wt, mtcars$mpg, main = "mpg vs wt", xlab = "Weight", ylab = "Miles per gallon")
plot(mtcars$hp, mtcars$mpg, main = "mpg vs hp", xlab = "Horsepower", ylab = "Miles per gallon")
# 绘制残差图
plot(model, which = 1)
对于时间序列数据,我们可以使用 Durbin - Watson 检验来检查观测值之间的独立性。但对于 mtcars
数据集,由于它不是时间序列数据,我们通常假设观测值是独立的。不过,为了演示,我们还是进行 Durbin - Watson 检验。
library(car)
dwtest(model)
可以通过绘制 QQ 图和进行 Shapiro - Wilk 检验来检查残差的正态性。
# 绘制 QQ 图
plot(model, which = 2)
# Shapiro - Wilk 检验
shapiro.test(residuals(model))
可以通过绘制残差与拟合值的散点图和进行 Breusch - Pagan 检验来检查方差齐性。
# 绘制残差与拟合值的散点图
plot(model, which = 3)
# Breusch - Pagan 检验
library(lmtest)
bptest(model)
可以通过绘制 Cook’s 距离图和学生化残差图来识别异常值和有影响的点。
# 绘制 Cook's 距离图
plot(cooks.distance(model), type = "h", main = "Cook's Distance", ylab = "Cook's Distance")
abline(h = 4 / length(residuals(model)), col = "red")
# 绘制学生化残差图
plot(rstudent(model), type = "h", main = "Studentized Residuals", ylab = "Studentized Residuals")
abline(h = c(-2, 2), col = "red")
散点图和残差图可以直观地展示因变量与自变量之间的线性关系。如果散点图呈现出明显的线性趋势,残差图中的点随机分布在零值附近,则说明线性关系成立。
Durbin - Watson 检验的统计量接近 2 时,说明观测值之间是独立的。
QQ 图中,若点大致分布在一条直线上,且 Shapiro - Wilk 检验的 p 值大于 0.05,则说明残差服从正态分布。
残差与拟合值的散点图中,若点随机分布,没有明显的规律,且 Breusch - Pagan 检验的 p 值大于 0.05,则说明残差的方差是恒定的。
Cook’s 距离图中,超过临界值(通常为 4 / n)的点可能是有影响的点;学生化残差图中,绝对值大于 2 的点可能是异常值。
回归诊断是回归分析中至关重要的一步,通过对线性关系、独立性、正态性、方差齐性以及异常值和有影响点的检查,可以确保回归模型的合理性。以下是回归诊断的总结表格:
诊断内容 | 检查方法 | 判断标准 |
---|---|---|
线性关系 | 散点图、残差图 | 散点图呈线性趋势,残差图随机分布 |
独立性 | Durbin - Watson 检验 | 统计量接近 2 |
正态性 | QQ 图、Shapiro - Wilk 检验 | QQ 图点在直线附近,p > 0.05 |
方差齐性 | 残差与拟合值散点图、Breusch - Pagan 检验 | 散点图随机分布,p > 0.05 |
异常值和有影响点 | Cook’s 距离图、学生化残差图 | Cook’s 距离超临界值,学生化残差绝对值 > 2 |
通过以上的回归诊断方法和 R 语言演示,我们可以有效地检查回归模型的合理性,从而提高模型的预测准确性和解释能力。
希望本文能够帮助你更好地理解回归诊断的重要性和方法,让你在实际的回归分析中能够更加得心应手。