每月数据的季节性分解,包括r中的NA

时间:2014-07-11 09:33:03

标签: r time-series na

我需要你们的帮助来分解我的季节性月度数据,但它不起作用,因为NA值没有被删除。可能还有另一个问题。请查看我的数据和错误,如下所示。

    ts.monthly<-ts(monthly$rBC.median, frequency=12, start=c(2006, 4))
    ts.monthly
        Jan        Feb        Mar        Apr        May        Jun
    2006                                   5.1656479  6.2847959 19.4833690
    2007  1.4252665  2.9127775  2.8912652  7.5326158  8.6182227 23.2129310
    2008         NA  1.8200842  1.3488755  2.0700927  5.3541366  8.6916708
    2009  1.2531161  1.5075780  2.4955524 10.6724704 10.1367162 16.0362127
    2010  0.8850190  2.4974866  1.8459976  9.2297697  3.8203789  7.1492986
    2011  2.6990434  0.4570701  1.3787403  5.8739804  4.1669501 13.2228535
    2012         NA  2.0670538  1.3758499 11.7306663  4.1248775 12.3604423
                Jul        Aug        Sep        Oct        Nov        Dec
    2006  9.8028986  7.8167810  2.1333807  2.5777504  1.9022561  2.7254065
    2007  4.2121577  8.8604768 12.0017155  4.0978332  1.6053110         NA
    2008  5.7338211  9.7432563  4.6548508  1.3589789  0.9650082  1.2788504
    2009 11.7632775 11.2299683  1.6229679  1.0333217  1.0481580  1.0734208
    2010  3.5996501  4.3245873  4.4586863  1.6403104  2.8622518  1.2564256
    2011  3.0463918  7.1515472  6.5613683  1.3715623  1.9757217  5.4901524
    2012 11.1010563  3.6220968  2.2597341  

   ts.monthly=na.omit(ts.monthly)  
    Error in na.omit.ts(ts.monthly) : time series contains internal NAs
   ts.monthly.com<-decompose(ts.monthly)
    Error in na.omit.ts(x) : time series contains internal NAs
   ts.monthly$seasonal
    Error in ts.monthly$seasonal : $ operator is invalid for atomic vectors

我不明白为什么na.omit不起作用..我怎么能对待这个NA?

最后,在使用“分解”函数之后,我想仅采用没有季节性的“趋势”,然后应用sen的斜率估计来获得线性趋势的斜率。它会起作用吗?

非常感谢你的帮助。

4 个答案:

答案 0 :(得分:8)

首先使用动物园包中的na.StructTS尝试使用季节性卡尔曼滤波器填充缺失值:

library(zoo)
decompose(na.StructTS(ts.monthly))

zoo还有许多其他na.函数:na.aggregatena.approxna.fillna.locfna.spline,{{1} },na.StructTS

答案 1 :(得分:4)

可通过R-package seasonal访问的X-13ARIMA-SEATS软件只需一步即可处理缺失值和季节性分解:

library(seasonal)

# a monthly time series with some missing values
AirPassengersNA <- AirPassengers
AirPassengersNA[c(2, 24)] <- NA

m <- seas(AirPassengersNA, na.action = na.x13)
head(m$data)

        final  seasonal seasonaladj    trend irregular adjustfac
[1,] 122.5860 0.9029705    122.5860 122.6289 0.9996500 0.9136445
[2,] 123.8615 0.9492046    123.8615 123.8656 0.9999671 0.9408045
[3,] 125.0191 1.0701984    125.0191 125.3132 0.9976535 1.0558387
[4,] 127.4633 1.0028864    127.4633 126.6222 1.0066428 1.0120561
[5,] 127.2526 0.9494692    127.2526 126.8592 1.0031006 0.9508650
[6,] 126.0700 1.0771444    126.0700 126.1723 0.9991886 1.0708339

答案 2 :(得分:1)

我也挣扎了很长时间。

只需在ts对象的zoo包中使用na.locf即可。 na.locf返回一个ts对象,因此不必担心更改的对象类型。

使用:

    library(zoo)
    season_ts <- na.locf(season_ts)

其中season_ts是你的ts对象。

答案 3 :(得分:1)

imputeTS包是一个R包,专用于替换时间序列中的缺失值。您可以在执行分解之前使用软件包的功能。

na.seadec()和na.kalman()特别适合替换季节性时间序列中的缺失数据。但是,还有其他可用的高级方法(链接到imputeTS Paper)。

您可以像这样使用它解决此问题:

library(imputeTS)
x <- decompose(na.seadec(yourTimeSeries))

,或者如果您想使用na.kalman方法:

library(imputeTS)
x <- decompose(na.kalman(yourTimeSeries))
相关问题