以下是使用一些典型的 dplyr/purrr/tidyr/broom
习语的方法:
加载库:
library(dplyr)
library(purrr)
library(tidyr)
library(broom)
以下是数据:
dt = mtcars # already a dataframe
以下是针对列mpg
、cyl
和hp
与列disp
进行分别线性回归计算,并获取每个回归的R平方值的序列:
dt %>%
select(disp, mpg, cyl, hp) %>%
gather(key = group,
value = measurement,
-disp) %>%
group_by(group) %>%
nest() %>%
mutate(model = map(data, ~lm(disp ~ measurement, data = .))) %>%
unnest(model %>% map(glance))
以下是输出结果:
Source: local data frame [3 x 14]
group data model r.squared adj.r.squared sigma
(chr) (chr) (chr) (dbl) (dbl) (dbl)
1 mpg <tbl_df [32,2]> <S3:lm> 0.7183433 0.7089548 66.86320
2 cyl <tbl_df [32,2]> <S3:lm> 0.8136633 0.8074521 54.38465
3 hp <tbl_df [32,2]> <S3:lm> 0.6255997 0.6131197 77.08950
Variables not shown: statistic (dbl), p.value (dbl), df (int), logLik
(dbl), AIC (dbl), BIC (dbl), deviance (dbl), df.residual (int)
用通俗易懂的语言叙述这个流程:
- 我们首先取得数据框,然后
- 将其从宽格式转换为长格式以创建一个分组列,然后
- 使用每个组的一行来创建一个嵌套的数据框,接下来
- 对于每个组计算一个线性模型,最后
- 将模型的输出(包括R平方值)提取到一个数据框中。