You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过R识别残差QQ图中偏离理论直线的数据点?

当然可以!在R里有好几种实用方法能帮你定位QQ图中偏离理论直线的数据点,下面我会一步步演示两种常用方式——手动计算偏差和用现成工具包自动标记。

方法一:手动计算残差与QQ线的偏差

如果你想自己掌控整个识别过程,可以通过计算每个数据点到QQ理论直线的垂直距离来找出偏离最大的点。这里用线性回归模型的残差做示例:

# 1. 先拟合一个示例模型(替换成你的实际模型)
model <- lm(mpg ~ wt + hp, data = mtcars)
residuals <- residuals(model)

# 2. 获取QQ图的基础数据(不直接绘图)
qq_data <- qqnorm(residuals, plot.it = FALSE)

# 3. 计算QQ理论直线的参数并拟合模型
qq_line_coords <- qqline(residuals, plot.it = FALSE)
line_model <- lm(y ~ x, data = data.frame(x = qq_line_coords$x, y = qq_line_coords$y))

# 4. 计算每个残差点到QQ线的垂直偏差
predicted_qq <- predict(line_model, newdata = data.frame(x = qq_data$x))
deviations <- abs(qq_data$y - predicted_qq)

# 5. 找出偏差最大的前N个点(比如前5个)
top_outliers <- order(deviations, decreasing = TRUE)[1:5]

# 6. 查看这些点对应的原始数据
print("偏离最大的5个数据点:")
print(mtcars[top_outliers, ])

运行这段代码后,你就能直接看到那些偏离QQ线最明显的原始数据记录,方便后续深挖原因。

方法二:用car包快速标记异常点

如果你想要更简便的可视化+自动标记方案,car包的qqPlot()函数是绝佳选择——它会自动基于Bonferroni校正的p值识别异常点,还能直接在图上标注行名(或自定义标签):

# 先安装并加载car包(如果还没装的话)
install.packages("car")
library(car)

# 绘制QQ图并自动标记偏差最大的3个点
qqPlot(model, id.n = 3)

# 或者选择手动点击图上的点来识别(点击后按ESC退出)
qqPlot(model, id.method = "identify")

id.n参数可以指定自动标记的异常点数量,id.method = "identify"则允许你交互式地点击图上的点,直接查看对应的数据行信息,非常直观。

后续分析建议

识别出这些偏离点后,你可以从这几个方向深入:

  • 检查这些点是否存在数据录入错误(比如数值异常、单位错误);
  • 分析它们的自变量取值,判断是否是极端值(outliers);
  • 考虑模型是否适合这些点——比如是否需要添加交互项、对变量做变换,或者尝试鲁棒回归模型降低异常点的影响。

内容的提问来源于stack exchange,提问作者ybarnatan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:46:13