在 R 中识别时间序列数据中的异常值
Identifying Outlier in Timeseries data in R
我有一个时间序列数据,其对应的变量在某个范围内比之前的值增加或减少,比如 +- 10%。时间序列中有一些数据点不符合时间序列中的先前或后来的值。
例如:
time v1
13:01:30 0.689
13:01:31 0.697
13:01:32 0.701
13:01:33 0.713
**13:01:34 0.235**
13:01:35 0.799
13:01:36 0.813
13:01:37 0.822
**13:01:38 0**
13:01:39 0.865
13:01:40 0.869
是否有任何库可以帮助识别 R 中的这些离群值[数据中的 0.235 和 0]?
更新 - dput
的输出:
structure(list(time = c("13:01:30", "13:01:31", "13:01:32", "13:01:33",
"13:01:34", "13:01:35", "13:01:36", "13:01:37", "13:01:38", "13:01:39",
"13:01:40"), v1 = c(0.689, 0.697, 0.701, 0.713, 0.235, 0.799,
0.813, 0.822, 0, 0.865, 0.869)), .Names = c("time", "v1"), row.names = c(NA,
11L), class = c("tbl_df", "tbl", "data.frame"))
这可能会有所帮助(作为模板)
# load packages
library(ggplot2) # 2.0.0
library(ggrepel) # 0.4
library(dplyr) # 0.4.3
# make data_frame of OP data
ts_tdf <- data_frame(
time = paste("13", "01", 30:40, sep = ":"),
v1 = c(0.689, 0.697, 0.701, 0.713, 0.235, 0.799, 0.813, 0.822, 0.00, 0.865, 0.869)
)
# calculate measure of central tendency (I like median)
v1_median <- median(ts_tdf$v1)
# create absolute deviation column, identify (n = 10) largest outliers, plot (sorted) values of new column
ts_tdf %>%
mutate(abs_med = abs(v1 - v1_median)) %>%
arrange(-abs_med) %>%
head(n = 10) %>%
mutate(char_time = as.character(time)) %>%
ggplot(data = ., aes(x = 1:nrow(.), y = abs_med, label = char_time)) +
geom_point() +
geom_text_repel()
我有一个时间序列数据,其对应的变量在某个范围内比之前的值增加或减少,比如 +- 10%。时间序列中有一些数据点不符合时间序列中的先前或后来的值。
例如:
time v1
13:01:30 0.689
13:01:31 0.697
13:01:32 0.701
13:01:33 0.713
**13:01:34 0.235**
13:01:35 0.799
13:01:36 0.813
13:01:37 0.822
**13:01:38 0**
13:01:39 0.865
13:01:40 0.869
是否有任何库可以帮助识别 R 中的这些离群值[数据中的 0.235 和 0]?
更新 - dput
的输出:
structure(list(time = c("13:01:30", "13:01:31", "13:01:32", "13:01:33",
"13:01:34", "13:01:35", "13:01:36", "13:01:37", "13:01:38", "13:01:39",
"13:01:40"), v1 = c(0.689, 0.697, 0.701, 0.713, 0.235, 0.799,
0.813, 0.822, 0, 0.865, 0.869)), .Names = c("time", "v1"), row.names = c(NA,
11L), class = c("tbl_df", "tbl", "data.frame"))
这可能会有所帮助(作为模板)
# load packages
library(ggplot2) # 2.0.0
library(ggrepel) # 0.4
library(dplyr) # 0.4.3
# make data_frame of OP data
ts_tdf <- data_frame(
time = paste("13", "01", 30:40, sep = ":"),
v1 = c(0.689, 0.697, 0.701, 0.713, 0.235, 0.799, 0.813, 0.822, 0.00, 0.865, 0.869)
)
# calculate measure of central tendency (I like median)
v1_median <- median(ts_tdf$v1)
# create absolute deviation column, identify (n = 10) largest outliers, plot (sorted) values of new column
ts_tdf %>%
mutate(abs_med = abs(v1 - v1_median)) %>%
arrange(-abs_med) %>%
head(n = 10) %>%
mutate(char_time = as.character(time)) %>%
ggplot(data = ., aes(x = 1:nrow(.), y = abs_med, label = char_time)) +
geom_point() +
geom_text_repel()