我有一个包含507列的数据框。第1列是观察日期。第2列到第504列是我的因变量。 505,506和507列是独立变量。我写了一个函数来为每个因变量做一个单独的回归:
varlist<-names(df)[2:504]
models <- lapply(varlist, function(x) {
lm( na.action = na.exclude,
substitute(i ~ rmrf + smb + hml,
list(i = as.name(x))
),
data = df)
})
如何将所有剩余结果导出到单独的数据框中,以及相应的标题,它来自哪个因变量以及它来自哪个日期?
我可以使用此方法从单个模型访问残差:
resid(models[[1]])
但是我无法确定这适用于哪个因变量以及残差对应的日期(观察)。另外,我还没有找到一种从所有503型号中导出残差的方法。
Resid(models[[1:503]])
给出了以下错误:
模型[[1:503]]出错:递归索引在第3级失败
答案 0 :(得分:1)
# All the dep var
x = df[,505:507]
# All the indep var
y = df[,2:504]
# Fit all the models, use a little bit of scoping abuse
list_models = lapply(y, function(y) with(x, lm(y~rmf + smb + htl)))
# Get resid for all models
list_resid = lapply(list_models, resid)
# If you want them in a data.frame instead of list
df_resid = do.call(cbind.data.frame, list_resid)
# Add the dates
df_resid = cbind(date = df[,1], df_resid)
# Reproducible example, just generating some fake data in the same structure as your data
df = matrix(runif(50*507), nrow = 50, ncol = 507)
df = data.frame(df)
df[,1] = seq(as.Date("2017/1/1"), as.Date("2017/2/19"), "days")
names(df) = paste0("var", 1:507)
names(df)[505:507] = c("rmf", "smb", "htl")
names(df)[1] = "Date"