【问题标题】:Correct imputation for a zooreg object?zooreg 对象的正确插补?
【发布时间】:2018-10-29 01:35:04
【问题描述】:

我的目标是在 zooreg 时间序列对象中估算 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

我在这里特意使用 zoo,因为我处理的时间序列是不规则的(例如太阳能、油井等)

1) 我对“zooreg”的用法正确吗?还是“动物园”对象就足够了?
2) 我的频率可变对吗?
3) 为什么 na.approx 不起作用?我也试过 na.StructTs,R 脚本挂起。
4)是否有使用任何其他包的解决方案? xts、ts 等?

【问题讨论】:

  • 尝试提出一个格式正确的问题
  • 试试na.StructTS

标签: r time-series frequency zoo imputation


【解决方案1】:

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

例如:

  • 10:00:10、10:00:20、10:00:30、10:00:40、10:00:50(等间距)
  • 10:00:10、10:00:17、10:00:33、10:00:37、10:00:50(不规则间隔)

如果你真的需要处理不规则的时间序列,zoo 是你的首选。否则,您还可以使用其他时间序列类作为 xtsts

关于频率:

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

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

如果您没有绑定到 zoo,那么在这种特定情况下,最好的选择是使用 imputeTS 包中的 na_seadec(一个专门用于时间序列插补的包)。

我还为您添加了一个示例,其中包含 imputeTS 包中的漂亮图

library(imputeTS)
yourTS <- ts(coredata(readingsZooReg), frequency = 96)
ggplot_na_distribution(yourTS)
imputedTS <- na_seadec(yourTS)
ggplot_na_imputations(yourTS, imputedTS)

通常 imputeTS 也可以完美地使用动物园时间序列作为输入。我只是再次将其更改为 ts,因为您的 zoo 对象的某些东西看起来很奇怪......这也是 zoo 本身的 na.StructTS 中断的原因。也许有更好的知识的人可以在这里提供帮助。

请注意,如果您真的应该有不规则的时间序列,请不要使用来自 zoo 的其他包/插补函数。因为他们都假设数据是规则间隔的,并会给出相应的结果。

【讨论】:

猜你喜欢
  • 2016-06-30
  • 2023-03-28
  • 2020-03-22
  • 2017-09-27
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2021-12-12
相关资源
最近更新 更多