我的目标是在动物群时间序列对象中归纳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等?
答案 0 :(得分:0)
您当前的示例时间序列是常规时间序列。 (不规则时间序列将具有时间步长,观察之间的时间距离不同)
例如:
如果你真的需要处理不规则间隔的时间序列, 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破坏的原因。也许知识渊博的人可以帮到这里。
请注意,如果你真的应该有不规则的时间序列,请不要使用其他包/插补函数而不是动物园。因为它们都假定数据是规则间隔的并且将相应地给出结果。