R 在滑动/平铺窗口上应用时间序列分解(和异常检测)
发布的异常检测方法和现在被放弃的异常检测方法已在和中分别分叉和维护。两者都实现了“整洁”的功能 工作静态版本 这些工作正如预期的那样 我想在平铺窗口上对我的数据集应用twitter异常检测过程,它的结构类似于R 在滑动/平铺窗口上应用时间序列分解(和异常检测),r,time-series,tidyverse,purrr,anomaly-detection,R,Time Series,Tidyverse,Purrr,Anomaly Detection,发布的异常检测方法和现在被放弃的异常检测方法已在和中分别分叉和维护。两者都实现了“整洁”的功能 工作静态版本 这些工作正如预期的那样 我想在平铺窗口上对我的数据集应用twitter异常检测过程,它的结构类似于anomalize::tidyverse\u cran\u下载的数据集。由100多个观察值组成的规则集,按分类定义分组 tsibble软件包(它取代了旧的tibbletime)有一种方法,可以通过使用类似于purr的语法来应用函数。这可能包括按照purr在另一个类似数据帧的对象内返回完整的类
anomalize::tidyverse\u cran\u下载的数据集。由100多个观察值组成的规则集,按分类定义分组
tsibble
软件包(它取代了旧的tibbletime
)有一种方法,可以通过使用类似于purr
的语法来应用函数。这可能包括按照purr
在另一个类似数据帧的对象内返回完整的类似数据帧的对象。(真是一句话!)
我经历了许多困难,但运气不太好
尝试1幻灯片2
:
anomalize::decompose_twitter
函数有两个参数,data
和target
tidyverse_cran_downloads %>%
mutate(
Monthly_MA = slide2_dfr(
.x = .,
.y = count,
~ anomalize::decompose_twitter,
.size = 5
)
)
错误:元素1的长度为3,而不是1或425。调用
rlang::last_error()查看回溯
也许我误解了.x.y
语法的工作原理
尝试2:pmap
在.f(.x[[i]],…)中出错:数据必须是单个数据帧。
那么函数至少被调用了,但它被多个数据帧调用了
我想:
- 通过twitter算法应用分解过程,然后对剩余部分进行异常检测
- 使用两个异常检测包中的一个来执行此操作,或者混合使用这两个包
- 将其应用于时间窗口
- 过分组分类数据
我的数据集的唯一不同之处在于,我在多个月的时间内每半小时观察一次值,实际上我只需要每天重新计算异常值(即每48次观察一次),其中窗口回顾前30天来分解和检测异常值
(注意,我会标记tsibble
和anomalize
,但我没有代表来做这些标记)方法2应该按预期工作吗?错误消息与需要至少两个季节性周期才能估计的stl()
相关。例如,每日数据需要至少14次观察才能运行stl()。增加窗口大小.size=7*3
可以正常工作
my_decomp%
tidyr::nest()%>%
变异(diag=purr::map(数据,~tsible::pslide\u-dfr(,my\u-decomp,.size=7*3)))
#>#tibble:15 x 3
#>包数据诊断
#>
#>三年一次
#>2润滑
#>3 dplyr
#>4扫帚
#>5整洁的数量
#>6 tidytext
#>7图2
#>8咕噜声
#>9胶水
#>10弦
#>11猫
#>12刀
#>13读取器
#>14可折叠
#>15条三角帆
确实如此。在某个时候,我显然误解了/忘记了.size
参数在做什么(事实上,这是非常清楚的文档,我肯定读过!)。谢谢你为这个包裹所做的工作。真的很有用。
tidyverse_cran_downloads %>%
mutate(
Monthly_MA = slide2_dfr(
.x = .,
.y = count,
~ anomalize::decompose_twitter,
.size = 5
)
)
my_diag <- function(...) {
data <- tibble(...)
fit <- anomalize::decompose_twitter(data = data, target = count)
}
tidyverse_cran_downloads %>%
nest(-package) %>%
filter(package %in% c("tidyr", "lubridate")) %>% # just to make it quick
mutate(diag = purrr::map(data, ~ pslide_dfr(., my_diag, .size = 7)))
tidyverse_cran_downloads %>%
nest(-package, .key = "my_data") %>%
mutate(
Daily_MA = slide_dfr(
.f = AnomalyDetection::ad_ts,
.x = my_data
)
)