【发布时间】:2011-11-29 23:24:49
【问题描述】:
我有一个看起来像这样的数据框(为说明而简化):
date id value
d1 id1 v1
d2 id1 v2
d1 id2 v3
d2 id2 v4
我想通过 id 将其分解,对每个 id 运行滚动回归(因此对于每个 id 将有 N 个回归),挑选出 rsquared 并将其组装回数据框。我这样做的方法是:
roll_reg <- function(df) {
T <- with(df, min(nlen(xs_ret), nlen(xs_mkt), nlen(smb), nlen(hml), nlen(umd)))
OFFSET <- 3
themodels <- as.list(rep(NA, OFFSET))
#120 days rolling period
if (T>OFFSET) {
#the first OFFSET models are na
for (i in seq(OFFSET+1, T)) {
idx <- seq(i-OFFSET-1,i)
themodels[i] <- list(with(df,
lm(xs_ret[idx]~xs_mkt[idx]+smb[idx]+hml[idx]+umd[idx])))
}
return(themodels)
}
else { return(NA) }
}
models <- dlply(dt_df, "id", roll_reg)
然后我打算用
重新组装所有东西ldply(models, function(x) {summary(x)$r.squared})
这不起作用,因为 models 是一个列表列表,而 x 是一个模型列表。但是,如果我的 function(x) 通过 cat 返回一个列表,将所有 rsquared 放入一个列表中,我会收到一个错误,因为 ldply 期望 function(x) 返回一个原子结果。非常感谢您的帮助。
【问题讨论】: