我有一个时间序列数据集,并且采用过去2年系数的滚动平均值并将其应用于当前年份变量。我创建了一个应用平均值的方法,但我想知道我是否可以使用像预测这样的函数来执行此操作,因此我不必单独写出每个变量。
我的代码的简化版本是这样的:
formula <- as.formula( a ~ b + c)
subset <- which(data$year == 2009)
fm1 <- lm(formula, data[subset,])
subset2 <- which(data$year == 2010)
fm2 <- lm(formula, data[subset,])
#Take average of coefficients from these two regression
avg_coeff <- (fm1$coeff + fm2$coeff)/2
#Apply average coefficients to current year data
subset3 <- which(data$year == 2011)
subset_data <- data[subset,]
a_hat <- avg_coeff[1] + avg_coeff[2] * subset_data$b + avg_coeff[3] * subset_data$c
此方法有效,但我想保留lm
对象,以便我可以使用预测方法并执行:
a_hat <- predict(fm, subset_data)
其中fm$coefficient
包含avg_coeff
。我试过了
fm2$coeff <- avg_coeff
但这确实会改变fm2$coeff
,但是当我使用fm2
运行预测时,它会使用原始系数。
答案 0 :(得分:0)
如果你想每年都这样做,也许你可以做一些像
这样的事情require(plyr)
formula <- as.formula( a ~ b + c)
fn <- function(X){
fm <- lm(formula, X)
out <- fm$coefficients
}
coeffs <- dlply(dta, .(year), fn)
avg_coeffs <- sapply(coeffs, mean)