在多个解释变量的数据帧上回归多个因变量的数据帧

时间:2018-12-06 16:59:00

标签: r regression linear-regression

我有一个名为dependents的多个因变量的数据框,以及另一个名为explanatory的解释性变量组成的数据框。我想对所有dependents变量上的explanatory中的每个变量进行回归。但是,无论做什么,我都会不断犯错误(每次都不同)。我在下面创建了一个更简单的问题版本:

dependents <- structure(list(exp1 = c(1,2,3), 
                             exp2 = c(4,5,6),
                             exp3 = c(7,8,9)),
                             .Names = c("exp1", "exp2", "exp3"),
                             class = "data.frame", row.names = c(NA, -3L))

explanatory <- structure(list(var1 = c(1,2,3), 
                              var2 = c(4,5,6),
                              var3 = c(7,8,9)),
                             .Names = c("var1", "var2", "var3"),
                             class = "data.frame", row.names = c(NA, -3L))

我尝试了以下代码:

engel <- lm(dependents ~ exp_variables )

engel <- lm(colnames(dependents) ~ colnames(exp_variables))

engel <- lapply(colnames(dependents), function(x) {
         fit <- lm(paste(x,'~',colnames(exp_vars),collapse = "+")})

reg_data = cbind(dependents, exp_variables)
engel <- lm(dependents ~ exp_variables, data = reg_data )

reg_data = cbind(dependents, exp_variables)
engel <- lm(colnames(dependents) ~ colnames(exp_variables), data = reg_data )

engel <- lapply(dependents, function(x) {
         fit <- lm(paste(x,'~',exp_vars,collapse = "+")})

reg_data = cbind(dependents, exp_variables)
engel <- lapply(dependents, function(x) {
         fit <- lm(paste(x,'~',exp_vars,collapse = "+"), data=reg_data)})

reg_data = cbind(dependents, exp_variables)
engel <- lapply(colnames(dependents), function(x) {
         fit <- lm(paste(x,'~',colnames(exp_vars),collapse = "+"), data=reg_data)})

有人可以告诉我编码此回归的正确方法是什么吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您的第一次尝试很棒,只是您应该提供矩阵而不是数据帧:

lm(as.matrix(dependents) ~ as.matrix(explanatory))

这是explanatory不包含任何因素的情况。如果有因素,您可以使用

lm(as.matrix(dependents) ~ -1 + model.matrix(~ ., data = explanatory))

在我有-1的地方,因为model.matrix也不会为其创建两个列,所以我没有两个截距。当然,总有一种选择可以使操作更加简单明了,例如lapply

lapply(dependents, function(y) lm(y ~ ., data = cbind(y = y, explanatory)))

实际上,这甚至可能是最好的选择,因为您可以清楚地控制每个模型的公式,并且可以很好地保留回归变量的名称。