【问题标题】:Regressing a data frame of multiple dependent variables on a data frame of multiple explanatory variables在多个解释变量的数据框中回归多个因变量的数据框
【发布时间】:2019-05-08 10:32:54
【问题描述】:

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

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)})

谁能告诉我编写这个回归的正确方法是什么?

非常感谢。

【问题讨论】:

    标签: r regression linear-regression


    【解决方案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)))
    

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

    【讨论】:

    • 感谢您的回复。我用我的原始数据尝试了你的建议并得到了这个错误:[[&lt;-.data.frame(*tmp*, i, value = c(4817L, 4817L, 4817L, 中的错误:替换有 122620 行,数据有 6131 我的家属数据框有 6131行,19 列,而我的解释性数据框有 6131 行 20 列
    • @ElifCansuAkoğuz,在您的情况下,dim(dependents)dim(explanatory) 是什么?
    • 我的家属数据框有 6131 行 19 列,而我的解释数据框有 6131 行 20 列。
    • @ElifCansuAkoğuz,很难说,数据肯定有问题。你需要把它上传到某个地方让我帮忙。如您所见,我的回答确实适用于您的简单最小示例。
    • 很遗憾,我无法上传数据,因为它是保密共享的。但是,您是否认为问题可能是由于我的解释性数据中有一些分类和序数变量以及整数和数字变量?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多