我正在处理一个不平衡、不规则间隔的横截面时间序列。我的目标是获得“数量”向量的滞后移动平均向量,按“主题”分割。
换句话说,假设为 Subject_1 观察到以下数量:[1,2,3,4,5]。我首先需要将它滞后 1,得到 [NA,1,2,3,4]。
然后我需要取 3 阶的移动平均线,得到 [NA,NA,NA,(3+2+1)/3,(4+3+2)/3]
以上需要对所有科目进行。
# Construct example balanced panel DF
panel <- data.frame(
as.factor(sort(rep(1:6,5))),
rep(1:5,6),
rnorm(30)
)
colnames(panel)<- c("Subject","Day","Quantity")
#Make panel DF unbalanced
panelUNB <- subset(panel,as.numeric(Subject)!= Day)
panelUNB <- panelUNB[-c(15,16),]
如果面板是平衡的,我将首先使用 packageplm
和 function滞后“数量”变量lag
。rollmean
然后我会像这样使用包中的函数来获取滞后“数量”的移动平均值zoo
:
panel$QuantityMA <- ave(panel$Quantity, panel$Subject, FUN = function(x) rollmean(
x,3,align="right",fill=NA,na.rm=TRUE))
这将在应用于平衡“面板”DF 时产生正确的结果。
问题在于,plm
并且lag
依赖于均匀分布的系列来生成索引变量,而 rollapply 要求所有主题的观察次数(窗口大小)相等。
StackExchange 上有一个带有 data.table 的解决方案,它暗示了我的问题的解决方案:Producing a rolling average of an unbalanced panel data set
也许可以修改此解决方案以生成固定长度的移动平均线,而不是“滚动累积平均线”。