R tsibble执行STL分解提示存在缺失值但日期列无缺失问题
问题根因
报错提示的「缺失值」不是指日期序列存在缺失,而是你要分解的目标列Cost.per.Complete.Payment存在空值:从你给出的数据集结构可以看到,第42行的Cost.per.Complete.Payment取值为NA,STL分解原生不支持输入序列包含缺失值,因此触发报错。
解决方案
方案1:缺失值插值填充后再分解
可以用插值工具补全缺失值,适合对数据连续性要求高的场景:
library(imputeTS) # 线性插值补全缺失值 data_filled <- data_frame %>% mutate(Cost.per.Complete.Payment = na_interpolation(Cost.per.Complete.Payment)) # 再运行STL分解 data_filled %>% model( STL(Cost.per.Complete.Payment ~ trend(window = 7) + season(window = 'periodic'), robust = TRUE)) %>% components() %>% autoplot()
方案2:剔除包含缺失值的观测后再分解
如果缺失值占比极低(当前77条仅1条缺失),也可以直接删除缺失行,注意要保证剩余日期序列仍然连续:
data_dropna <- data_frame %>% filter(!is.na(Cost.per.Complete.Payment)) # 校验剩余序列是否连续,返回FALSE则代表无日期断层,可以继续分解 has_gaps(data_dropna) # 运行STL分解 data_dropna %>% model( STL(Cost.per.Complete.Payment ~ trend(window = 7) + season(window = 'periodic'), robust = TRUE)) %>% components() %>% autoplot()
方案3:直接调用支持缺失值的STL参数
如果不想修改原始数据,可以直接传入na.action参数适配缺失值:
data_frame %>% model( STL(Cost.per.Complete.Payment ~ trend(window = 7) + season(window = 'periodic'), robust = TRUE, na.action = na.omit)) %>% # 自动跳过缺失值完成分解 components() %>% autoplot()
内容的提问来源于stack exchange,提问作者hachiko
相关产品推荐
相关产品推荐

