Ggplot2: добавить p-значения в график

Я получил этот сюжет

enter image description here

Используя код ниже

library(dplyr) 
library(ggplot2)
library(ggpmisc)

df <- diamonds %>%
  dplyr::filter(cut%in%c("Fair","Ideal")) %>%
  dplyr::filter(clarity%in%c("I1" ,  "SI2" , "SI1" , "VS2" , "VS1",  "VVS2")) %>%
  dplyr::mutate(new_price = ifelse(cut == "Fair", 
                                   price* 0.5, 
                                   price * 1.1))

formula <- y ~ x    
ggplot(df, aes(x= new_price, y= carat, color = cut)) +
  geom_point(alpha = 0.3) +
  facet_wrap(~clarity, scales = "free_y") +
  geom_smooth(method = "lm", formula = formula, se = F) +
  stat_poly_eq(aes(label = paste(..rr.label..)), 
               label.x.npc = "right", label.y.npc = 0.15,
               formula = formula, parse = TRUE, size = 3)

В дополнение к R2, я хочу добавить p-значения в аспекты. Я могу сделать это вручную, запустив сначала регрессию, затем получив p-значения и используя geom_text() чтобы добавить эти p-значения, аналогичные ответу на этот вопрос.

Есть ли более быстрый или автоматизированный способ сделать это? например, аналогично тому, как были добавлены значения R2.

Обновить

Р-значение, о котором я говорю, это р-значение наклона. Тенденции считаются очень статистически значимыми, когда р <0,005.

Ответ 1

Используйте stat_fit_glance который является частью пакета ggpmisc в R. Этот пакет является расширением ggplot2 поэтому он хорошо работает с ним.

ggplot(df, aes(x= new_price, y= carat, color = cut)) +
       geom_point(alpha = 0.3) +
       facet_wrap(~clarity, scales = "free_y") +
       geom_smooth(method = "lm", formula = formula, se = F) +
       stat_poly_eq(aes(label = paste(..rr.label..)), 
       label.x.npc = "right", label.y.npc = 0.15,
       formula = formula, parse = TRUE, size = 3)+
       stat_fit_glance(method = 'lm',
                       method.args = list(formula = formula),
                       geom = 'text',
                       aes(label = paste("P-value = ", signif(..p.value.., digits = 4), sep = "")),
       label.x.npc = 'right', label.y.npc = 0.35, size = 3)

stat_fit_glance основном берет все, что пропущено через lm() в R, и позволяет обрабатывать и печатать с использованием ggplot2. В руководстве пользователя приведено краткое stat_fit_glance некоторых функций, таких как stat_fit_glance: https://cran.r-project.org/web/packages/ggpmisc/vignettes/user-guide.html. Также я считаю, что это дает p-значение модели, а не p-значение наклона (в целом), которое будет различным для множественной линейной регрессии. Для простой линейной регрессии они должны быть одинаковыми.

Вот сюжет:

enter image description here

Ответ 2

Есть ли способ связаться с вами для онлайн-репетиторства за пределами этого сайта? Я чувствую, что вы могли бы помочь мне с заданием, и я бы хорошо заплатил. Пожалуйста, дайте мне знать.