我有一个包含两个不同月度系列和一年重叠的数据
ts1 <- ts(cumsum(rnorm(120,.1,1)), start = 1995, frequency = 12)
ts2 <- ts(cumsum(rnorm(120,.2,1)), start = 2004, frequency = 12)
它们没有相同的水平(2004年有一个重新定位)但是重叠可以使用第一个的月增长率来反推第二个,直到1995年。
我想创建一个变量ts_series,它在2004年之后具有ts2的级别,然后使用ts1的每月增长率来反投影它。我在动物园对象中有几个这样的系列,所以我可以使用zoo方法或将它们分组并使用mapply。
非常感谢
答案 0 :(得分:0)
这是一种方法,对重叠位使用简单的线性回归来识别两个系列之间的关系,然后将该模型应用于ts1
的非重叠部分,以估计{{1}的早期值}}。最后一步为您提供了一个新的ts2
对象,该对象表示非重叠时段ts
的预测值。
ts2
如果您希望自己反向投射ts2,Rob Hyndman会在# Make the toy data
set.seed(1)
ts1 <- ts(cumsum(rnorm(120,.1,1)), start = 1995, frequency = 12)
ts2 <- ts(cumsum(rnorm(120,.2,1)), start = 2004, frequency = 12)
# Now do the estimation
x <- as.vector(window(ts1, start = c(2004,1), end = c(2004,12)))
y <- as.vector(window(ts2, start = c(2004,1), end = c(2004,12)))
tsmod <- lm(y ~ x)
ts2preds <- predict(tsmod, newdata = as.data.frame(window(ts1, start = c(1995,1), end = c(2003,12))))
ts2prior <- ts(data = ts2preds, start = c(1995, 1), end = c(2003, 12), frequency = 12)
包中为您提供forecast()
功能。关注他的博客an example:
forecast
这是产生的情节:
以下是两个系列的比较:
library(forecast)
f <- frequency(ts2) # Identify the frequency of your ts
h <- (start(ts2)[1] - start(ts1)[1]) * f # Set the number of periods you want to backcast
revx <- ts(rev(ts2), frequency = f) # Reverse time in the series you want to backcast
ts2plus <- forecast(auto.arima(revx), h) # Do the backcasting
# Reverse its elements
ts2plus$mean <- ts(rev(ts2plus$mean), end=tsp(ts2)[1] - 1/f, frequency=f)
ts2plus$upper <- ts2plus$upper[h:1,]
ts2plus$lower <- ts2plus$lower[h:1,]
ts2plus$x <- ts2 # Replace the reversed reference series in the prediction object with the original one
# Plot it
plot(ts2plus, xlim=c(tsp(ts2)[1]-h/f, tsp(ts2)[2]))
如果您的主要目标是获得这些早期值的最佳点预测,您可以考虑运行两个版本并对其结果求平均值。然后,这将成为一个非常简单的多模型集合预测(或后投)。