以下方法适用于多元模型,其中有多个结果和预测变量。我将使用一些示例数据来说明这个想法以及它是如何工作的。
df <- data.frame(y1=sample(1:5, size=50, replace=TRUE),
y2=sample(1:5, size=50, replace=TRUE),
x1=sample(1:5, size=50, replace=TRUE),
x2=sample(1:5, size=50, replace=TRUE),
x3=sample(1:5, size=50, replace=TRUE),
x4=sample(1L:2L, size=50, replace=TRUE))
df
该函数需要为
dv
指定一个命名参数,但使用省略号表示您可以拥有任意数量的预测变量。在函数内部,您使用
deparse()
和
substitute()
处理预测变量,并将它们与
dv
一起传递给
reformulate()
函数。我在函数内部包含了
dv=dv
,以便可以看到模型输出与哪个dv相关联。
lm_func <- function(dv, ...){
x = sapply(substitute(...()), deparse)
f = reformulate(termlabels=x, response=dv)
model = eval(lm(f, data=df))
list(dv=dv, model_summary=summary(model))
}
在下一步中,我们从目标数据框中选择
dvs
并对其进行命名。
dvs <- names(df)[1:2]
dvs <- purrr::set_names(dvs)
最后,对dvs运行一个循环并存储结果。
lm_out = list()
for (i in 1:length(dvs)){
lm_out[[i]] = (lm_func(dvs[i], x1, x2))
}
lm_out
注意:在
lm_func
中可以做更多的事情;例如,提取模型摘要的哪些部分。
rnorm()
调用)。 - arvi1000