用R插入缺失的季度

时间:2015-03-17 18:55:48

标签: r time-series interpolation

我有一个从2005年到2011年的季度时间序列。我有一些错过的宿舍。所以我想插入渐进式系列。 我的系列:

time<-c(14881.3,
14989.6,
15021.1,
15190.3,
15275,
15336.7,
15431.3,
15433.7,
15538.4,
15606.6,
15779.9,
15916.2,
15831.7,
16010.4,
16205.6,
16340.02,
16447.40142,
16581.81725,
16675.90362,
16799.3577,
NA,
NA,
NA,
17128.74,
NA,
NA,
NA,
17586.85)

library(tempdisagg)
time.A <- ts(time, frequency = 4, start = 2005)
time.A 
         Qtr1     Qtr2     Qtr3     Qtr4
2005 14881.30 14989.60 15021.10 15190.30
2006 15275.00 15336.70 15431.30 15433.70
2007 15538.40 15606.60 15779.90 15916.20
2008 15831.70 16010.40 16205.60 16340.02
2009 16447.40 16581.82 16675.90 16799.36
2010       NA       NA       NA 17128.74
2011       NA       NA       NA 17586.85

我尝试使用td函数:

mdl <- td(time.A ~ 0,conversion="last",method="denton-cholette")

但是因为NAs我得到了错误。有na.rm=T这样的函数吗? 无论如何,我可以使用该系列的年度版本来解决问题。

time.B<-window(time.A , start=c(2005,4), frequency =1)
time.B<-ts(time.B,frequency = 1, start = 2005)
mdl <- td(time.B ~ 0,conversion="last",method="denton-cholette")
predict(mdl)

         Qtr1     Qtr2     Qtr3     Qtr4
2005 15190.30 15190.30 15190.30 15190.30
2006 15251.15 15312.00 15372.85 15433.70
2007 15554.32 15674.95 15795.57 15916.20
2008 16022.15 16128.11 16234.06 16340.02
2009 16454.85 16569.69 16684.52 16799.36
2010 16881.70 16964.05 17046.39 17128.74
2011 17243.27 17357.79 17472.32 17586.85

所以我用预测的季度替换了我错过的宿舍。 但我认为我也应该使用有关其他季度的信息,而不仅仅是年度系列。

1 个答案:

答案 0 :(得分:3)

您可以通过以下方式轻松插入系列:

zoo::na.approx(time.A)
         Qtr1     Qtr2     Qtr3     Qtr4
2005 14881.30 14989.60 15021.10 15190.30
2006 15275.00 15336.70 15431.30 15433.70
2007 15538.40 15606.60 15779.90 15916.20
2008 15831.70 16010.40 16205.60 16340.02
2009 16447.40 16581.82 16675.90 16799.36
2010 16881.70 16964.05 17046.39 17128.74
2011 17243.27 17357.79 17472.32 17586.85