我有一个数据库,我想做几个回归。他们都看起来像这样:
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)
我收到以下错误:
model.frame.default中的错误(公式= Varname~年龄+速度+性别 +:object不是矩阵
我认为lm()函数不能将Varname识别为Variable1。
答案 0 :(得分:4)
您的案例中的问题是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
答案 1 :(得分:3)
您可以使用lapply
循环变量。
fit <- lapply(Data[,c(...)], function(x) lm(x ~ Age + Speed + Gender + Mass, data = Data))
这会为您提供结果列表。
c(...)
应该包含您的变量名称作为字符串。或者,您可以按Data
中的位置选择变量,例如Data[,1:5]
。