使用lapply进行公式更改的多元回归,而不是数据集

Mar*_*eal 2 regression r lapply stargazer

我已经看到了list apply(lapply)的一个例子,它可以很好地获取数据对象列表,并返回一个回归输出列表,我们可以将它传递给Stargazer以获得格式良好的输出. 使用stargazer,通过在split data.frame上提供lamply创建的lm对象列表

library(MASS)
library(stargazer)
data(Boston)

by.river <- split(Boston, Boston$chas)
class(by.river)

fit <- lapply(by.river, function(dd)lm(crim ~ indus,data=dd))
stargazer(fit, type = "text")
Run Code Online (Sandbox Code Playgroud)

我想做的是,不是传递数据集列表来对每个数据集进行相同的回归(如上所述),而是传递一个独立变量列表,对同一数据集进行不同的回归.从长远来看,它看起来像这样:

fit2 <- vector(mode = "list", length = 2)
fit2[[1]] <- lm(nox ~ indus, data = Boston)
fit2[[2]] <- lm(crim ~ indus, data = Boston)
stargazer(fit2, type = "text")
Run Code Online (Sandbox Code Playgroud)

与lapply,我试过这个,它不起作用.我哪里做错了?

myvarc <- c("nox","crim")
class(myvarc)
myvars <- as.list(myvarc)
class(myvars)
fit <- lapply(myvars, function(dvar)lm(dvar ~ indus,data=Boston))
stargazer(fit, type = "text")
Run Code Online (Sandbox Code Playgroud)

Par*_*ait 5

考虑从字符串创建动态公式:

fit <- lapply(myvars, function(dvar)
    lm(as.formula(paste0(dvar, " ~ indus")),data=Boston))
Run Code Online (Sandbox Code Playgroud)

  • 类似地,使用`reformulate`,你可以做`fit &lt;- lapply(myvars, function(dvar) lm(reformulate("indus", dvar)),data=Boston))`。 (2认同)