web-dev-qa-db-ja.com

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値が追加された方法と同様です。

更新

私が話しているp値は、スロープp値です。 p <0.005の場合、傾向は統計的に非常に有意であると見なされます。

12
shiny

Rのggpmiscパッケージの一部である_stat_fit_glance_を使用します。このパッケージは_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_は基本的に、Rのlm()を介して渡されるものをすべて取り、_ggplot2_を使用して処理および印刷できるようにします。ユーザーガイドには、_stat_fit_glance_のようないくつかの関数の概要があります: https://cran.r-project.org/web/packages/ggpmisc/vignettes/user-guide.html =。また、これは勾配p値(一般)ではなく、モデルp値を与えると私は考えています。これは、多重線形回帰では異なります。ただし、単純な線形回帰の場合は同じでなければなりません。

これがプロットです:

enter image description here

16
akash87