在 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
我有一个数据库,我想在其中进行多次多元回归。它们看起来都是这样的:
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