R:具有NA数据的ts()

时间:2016-06-28 19:56:52

标签: r time-series

我有以下功能:

ts.dat <- ts(data=dat$sales, start = 1, frequency = 12)

TS。 dat返回

   Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
1 9000 8600 8500 8600 8500 8300 8600 9100 8800 8700 9300 7900
2 7900 8800 8500 8900 9000 8800 8800 9100 9500 8900 9200 8400
3 8400 9200 9500 9100 8700 8300   NA

然而,

 plot(stl(ts.dat, s.window=12))

返回

Error in na.fail.default(as.ts(x)) : missing values in object'plot':

我尝试了na.action=na.pass,但它没有用。如果这是原因,任何想法如何处理NA?

另外:是否有机会从dat开始作为第一个约会?

2 个答案:

答案 0 :(得分:2)

  

如果这是原因,任何想法如何处理NA?

您需要使用na.action = na.omit,即在进行计算时删除NA

plot(stl(ts.dat, s.window=12, na.action = na.omit))

stl

na.pass只会将NA视为正常观察。但它仍然会产生错误,因为stl()后来调用编译代码而无法识别NA

  

是否有机会从dat开始作为第一个约会?

查看?ts底部的示例:

 ## Using July 1954 as start date:
 gnp <- ts(cumsum(1 + round(rnorm(100), 2)),
           start = c(1954, 7), frequency = 12)

从1954年7月开始,放start = c(1954, 7)

答案 1 :(得分:1)

您还可以估算时间序列中丢失的数据。 (将NA替换为合理的值)

有R个软件包可以执行此操作(例如 imputeTS zoo )。

尤其是 imputeTS 具有一些功能,可以很好地选择按季节替换时间序列中的缺失数据。 (na.seadec()或na.kalman()) (它还具有其他插补功能-这里是overview

这里的解决方案如下:

library(imputeTS)
x <- na.seadec(ts.dat)
plot(stl(x, s.window=12))