正确估算zooreg对象?

时间:2018-05-18 15:01:57

标签: r time-series frequency zoo imputation

我的目标是在动物群时间序列对象中归纳NA。时间序列的模式是循环的。我的代码是:

#load libraries required
library("zoo")

# create sequence every 15 minutes from 1st Dec to 20th Dec, 2018
timeStamp <- seq.POSIXt(from=as.POSIXct('2018-01-01 00:00:00', tz="UTC"), to=as.POSIXct('2018-01-20 23:45:00', tz="UTC"), by = "15 min")
# data which increases from 12am to 12pm, then decreases till 12 am of next day, for 20 days
readings <- rep(c(seq(1,48,1), seq(48,1,-1)), 20)
dF <- data.frame(timeStamp=timeStamp, readings=readings)

# create a regular zooreg object, frequency is 1 day( 4 readings * 24 hours)
readingsZooReg <- zooreg(dF$readings, order.by  = dF$timeStamp, frequency = 4*24)
plot(readingsZooReg)

# force some data to be NAs
window(readingsZooReg, start = as.POSIXct("2018-01-14 00:00:00", tz="UTC"), end = as.POSIXct("2018-01-16 23:45:00", tz="UTC")) <- NA
plot(readingsZooReg)


# plot imputed values
plot(na.approx(readingsZooReg))

情节是: Full time series, NAs added, Imputed time series

我故意在这里使用动物园,因为我工作的时间序列是不规则的(例如太阳能,油井等)

1)我使用&#34; zooreg&#34;正确?或者是&#34;动物园&#34;对象足够吗?
2)我的频率变量是对的吗? 3)为什么没有na.approx工作?我也试过na.StructTs,R脚本挂起。
4)是否有使用任何其他包的解决方案? xts,ts等?

1 个答案:

答案 0 :(得分:0)

您当前的示例时间序列是常规时间序列。 (不规则时间序列将具有时间步长,观察之间的时间距离不同)

例如:

  • 10:00:10,10:00:20,10:30:30,10:00:40,10:00:50(常规间隔)
  • 10:00:10,10:00:17,10:00:33,10:00:37,10:00:50(不规则间隔)

如果你真的需要处理不规则间隔的时间序列, zoo 就是你的包装。否则,您还可以将其他时间序列类用作 xts ts

关于频率:

您通常根据期望模式重复的值来设置时间序列的频率。 (在你的例子中,这可能是96)。在现实生活中,这通常是1天,1周,1个月......,但它也可能与1,5天不同。 (例如,如果您有每日返回模式和1分钟观察,则将频率设置为1440)。

动物园的

na.approx 完美无缺。它完全按照预期行事。间隙前的点0和间隙末端的0之间的插值将在0处给出一条直线。当然,这可能不是您预期的结果,因为它不考虑季节性。这就是为什么G.Grothendieck建议你使用na.StructTS作为一种选择方法的原因。 (这种方法通常可以更好地考虑季节性)

如果你不受动物园限制,最好的选择是在这种特殊情况下使用imputeTS包中的 na.seadec (一个专门用于时间序列插补的包)。

我已经为您添加了一个示例,其中包含 imputeTS 包中的精美图表

library(imputeTS)
yourTS <- ts(coredata(readingsZooReg), frequency = 96)
plotNA.distribution(yourTS)
imputedTS <- na.seadec(yourTS)
plotNA.imputations(yourTS, imputedTS)

通常imputeTS也可以与动物园时间序列完美配合作为输入。我再次将它改为 ts ,因为你的动物园对象的东西看起来很奇怪......这也是动物园本身的na.StructTS破坏的原因。也许知识渊博的人可以帮到这里。

请注意,如果你真的应该有不规则的时间序列,请不要使用其他包/插补函数而不是动物园。因为它们都假定数据是规则间隔的并且将相应地给出结果。