3

我正在使用Anomalize包来检测异常,但即使我已将其定义Date为索引,我也会收到上述错误:

示例代码:

x <- as.data.frame(data %>%
  group_by(date,acc_id) %>%
  summarise(count = as.numeric(n_distinct(d_id))) %>%
  ungroup())

x$acc_id <- as.character(x$acc_id)

x <- x %>% 
  tibbletime::as_tbl_time(index = date)


x %>%
  time_decompose(count, method = "twitter", trend = "2 months") %>%
  anomalize(remainder, method = "gesd") %>%
  time_recompose() %>%
  plot_anomalies(time_recomposed = TRUE)

错误 :

mutate_impl(.data, dots) 中的错误:评估错误:对于 Date 类的索引,只允许使用年、季度、月、周和日期间。

dput(head(x))

structure(list(date = structure(c(17532, 17532, 17532,  17532, 17532, 17532), class = "Date"), acc_id = c("a44444",  "gg555", "0195459b-5809-4b54-89b5-1a4376c9f126",  "ggg6546", "hhjh77",  "hhjh68777"), count = c(3, 1, 1, 1,  1, 1)), .Names = c("date", "acc_id", "count"), row.names = c(NA, 
-6L), class = c("tbl_time", "tbl_df", "tbl", "data.frame"), index_quo = ~date, index_time_zone = "UTC")

我的目标是按日期和其他一些因素进行分组,而不仅仅是日期。

4

4 回答 4

5

我遇到过同样的问题。帮助我的是正确定义您的日期格式:

library(tibbletime)
x <- as_tbl_time(x, index = date)

x %>% 
  as_period("daily")
于 2018-06-10T17:33:41.957 回答
1

此管道缺少“group_by”。这个错误也在异常包的例子中。添加后错误消失了。这有效:

x %>%
  group_by(acc_id) %>%
  time_decompose(count, method = "twitter", trend = "2 months") %>%
  anomalize(remainder, method = "gesd") %>%
  time_recompose() %>%
  plot_anomalies(time_recomposed = TRUE)
于 2020-08-10T13:38:09.567 回答
1

从帮助:

频率 控制季节性调整(去除季节性)。输入可以是“自动”、基于时间的定义(例如“2 周”)或每个频率的观察次数(例如 10)。请参阅 time_frequency()。

趋势 控制趋势分量对于stl,趋势控制lowess smoother的灵敏度,用于去除剩余部分。对于 twitter,趋势控制中位数的周期宽度,用于去除趋势并将其余部分居中。

我认为您交换了它们:

x %>%
  time_decompose(count, method = "twitter", frequency* = "2 months") %>%
  anomalize(remainder, method = "gesd") %>%
  time_recompose() %>%
  plot_anomalies(time_recomposed = TRUE)

但很难说是否还有其他问题,因为数据不够

于 2018-05-09T08:49:52.183 回答
0

我也收到了这个错误,直到我删除了重复的日期。我试图在对每个站点有多个观察的数据上运行代码。一旦我每天汇总到单个 obs,一切都很好。

于 2019-09-03T17:58:11.463 回答