在季节周期分析中处理NA

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在季节周期分析中处理NA相关的知识,希望对你有一定的参考价值。

我有一个包含大量缺失数据点的月度数据的时间序列,设置为NA。我想简单地从数据中减去年度周期,忽略丢失的条目。似乎分解函数无法处理丢失的数据点,但我在其他地方看到过建议使用季节性包。但是我也遇到了NA的问题。

以下是使用内置数据集的问题的最小可重现示例...

library(seasonal)

# set range to missing NA in Co2 dataset
c2<-co2
c2[c2>330 & c2<350]=NA
seas(c2,na.action=na.omit)

Error in na.omit.ts(x) : time series contains internal NAs

是的我知道!这就是为什么我要你省略它们!我们试试这个:

seas(c2,na.action=na.x13)

Error: X-13 run failed

Errors:
- Adding MV1981.Apr exceeds the number of regression effects
  allowed in the model (80).

嗯,有趣,不知道这意味着什么,好吧,请排除NA:

seas(c2,na.action=na.exclude)

Error in na.omit.ts(x) : time series contains internal NAs

这没多大帮助!并且好的措施

decompose(c2)

Error in na.omit.ts(x) : time series contains internal NAs

我在以下内容:

R version 3.4.4 (2018-03-15) -- "Someone to Lean On"
Copyright (C) 2018 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)

为什么要遗漏NA这样的问题?我显然是完全愚蠢的,但我看不出我在海洋功能方面做错了什么。很高兴考虑使用xts的替代解决方案。

答案

我的第一个解决方案,只需手动计算季节周期,转换为数据帧以减去矢量然后转换回来。

# seasonal cycle
scycle=tapply(c2,cycle(c2),mean,na.rm=T) 
# converting to df
df=tapply(c2, list(year=floor(time(c2)), month = cycle(c2)), c)
# subtract seasonal cycle
for (i in 1:nrow(df)){df[i,]=df[i,]-scycle}
# convert back to timeseries
anomco2=ts(c(t(df)),start=start(c2),freq=12)

不是很漂亮,也不是很有效率。

错误的评论引导我到另一个Seasonal decompose of monthly data including NA in r,我错过了一个近乎重复的问题,这建议包动物园,这似乎非常适合添加剂系列

library(zoo)
c2=co2
c2[c2>330&c2<350]=NA
d=decompose(na.StructTS(c2)) 
plot(co2)
lines(d$x,col="red")

表明该系列在失踪期间得到了很好的重建。

black lines shows Co2 series with missing chunk and the red line is the reconstructed series

解构结构的输出具有趋势和季节周期。我希望我可以将我的赏金转移到用户https://stackoverflow.com/users/516548/g-grothendieck这个有用的回复。感谢用户的错误。

但是,如果缺失部分位于系列的末尾,则软件必须推断趋势并且存在更多困难。原始系列(黑色)保持趋势,而重建系列(红色)的趋势较小:

c2=co2
c2[c2>350]=NA
d=decompose(na.StructTS(c2)) 
plot(co2)
lines(d$x,col="red")

extrapolation of data using zoo

最后,如果缺少部分是在系列的开头,软件无法及时推断并抛出错误...我觉得另一个问题即将来临......

c2=co2
c2[c2<330]=NA
d=decompose(na.StructTS(c2)) 

Error in StructTS(y) :  
the first value of the time series must not be missing

以上是关于在季节周期分析中处理NA的主要内容,如果未能解决你的问题,请参考以下文章

时间序列分析(十四):季节时间序列模型 - 季节性诊断

【时间序列分析】为啥要做季节调整?对数处理?差分?(理论篇)

时间序列分析 - 基础知识与分析场景(Time series analysis)

时间序列分析(十三):季节时间序列模型 - 确定性季节因素和随机季节模型

谱分析中窗的选取

Python中的多季节性时间序列分析