【问题标题】:Performing multiple regression with purrr and R使用 purrr 和 R 执行多元回归
【发布时间】:2017-11-27 19:58:55
【问题描述】:

我正在尝试弄清楚如何设置 purrr 来运行几个多重回归,如下图所示。如您所见,该数据集描述了一个干预计划,我们正在使用 ANCOVA 程序(时间 2 ~ 时间 1 + 条件)分析此数据。

om4g**TIME2**01 ~ om4g**TIME1**01 + CONDITION

示例:

om4g201 ~ om4g01 + CONDITION

以防万一有人想要可重现的代码:

dataset <- data.frame(rest201=c(10,20,30,40),
                      rest101=c(5,10,20,24),
                      omgt201=c(40,10,20,10),
                      omgt101=c(10,20,10,05),
                      CONDITION=c(0,1))
lm(rest201~rest101+CONDITION, data=dataset)
lm(omgt201~omgt101+CONDITION, data=dataset)

我在这里 (Making linear models in a for loop using R programming) 发现了一个与我类似的问题,但答案无效。

谢谢!

【问题讨论】:

    标签: r regression linear-regression purrr


    【解决方案1】:

    类似于@Roman 的回答,这里是如何使用来自purrrmap2

    library(purrr)
    
    y_var = c("rest201", "omgt201")
    x_var = list(c("rest101", "CONDITION"), c("omgt101", "CONDITION"))
    
    map2(x_var, y_var, ~ lm(as.formula(paste(.y, "~", paste(.x, collapse = " + "))), data = dataset))
    

    要获取每个模型的汇总表,您可以用summary 包装每个lm 并提取coefficients 表:

    map2(x_var, y_var, ~ {
      lm(as.formula(paste(.y, "~", paste(.x, collapse = " + "))), data = dataset) %>%
        summary() %>%
        `$`("coefficients")
    })
    

    结果:

    [[1]]
                Estimate Std. Error   t value   Pr(>|t|)
    (Intercept) 2.779097 0.76821670  3.617596 0.17169133
    rest101     1.377672 0.04750594 29.000000 0.02194371
    CONDITION   3.800475 0.72163694  5.266464 0.11945968
    
    [[2]]
                     Estimate Std. Error       t value  Pr(>|t|)
    (Intercept)  3.000000e+01  16.666667  1.800000e+00 0.3228289
    omgt101     -2.445145e-16   1.333333 -1.833859e-16 1.0000000
    CONDITION   -2.000000e+01  14.529663 -1.376494e+00 0.3999753
    

    【讨论】:

    • 哇@user,太棒了!非常感谢!这就是我要找的!你能告诉我如何报告每个预测变量的重要性吗?
    • 非常感谢,@user。我应该点击哪里接受你的回答?
    【解决方案2】:

    您可以为每个模型构建一个公式列表并使用它来构建模型。

    x <- c(101, 102, 103)
    mdls <- sprintf("omg4g%s ~ om4g%s + CONDITION",
            as.character(x + 100), 
            as.character(x)
    )
    
    out <- sapply(mdls, FUN = function(x) {
      formula(x, data = latino_dataset)
    })
    
    $`omg4g201 ~ om4g101 + CONDITION`
    omg4g201 ~ om4g101 + CONDITION
    <environment: 0x0000000009aff7b8>
    
    $`omg4g202 ~ om4g102 + CONDITION`
    omg4g202 ~ om4g102 + CONDITION
    <environment: 0x0000000009afda98>
    
    $`omg4g203 ~ om4g103 + CONDITION`
    omg4g203 ~ om4g103 + CONDITION
    <environment: 0x00000000099b0828>
    

    例如

    sapply(out, FUN = lm)
    

    【讨论】:

    • 非常感谢您的回复,@Roman Luštrik。我很感激!代码几乎是 100%。我将最后一句更改为: sapply(out, FUN = lm, data=latino_dataset) (因为 R 返回错误)。不幸的是,输出是这样的: sapply(out, FUN = lm, data=latino_dataset) om4g201 ~ om4g101 + CONDITION coefficients Numeric,3 你能告诉我如何显示摘要而不是这个输出。再次感谢!
    • @Luis 尝试添加sapply(..., simplify = FALSE),您应该会得到一个结果列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    • 2015-07-11
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多