0

我有以下功能:

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

ts。数据返回

   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开始?

4

2 回答 2

3

知道如何处理 NA,如果这是原因?

计算时需要使用na.action = na.omit,即drop 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).

于 2016-06-29T06:06:08.050 回答
1

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

有 R 包可以做到这一点(例如imputeTSzoo)。

尤其是imputeTS有一些函数是非常好的选择,可以用季节性替换时间序列中的缺失数据。(na_seadec() 或 na_kalman()) (它还有其他的插补函数 - 这里是一个概述

这里的解决方案如下所示:

library(imputeTS)
x <- na_seadec(ts.dat)
plot(stl(x, s.window=12))
于 2019-05-10T04:28:33.630 回答