为不同的列定义不同的时间序列

时间:2019-05-10 10:57:04

标签: r datetime time-series forecasting

我有一个数据框,其中某些列的开始时间晚于其他列。请找到可复制的示例。

set.seed(354)
df <- data.frame(Product_Id = rep(1:100, each = 50), 
                     Date = seq(from = as.Date("2014/1/1"), 
                                to = as.Date("2018/2/1"), 
                                by = "month"), 
                     Sales = rnorm(100, mean = 50, sd= 20))
df <- df[-c(251:256, 301:312, 2551:2562, 2651:2662, 2751:2762), ]

library(zoo)
z <- read.zoo(df, index = "Date", split = "Product_Id", FUN = as.yearmon)
tt <- as.ts(z)

现在,对于此数据框的第6、7、52、54和56列,我想将它们定义为与其他数据框相比从不同日期开始的时间序列。假设数据从2000年1月开始,第6列从2000年7月开始,第7列从2001年1月开始,依此类推。我应该怎么做呢?

稍后,我想对此数据集进行预测。有什么意见吗?我是否应该将每一列都视为单独的数据框并进行预测。还是可以将每列转换为从第一个非NA值开始的不同时间序列对象?

1 个答案:

答案 0 :(得分:0)

  

现在,对于此数据框的第6、7、52、54和56列,我想将它们定义为与其他数据框相比从不同日期开始的时间序列。假设数据从2000年1月开始,第6列从2000年7月开始,第7列从2001年1月开始,依此类推。我应该怎么做呢?

在这里,AFAIK无法在时间序列矩阵的R中执行此操作。并且,如果每列开始在不同的日期,那么(由于每列具有相同的条目数),每列也需要在不同的日期结束。这真的是您所需要的吗?时间序列的集合都恰好具有相同的长度(因此它们可以适合矩阵),但是以偏移量开头和结尾?我很难理解在某种预测竞赛之外,类似的东西在什么地方有用。

如果您确实需要此功能,那么我建议您将时间序列放入列表结构中。这样每个人都可以在任何日期开始和结束,并且长度可以相同或不同。从Mcomp::M3中汲取灵感。

  

稍后,我想对此数据集进行预测。有什么意见吗?我是否应该将每一列都视为单独的数据框并进行预测。还是可以将每列转换为从第一个非NA值开始的不同时间序列对象?

由于您的tt已经是一个时间序列对象,所以最简单的方法就是简单地对其列进行迭代:

fcst <- matrix(nrow=10,ncol=ncol(tt))
for ( ii in 1:ncol(tt) ) fcst <- forecast(ets(tt[,ii]),10)$mean

请注意,forecast中的大多数建模函数都会在遇到NA值时发出警告并做一些合理的事情。在这里,例如:

1: In ets(tt[, ii]) :
  Missing values encountered. Using longest contiguous portion of time series

当然,您可以在循环中自己做一些事情,例如,搜索最后一个NA并在此之后立即开始建模的时间序列(但请确保如果最后一个条目为{{ 1}})。