在 R 中循环多个 'multiple linear regressions'

Loop multiple 'multiple linear regressions' in R

我有一个数据库,我想在其中进行多次多元回归。它们看起来都是这样的:

fit <- lm(Variable1 ~ Age + Speed + Gender + Mass, data=Data)

唯一变化的变量是 variable1。现在我想循环或使用 apply 系列中的东西在 variable1 的位置循环几个变量。这些变量是我的数据文件中的列。有人可以帮我解决这个问题吗?非常感谢!

到目前为止我尝试了什么:

当我使用 names() 函数提取其中一个列名时,我确实得到了列名:

varname  = as.name(names(Data[14])) 

但是当我填写这个时(并且我使用了 attach() 函数):

fit <- lm(Varname ~ Age + Speed + Gender + Mass, data=Data) 

我收到以下错误:

Error in model.frame.default(formula = Varname ~ Age + Speed + Gender + : object is not a matrix

我想 lm() 函数不能将 Varname 识别为 Variable1。

您可以使用 lapply 来遍历您的变量。

fit <- lapply(Data[,c(...)], function(x) lm(x ~ Age + Speed + Gender + Mass, data = Data))

这会为您提供结果列表。

c(...) 应该包含您的变量名称作为字符串。或者,您可以根据变量在 Data 中的位置选择变量,例如 Data[,1:5].

您遇到的问题是 lm 函数中的公式试图读取 data 中列的字面名称或将整个向量输入回归。因此,要使用列名,您需要告诉公式解释变量的值 varnames 并将其与其他变量合并。

# generate some data
set.seed(123)
Data <- data.frame(x = rnorm(30), y = rnorm(30), 
    Age = sample(0:90, 30), Speed = rnorm(30, 60, 10), 
    Gender = sample(c("W", "M"), 30, rep=T), Mass = rnorm(30))
varnames <- names(Data)[1:2]

# fit regressions for multiple dependent variables 
fit <- lapply(varnames, 
    FUN=function(x) lm(formula(paste(x, "~Age+Speed+Gender+Mass")), data=Data))
names(fit) <- varnames

 fit
$x

Call:
lm(formula = formula(paste(x, "~Age+Speed+Gender+Mass")), data = Data)

Coefficients:
(Intercept)          Age        Speed      GenderW         Mass  
   0.135423     0.010013    -0.010413     0.023480     0.006939  


$y

Call:
lm(formula = formula(paste(x, "~Age+Speed+Gender+Mass")), data = Data)

Coefficients:
(Intercept)          Age        Speed      GenderW         Mass  
   2.232269    -0.008035    -0.027147    -0.044456    -0.023895