运行 数据帧内组的线性模型并将输出存储在 R 中的数据帧中
Running linear models for groups within dataframe and storing outputs in dataframe in R
我正在尝试 运行 一个非常大的数据集的多个线性模型,并将输出存储在一个数据框中。我已经设法将估计值和 p 值输入到数据框中(见下文),但我还想为每个模型存储 AIC。
#example dataframe
dt = data.frame(x = rnorm(40, 5, 5),
y = rnorm(40, 3, 4),
group = rep(c("a","b"), 20))
library(dplyr)
library(broom)
# code that runs lm for each group in row z and stores output
dt_lm <- dt %>%
group_by(group) %>%
do(tidy(lm(y~x, data=.)))
使用glance
代替tidy
:
dt_lm <- dt %>%
group_by(group) %>%
do(glance(lm(y~x, data=.))) %>%
select(AIC)
给出:
Adding missing grouping variables: `group`
# A tibble: 2 x 2
# Groups: group [2]
group AIC
<chr> <dbl>
1 a 119.
2 b 114.
如果您不仅要存储 AIC,还要存储其他指标,请跳过 select
部分。
在 dplyr
的较新版本中,即 >= 1.0
,我们还可以使用 nest_by
library(dplyr)
library(tidyr)
library(broom)
dt %>%
nest_by(group) %>%
transmute(out = list(glance(lm(y ~ x, data = data)))) %>%
unnest(c(out)) %>%
select(AIC)
# A tibble: 2 x 2
# Groups: group [2]
# group AIC
# <chr> <dbl>
#1 a 115.
#2 b 100.
我正在尝试 运行 一个非常大的数据集的多个线性模型,并将输出存储在一个数据框中。我已经设法将估计值和 p 值输入到数据框中(见下文),但我还想为每个模型存储 AIC。
#example dataframe
dt = data.frame(x = rnorm(40, 5, 5),
y = rnorm(40, 3, 4),
group = rep(c("a","b"), 20))
library(dplyr)
library(broom)
# code that runs lm for each group in row z and stores output
dt_lm <- dt %>%
group_by(group) %>%
do(tidy(lm(y~x, data=.)))
使用glance
代替tidy
:
dt_lm <- dt %>%
group_by(group) %>%
do(glance(lm(y~x, data=.))) %>%
select(AIC)
给出:
Adding missing grouping variables: `group`
# A tibble: 2 x 2
# Groups: group [2]
group AIC
<chr> <dbl>
1 a 119.
2 b 114.
如果您不仅要存储 AIC,还要存储其他指标,请跳过 select
部分。
在 dplyr
的较新版本中,即 >= 1.0
,我们还可以使用 nest_by
library(dplyr)
library(tidyr)
library(broom)
dt %>%
nest_by(group) %>%
transmute(out = list(glance(lm(y ~ x, data = data)))) %>%
unnest(c(out)) %>%
select(AIC)
# A tibble: 2 x 2
# Groups: group [2]
# group AIC
# <chr> <dbl>
#1 a 115.
#2 b 100.