web-dev-qa-db-fra.com

ggplot2: ajouter des valeurs de p au tracé

J'ai ce complot

enter image description here

Utilisation du code ci-dessous

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)

En plus de R2, je veux également ajouter des valeurs de p aux facettes. Je peux le faire manuellement en exécutant d'abord la régression, puis en obtenant les valeurs de p et en utilisant geom_text() pour ajouter ces valeurs de p similaire à la réponse de cette question.

Existe-t-il un moyen plus rapide ou automatisé de le faire? par exemple. similaire à la façon dont les valeurs R2 ont été ajoutées.

Mise à jour

La valeur de p dont je parle est la valeur de p de pente . Les tendances sont considérées comme hautement statistiquement significatives lorsque p <0,005 .

12
shiny

Utilisez stat_fit_glance Qui fait partie du package ggpmisc dans R. Ce package est une extension de ggplot2 Donc il fonctionne bien avec lui.

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 Prend essentiellement tout ce qui est passé par lm() dans R et lui permet d'être traité et imprimé à l'aide de ggplot2. Le guide de l'utilisateur contient un aperçu de certaines fonctions comme stat_fit_glance: https://cran.r-project.org/web/packages/ggpmisc/vignettes/user-guide.html . Je crois également que cela donne la valeur p du modèle, pas la valeur p de la pente (en général), qui serait différente pour une régression linéaire multiple. Pour une régression linéaire simple, ils devraient cependant être les mêmes.

Voici l'intrigue:

enter image description here

16
akash87