Извлечение статистики LM в таблицу

#r #tidyverse #linear-regression

#r #tidyverse #линейная регрессия

Вопрос:

Я создал график, который отображается r2 , p-value и equation из линейных регрессий в верхнем левом углу с использованием stat_poly_eq .

Теперь я хочу, чтобы статистика из линейной регрессии была извлечена в таблицу.

Например, в mtcars наборе данных, если я хочу выполнить линейную регрессию на графиках hp против disp для cyl каждой группы индексов (например, 4, 6, 8), а затем извлечь статистику линейной регрессии в таблицу, как я могу это сделать?

Спасибо!

Вот график, который у меня есть:

 library(ggplot2)
library(ggpmisc)

formula <- y~x

ggplot(mtcars, aes(disp, hp))  
 geom_point()  
 geom_smooth(method = "lm",formula = formula)  
 theme_bw() 
 facet_wrap(~cyl, scales = "free") 
 stat_poly_eq(
  aes(label = paste(stat(adj.rr.label), stat(eq.label), stat(p.value.label), sep = "*", "*")),
  formula = formula, parse = TRUE, size=3)
  

введите описание изображения здесь

Ответ №1:

Вы имеете в виду что-то подобное?

  • С nest_by помощью разделите остальные столбцы на отдельные фрагменты на каждый cyl
  • С summarise помощью вычислите каждый lm . Вам нужно установить его в список.
  • Работайте как обычный список map и вычисляйте нужные вам данные: коэффициенты (извлекаемые с broom::tidy помощью) и прил.r.в квадрате (с summary(.)$adj.r.squared помощью)
  • unnest результат broom::tidy для создания уникального tibble.
 library(dplyr)
library(tidyr)
library(purrr)

mtcars %>%
 nest_by(cyl) %>% 
 summarise(mdl = list(lm(hp ~ disp, data)), .groups = "drop") %>% 
 mutate(adjrsquared = map_dbl(mdl, ~summary(.)$adj.r.squared ),
        mdl = map(mdl, broom::tidy)) %>% 
 unnest(mdl)

#> # A tibble: 6 x 7
#>     cyl term        estimate std.error statistic p.value adjrsquared
#>   <dbl> <chr>          <dbl>     <dbl>     <dbl>   <dbl>       <dbl>
#> 1     4 (Intercept)  47.0       25.3       1.86  0.0960       0.0988
#> 2     4 disp          0.339      0.234     1.45  0.182        0.0988
#> 3     6 (Intercept) 177.        42.0       4.22  0.00829      0.117 
#> 4     6 disp         -0.300      0.224    -1.34  0.238        0.117 
#> 5     8 (Intercept) 178.        77.4       2.30  0.0405      -0.0682
#> 6     8 disp          0.0890     0.216     0.413 0.687       -0.0682
  

Комментарии:

1. Я добавил adj.r.squared