#r #tidyverse
#r #tidyverse
Вопрос:
Здесь mydata
zem=zem = read.table(
V1
75
74,7
74,4
74,1
73,8
75,5
73,3
73,1
72,9
73
72,8
72,3
72,1
71,9
71,7
71,6
71,3
71,4
71,3
71,2
71,1
70
69,5
69
68,5)
Я хочу обнаружить значение аномалии. Поэтому я решил использовать library(anomalize)
.
Код ниже
library(anomalize) #tidy anomaly detectiom
library(tidyverse) #tidyverse packages like dplyr, ggplot, tidyr
zem %>%
time_decompose(V1) %>%
anomalize(remainder) %>%
time_recompose() %>%
filter(anomaly == 'Yes')
я получаю сообщение об ошибке
Error: Error time_decompose(): Object is not of class tbl_df or tbl_time.
Что не так?
Как я могу получить желаемый результат?
V1 Anomaly
1 75.0 no
2 74.7 no
3 74.4 no
4 74.1 no
5 73.8 no
6 75.5 yes
7 73.3 no
8 73.1 no
9 72.9 no
10 73.0 no
11 72.8 no
12 72.3 no
13 72.1 no
14 71.9 no
15 71.7 no
16 71.6 no
17 71.3 no
18 71.4 no
19 71.3 no
20 71.2 no
21 71.1 no
22 70.0 no
23 69.5 no
24 69.0 no
25 68.5 no
я только что попытался изменить этот код для своей задачи
https://towardsdatascience.com/tidy-anomaly-detection-using-r-82a0c776d523
Ответ №1:
Для time_decompose()
функции требуются данные в виде:
Объект tibble или tbl_time
(из ?time_decompose
)
Возможно zem
, это data.frame? Вы можете включить as_tibble()
в канал, чтобы заранее убедиться, что это ошибка.
Кроме того, ожидается, что он будет работать с данными, основанными на времени:
Он предназначен для работы с данными, основанными на времени, и поэтому должен иметь столбец, содержащий информацию о дате или времени.
Я добавил к вашим тестовым данным столбец с датами. Вот рабочий пример:
library(anomalize)
library(tidyverse)
zem$date <- as.Date(Sys.Date() 1:nrow(zem))
zem %>%
as_tibble() %>%
time_decompose(V1) %>%
anomalize(remainder) %>%
time_recompose() %>%
filter(anomaly == 'Yes')
Вывод
Converting from tbl_df to tbl_time.
Auto-index message: index = date
frequency = 7 days
trend = 12.5 days
# A time tibble: 4 x 10
# Index: date
date observed season trend remainder remainder_l1 remainder_l2 anomaly recomposed_l1 recomposed_l2
<date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
1 2020-12-28 75.5 0.782 73.8 0.934 -0.555 0.624 Yes 74.0 75.2
2 2021-01-04 72.1 0.782 72.3 -0.996 -0.555 0.624 Yes 72.5 73.7
3 2021-01-10 71.3 -0.229 70.7 0.789 -0.555 0.624 Yes 70.0 71.1
4 2021-01-12 71.1 -0.220 70.1 1.24 -0.555 0.624 Yes 69.3 70.5
Вот изображение обнаруженных аномалий:
zem %>%
as_tibble() %>%
time_decompose(V1) %>%
anomalize(remainder) %>%
plot_anomaly_decomposition()
График
Данные
zem <- structure(list(V1 = c(75, 74.7, 74.4, 74.1, 73.8, 75.5, 73.3,
73.1, 72.9, 73, 72.8, 72.3, 72.1, 71.9, 71.7, 71.6, 71.3, 71.4,
71.3, 71.2, 71.1, 70, 69.5, 69, 68.5), date = structure(c(18619,
18620, 18621, 18622, 18623, 18624, 18625, 18626, 18627, 18628,
18629, 18630, 18631, 18632, 18633, 18634, 18635, 18636, 18637,
18638, 18639, 18640, 18641, 18642, 18643), class = "Date")), row.names = c(NA,
-25L), class = "data.frame")