使用R中的data.table用面板数据的预测填充列

使用R中的data.table用面板数据的预测填充列,r,function,time-series,data.table,lag,R,Function,Time Series,Data.table,Lag,我有一个带有“实体”和“年份”的面板数据。我有一个列“x”,它的值与时间序列类似。我想创建一个新的列“xp”,其中,对于每个“实体”,我为每个“年”提供从前5年的预测中获得的值。如果之前可用的值少于5个,则xp=NA 出于通用性考虑,forecast是R中内置函数的输出,该函数来自一些包(如“forecast”)中的两个预定义函数。如果使用特定函数更容易,那么让我们使用forecast(auto.arima(x.L5:x.L1),h=1) 现在,我在R中使用data.table,因为它比我在数据

我有一个带有“实体”和“年份”的面板数据。我有一个列“x”,它的值与时间序列类似。我想创建一个新的列“xp”,其中,对于每个“实体”,我为每个“年”提供从前5年的预测中获得的值。如果之前可用的值少于5个,则xp=NA

出于通用性考虑,forecast是R中内置函数的输出,该函数来自一些包(如“forecast”)中的两个预定义函数。如果使用特定函数更容易,那么让我们使用forecast(auto.arima(x.L5:x.L1),h=1)

现在,我在R中使用data.table,因为它比我在数据集上进行的所有其他操作都快得多

然而,我想做的不是数据。表101和我正在与之斗争。 如果你能抽出一点时间来帮助我,我将不胜感激。 谢谢 以下是我想做的事情的摘录:

entity year   x    xp
1      1980   21   NA
1      1981   23   NA
1      1982   32   NA
1      1983   36   NA
1      1984   38   NA
1      1985   45   42.3 =f((21,23,32,36,38))
1      1986   50   48.6 =f((23,32,36,38,45))
2      1991    2   NA
2      1992    4   NA
2      1993    6   NA
2      1994    8   NA
2      1995   10   NA
2      1996   12   12.4 =f((2,4,6,8,10))
2      1997   14   13.9 =f((4,6,8,10,12))
...
根据Eddi的建议,我找到了一种使用rollapply的方法:

DT <- data.table(mydata)
DT <- DT[order(entity,year)]
DT[,xp:=rollapply(.SD$x,5,timeseries,align="right",fill=NA,by="entity"]

DT在
zoo
中签出
rollappy
我无法使用rollappy by entity。可能您的数据排序不正确,请在运行命令之前尝试运行
setkey(您的_DT,entity,year)
;您还可以添加一个
print
语句来查看哪个组失败,例如
DT[,xp:={print(entity);rollappy(…)},by=entity]
并调试该组的函数谢谢。来自每个实体的年数。解决了。你可以用对你有帮助的确切答案自我回答你的问题,这样其他人也可以学习。
timeseries <- function(x){
fit <- auto.arima(x)
value <- as.data.frame(forecast(fit,h=1))[1,1]
return(value)
}