有效地运行许多简单的LM回归

时间:2018-03-06 14:42:58

标签: r dplyr regression

好的,我有一个看起来有点像这样的数据框

A B C D E F G F H

0 1 1 1 1 1 0 1 3

1 0 1 0 1 0 1 2 2

A是我的响应变量。现在我可以像这样运行一堆Lm回归。

lm.b< - glm(A~B,数据= d,家庭=二项式(link =' logit')

摘要(lm.b)

confint(lm.b)

并重复所有协变量。我想找到一些更高效的东西,让我可以用一些简洁的线条来完成所有这些工作。有谁知道可以做到这一点的包吗?

2 个答案:

答案 0 :(得分:1)

(我假设您的重复F行是一个单独的变量)

library(tidyr)
library(dplyr)
df <- data.frame(A = c(0, 1), B = c(1, 0), C = c(1, 1), D = c(1, 0), E = c(1, 1), F = c(1, 0), G = c(0, 1), F2 = c(1, 2), H = c(3, 2))

使用tidyrdplyr,首先将数据重新整形为长格式

df_long <- df %>%
  gather(Variable, Value, B:H) %>%
  group_by(Variable)

# A tibble: 16 x 3
# Groups:   Variable [8]
       A Variable Value
   <dbl> <chr>    <dbl>
 1  0    B         1.00
 2  1.00 B         0
 3  0    C         1.00
 4  1.00 C         1.00
 5  0    D         1.00
 6  1.00 D         0
 7  0    E         1.00
 8  1.00 E         1.00
 9  0    F         1.00
10  1.00 F         0
11  0    G         0
12  1.00 G         1.00
13  0    F2        1.00
14  1.00 F2        2.00
15  0    H         3.00
16  1.00 H         2.00

然后使用dplyr::doglm应用于每组值和响应(A),按变量分组(B:H

lms <- df_long %>% do(lm = glm(A ~ Value, data = ., family = binomial(link = 'logit')))

Source: local data frame [8 x 2]
Groups: <by row>
# A tibble: 8 x 2
  Variable lm
* <chr>    <list>
1 B        <S3: glm>
2 C        <S3: glm>
3 D        <S3: glm>
4 E        <S3: glm>
5 F        <S3: glm>
6 F2       <S3: glm>
7 G        <S3: glm>
8 H        <S3: glm>

如果您希望在列表中按变量名访问每个lm,请尝试

lms_list <- setNames(lms$lm, lms$Variable)
# Now use `lms_list$B`, etc

答案 1 :(得分:1)

只是要添加到jayelm的答案中,您可以使用精彩的broom包来进一步使用生成的数据集。

library(broom)

您可以查看所有个人回归:

tidy(lms, lm)
# A tibble: 14 x 6
# Groups:   Variable [8]
   Variable term                       estimate std.error             statistic p.value
   <chr>    <chr>                         <dbl>     <dbl>                 <dbl>   <dbl>
 1 B        (Intercept)   23.6                   79462     0.000297               1.000
 2 B        Value       - 47.1                  112376    -0.000419               1.000
 3 C        (Intercept)    0.000000000000000471      1.41  0.000000000000000333   1.000
 4 D        (Intercept)   23.6                   79462     0.000297               1.000
 5 D        Value       - 47.1                  112376    -0.000419               1.000
 6 E        (Intercept)    0.000000000000000471      1.41  0.000000000000000333   1.000
 7 F        (Intercept)   23.6                   79462     0.000297               1.000
 8 F        Value       - 47.1                  112376    -0.000419               1.000
 9 F2       (Intercept) - 70.7                  177682    -0.000398               1.000
10 F2       Value         47.1                  112376     0.000419               1.000
11 G        (Intercept) - 23.6                   79462    -0.000297               1.000
12 G        Value         47.1                  112376     0.000419               1.000
13 H        (Intercept)  118                    286504     0.000411               1.000
14 H        Value       - 47.1                  112376    -0.000419               1.000

获取每个模型的摘要:

glance(lms, lm)

# A tibble: 8 x 8
# Groups:   Variable [8]
  Variable null.deviance df.null          logLik   AIC   BIC       deviance df.residual
  <chr>            <dbl>   <int>           <dbl> <dbl> <dbl>          <dbl>       <int>
1 B                 2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0
2 C                 2.77       1 -1.39            4.77  3.47 2.77                     1
3 D                 2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0
4 E                 2.77       1 -1.39            4.77  3.47 2.77                     1
5 F                 2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0
6 F2                2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0
7 G                 2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0
8 H                 2.77       1 -0.000000000117  4.00  1.39 0.000000000233           0

获得预测,残差等:

head(augment(lms, lm))

# A tibble: 6 x 10
# Groups:   Variable [3]
  Variable     A Value                .fitted  .se.fit .resid  .hat .sigma .cooksd .std.resid
  <chr>    <dbl> <dbl>                  <dbl>    <dbl>  <dbl> <dbl>  <dbl>   <dbl>      <dbl>
1 B         0     1.00 -23.6                  79462      0    1.00       0   NA         NA   
2 B         1.00  0     23.6                  79462      0    1.00       0   NA         NA   
3 C         0     1.00   0.000000000000000471     1.41  -1.18 0.500    NaN    2.00     - 1.67
4 C         1.00  1.00   0.000000000000000471     1.41   1.18 0.500    Inf    2.00       1.67
5 D         0     1.00 -23.6                  79462      0    1.00       0   NA         NA   
6 D         1.00  0     23.6                  79462      0    1.00       0   NA         NA  

请注意,lms是使用do()语法创建的tibble的名称,而lm是实际保存模型结果的变量的名称。