如何在两个变量的组合上运行模型,并使用tidyverse为每个模型返回一个p值和r-square的数据帧

zes*_*sla 1 r dplyr purrr tidyverse

我正在尝试在不同的变量组合上运行模型.我希望有一个包含3列的数据框:每个模型的变量,p值和r-square.我正在使用mtcars数据集作为示例.这是我的代码:

c('wt', 'hp', 'qsec') %>% 
    combn(2, paste, collapse='*') %>% 
    structure(., names=.) %>% 
    map(~formula(paste('mpg~', .x))) %>% 
    map(lm, data=mtcars) %>%
    map(~coef(summary(.x))[4,4]) %>% 
    unlist() %>% 
    data.frame(p.value=.) %>% 
    rownames_to_column(var='interaction')
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

interaction      p.value
1       wt*hp 0.0008108307
2     wt*qsec 0.2652596233
3     hp*qsec 0.0001411028  
Run Code Online (Sandbox Code Playgroud)

问题是如何在从每个模型中提取r-square后向数据框添加另一列?我想在上面的链接操作中实现这一点.由于我希望将方法推广到其他类型的模型,所以我想在不使用扫帚包的情况下这样做.感谢它,如果有人可以帮助我.非常感谢.

mt1*_*022 5

我会尝试以下

library(tidyverse)

reg.vars <- c('wt', 'hp', 'qsec')

tibble(interaction = combn(reg.vars, 2, paste, collapse = '*')) %>%
    mutate(fit = map(interaction, ~ summary(lm(paste('mpg ~', .), data = mtcars))),
           pval = map_dbl(fit, ~ coef(.)[4, 4]),
           rsq = map_dbl(fit, ~ .$r.squared)) %>%
    select(-fit)
# # A tibble: 3 x 3
#   interaction         pval       rsq
#         <chr>        <dbl>     <dbl>
# 1       wt*hp 0.0008108307 0.8847637
# 2     wt*qsec 0.2652596233 0.8340742
# 3     hp*qsec 0.0001411028 0.7854734
Run Code Online (Sandbox Code Playgroud)