【发布时间】:2017-11-27 06:40:56
【问题描述】:
两个数据集:一个明显有影响的观察结果,另一个没有。但是,当我找到帽子值并使用经验法则测试时,第一个并不表示撤消杠杆,而第二个表示:
df1 <- dplyr::tribble(
~input_date, ~input_reading,
as.Date('2006-02-01'), 12428,
as.Date('2006-02-17'), 12543,
as.Date('2006-02-23'), 12555,
as.Date('2006-03-14'), 12716,
as.Date('2006-06-16'), 13275
)
fit1 <- lm(input_reading ~ input_date, data=df1)
hatvalues(fit1)
1 2 3 4 5
0.3594735 0.2625274 0.2376641 0.2002821 0.9400529
注意最后的观察结果 (5)。它的帽子值为 0.94,超过帽子平均值的 2 倍或 3 倍,因此被标记为有影响力。
df2 <- dplyr::tribble(
~input_date, ~input_reading,
as.Date('2006-02-17'), 12543,
as.Date('2006-02-23'), 12555,
as.Date('2006-03-14'), 12716,
as.Date('2006-06-16'), 13275,
as.Date('2006-07-23'), 247 # Obseravation is influential
)
fit2 <- lm(input_reading ~ input_date, data=df2)
hatvalues(fit2)
1 2 3 4 5
0.3833232 0.3491395 0.2641404 0.3635198 0.6398770
现在看最后一个观察,它显然是有影响的,但它的帽子值不超过平均值的 2 倍。
背景: 数据集是随时间变化的值。每隔一段时间,这些值就会变得不稳定(异常、尖峰、重置、归零)。我的想法是使用 for 循环来计算每 5 个数据点的回归。当我遇到异常时,我可以编写一些逻辑来修复它。
【问题讨论】:
-
您的代码中有一些错误,要么是拼写错误,要么是您的错误的原因。例如。两个
lm()模型都使用data = df(不是df1或df2)。其次,您预测的是input_reading而不是input_value
标签: r outliers anomaly-detection