r - 如何使用库克距离从数据集中删除异常值?
问题描述
我们需要从模型中的数据集中删除异常值/影响点。我有400
观察和5
解释变量。
我试过这个:
Outlier <- as.numeric(names (cooksdistance)[(cooksdistance > 4 / sample_size)))
其中库克距离是模型的计算库克距离。
问题是这并没有给我实际的异常值。
解决方案
在您用于影响观察选择的公式中,条件应如下所示:如果观察的库克距离超过库克距离的 4 倍,则意味着它可以被认为是有影响的(可能是异常值)。
库克距离或库克 D 是执行最小二乘回归分析时数据点影响的常用估计值。在实际的普通最小二乘分析中,库克距离可用于多种方式:指示有影响的数据 > 特别值得检查有效性的点;或指示设计空间中能够获得更多数据点的区域。
在一般使用中,厨师距离大于平均值 4 倍的那些观察结果可能被归类为有影响的。这不是一个硬性界限。
以数据集的有影响的观察识别为例:ozone
ozone <- read.csv("http://rstatistics.net/wp-content/uploads/2015/09/ozone.csv")
m <- lm(ozone_reading ~ ., data=ozone)
cooksdistance <- cooks.distance(m)
influential <- as.numeric(names(cooksdistance)[(cooksdistance > 4 * mean(cooksdistance, na.rm = TRUE))])
ozone[influential, ]
# Month Day_of_month Day_of_week ozone_reading pressure_height Wind_speed Humidity Temperature_Sandburg Temperature_ElMonte
# 19 1 19 1 4.07 5680 5 73 52 56.48
# 23 1 23 5 4.90 5700 5 59 69 51.08
# 58 2 27 5 22.89 5740 3 47 53 58.82
# 133 5 12 3 33.04 5880 3 80 80 73.04
# 135 5 14 5 31.15 5850 4 76 78 71.24
# 149 5 28 5 4.82 5750 3 76 65 51.08
# 243 8 30 1 37.98 5950 5 62 92 82.40
# 273 9 29 3 4.60 5640 5 93 63 54.32
# 286 10 12 2 7.00 5830 8 77 71 67.10
# Inversion_base_height Pressure_gradient Inversion_temperature Visibility
# 19 393 -68 69.80 10
# 23 3044 18 52.88 150
# 58 885 -4 67.10 80
# 133 436 0 86.36 40
# 135 1181 50 79.88 17
# 149 3644 86 59.36 70
# 243 557 0 90.68 70
# 273 5000 30 52.70 70
# 286 337 -17 81.14 20
解释:
第 58、133、135 行的臭氧读数非常高。
第 23、135 和 149 行的 Inversion_base_height 非常高。
第 19 行的 Pressure_gradient 非常低。
推荐阅读
- php - 在 PHP 中验证此字符串格式“A000AA00”的最佳/最快方法是什么?
- c++ - 画一个立方体和一个金字塔
- c# - 通过实体框架检查 SQL Server 中表的内容
- compare - imagemagick - 比较两个 JPEG 与掩蔽图像
- ios - 苹果拒绝应用程序要求提供相关目的字符串 Info.plist
- ldap - WSO2 为外部 LDAP 用户显示相同的基本用户配置文件
- javascript - 从模块中的 Promise 调用返回值
- python - 使用python在sqlite3中将数据从一个表复制和重组到另一个表
- c# - iTextSharp LGPLv2.Core 无法正确应用 CSS