我正在处理不平衡、间隔不规则的横截面时间序列。我的目标是获得“数量”向量的滞后移动平均向量,并按“主题”分段。
换句话说,假设对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),]
如果面板是平衡的,我将首先使用包滞后“数量”变量plm
和功能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
and lag
依赖均匀分布的序列来生成索引变量,而 rollapply 要求所有受试者的观察数量(窗口大小)相等。
StackExchange 上有一个带有 data.table 的解决方案,它暗示了我的问题的解决方案:生成不平衡面板数据集的滚动平均值 https://stackoverflow.com/questions/16111242/producing-a-rolling-average-of-an-unbalanced-panel-data-set
也许可以修改该解决方案以产生固定长度的移动平均线,而不是“滚动累积平均线”。