我想迭代线性模型列表并使用该vcovCL
函数将“聚集”标准错误应用于每个模型。我的目标是尽可能高效地执行此操作(我正在跨数据框的许多列运行线性模型)。我的问题是尝试在匿名函数中指定其他参数。下面我模拟一些假数据。区域代表我的横截面尺寸;月代表我的时间维度(在 4 个月内观察到 5 个单位)。该变量int
是干预发生时的虚拟变量。
df <- data.frame(
precinct = c( rep(1, 4), rep(2, 4), rep(3, 4), rep(4, 4), rep(5, 4) ),
month = rep(1:4, 5),
crime = rnorm(20, 10, 5),
int = c(c(0, 1, 1, 0), rep(0, 4), rep(0, 4), c(1, 1, 1, 0), rep(0, 4))
)
df[1:10, ]
outcome <- df[3]
est <- lapply(outcome, FUN = function(x) { lm(x ~ as.factor(precinct) + as.factor(month) + int, data = df) })
se <- lapply(est, function(x) { sqrt(diag(vcovCL(x, cluster = ~ precinct + month))) })
cluster
在函数内添加参数时,我收到以下错误消息vcovCL
。
Error in eval(expr, envir, enclos) : object 'x' not found
在我看来,唯一的解决方法是索引数据框,即 ,df$
然后指定“聚类”变量。这可以通过df
在函数调用内部指定一个附加参数来实现吗?这段代码有效吗?
我想,也许以公式的方式指定模型方程是一种更好的方法。
任何想法/评论总是有帮助的:)