Добавьте p-значение в ggplot, не создавая lm-obejct отдельно - PullRequest
0 голосов
/ 07 февраля 2019

Мне нужно создать большое (более 100) количество ggplots линейных моделей.Я хотел бы добавить значение р (и, возможно, R2) для каждого графика.Я знаю, что это можно сделать, используя ggpmisc.Здесь я использую stat_fit_glance, чтобы добавить значение р.Моя «проблема» заключается в том, что оба из них требуют, чтобы я сначала запустил lm, чтобы вставить его в формула = my_lm.

Поскольку мне приходится создавать большое количество графиков, мне было интересно, есть ли способчтобы сначала не создавать объект lm, а просто рассчитать его при создании ggplot?Я могу сделать это для t-тестов на боксплотах, используя stat_compare_means, и очень надеюсь найти способ сделать это и с lm.

Мой код представлен ниже.Я хотел бы иметь возможность пропустить первую строку кода:

my_lm <- lm(y ~ x)


ggplot(data = complete, aes(x= x, y = y))+  
geom_point()+
theme_classic()+
geom_smooth(method = "lm")+
labs(x="Ellenberg F", y = "Species richness")+
stat_fit_glance(method = 'lm',
              method.args = list(data = complete, formula = my_lm),
              geom = 'text',
              aes(label = paste("p-value = ", signif(..p.value.., digits = 4), sep = "")),
              label.x = 8.5, label.y = 25, size = 3)

Я попытался просто поместить формулу = y ~ x без удачи.

1 Ответ

0 голосов
/ 08 февраля 2019

С помощью ggpmisc::stat_fit_glance: method.args = list(formula = y ~ x).
Это означает, что вам не нужно сначала запускать lm.
Можно указать только формулу для линейной модели.

set.seed(1)
n <- 100
x <- 8+rnorm(n)
y <- 11+x+2*rnorm(n)
complete <- data.frame(x, y)

summary(lm(y~x))
ggplot(data = complete, aes(x= x, y = y))+  
geom_point()+
theme_classic()+
geom_smooth(method = "lm")+
labs(x="Ellenberg F", y = "Species richness")+
stat_fit_glance(method = 'lm',
       method.args = list(formula = y ~ x),  geom = 'text', 
       aes(label = paste("p-value=", signif(..p.value.., digits = 4), 
                      "   R-squared=", signif(..r.squared.., digits = 3), sep = "")),
       label.x = 8.5, label.y = 25, size = 5)

enter image description here

...