好的,我有一个看起来有点像这样的数据框
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)
并重复所有协变量。我想找到一些更高效的东西,让我可以用一些简洁的线条来完成所有这些工作。有谁知道可以做到这一点的包吗?
答案 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))
使用tidyr
和dplyr
,首先将数据重新整形为长格式
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::do
将glm
应用于每组值和响应(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
是实际保存模型结果的变量的名称。