#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