我正在尝试创建一个函数,该函数创建多个线性模型,将标准错误聚类,然后将其作为列表返回。为此,我创建了这些功能。
Sq_Diag <- function(x){
sqrt(diag(x))
}
#Function for clustering standard-errors on a list of lm-models
Cl_SE <- function(Models, Cluster) {
Cov <- lapply(Models, cluster.vcov, cluster = Cluster )
SE <- lapply(Cov, Sq_Diag)
}
#Function for creating lm-models, based on a given X and a set of controls
LM_Creater <- function(x, N_Lead, CV) {
Form <- as.formula(paste(paste(x, N_Lead, sep = "_"), "~",x, "+", paste(CV, collapse = "+")))
Model_Fit <- lm(Form, na.action = "na.exclude", data = df)
}
使用它们时,我只需lapply()
到变量名向量即可。
Dep_Var <- c("Var1", "Var2", "Var3")
Cntrl_Var <- c("Var4", "Var5", "Var6")
通过此代码,一些变量被赋予了先导
df <- df %>%
group_by(id) %>%
mutate_at(3:14, list(lead_5 = dplyr::lead), 5)
#Returns two lists, one with the models and one with the SE
One_Mods <- lapply(Dep_Var, LM_Creater, N_Lead = "lead_1", CV = Cntrl_Var)
CC_SE_One <- Cl_SE(One_Mods, dfb$id)
现在,我想对公式中的因变量运行log()
。我已经尝试将其简单地添加到Dep_Var向量中,但这在N_Lead
函数中与LM_Creater
参数一起使用。我还尝试过更改功能,例如:
LM_Creater <- function(x, N_Lead, CV) {
Form <- as.formula(paste(paste(paste("log("x"+1)"), N_Lead, sep = "_"), "~",x, "+", paste(CV,
collapse = "+")))
Model_Fit <- lm(Form, na.action = "na.exclude", data = df)
}
但是,在该位置放入新的past()
会使R尝试在字符变量(即因变量的名称)处评估函数。当然那会返回一个错误,指出不可能使用“ log(字符)”。
关于如何实现这一目标的任何线索吗?