2 votes

<tr><td>geom_abline pentes et intercepts multiples</td></tr>

En tenant compte de ce tableau de données initial (yld_sum) :

  coef     pred      se    ci.lb    ci.ub    cr.lb    cr.ub Yld_class
   b0 3164.226 114.256 2940.289 3388.164 2142.724 4185.728      1Low
   b1  -20.698   3.511  -27.580  -13.816  -50.520    9.124      1Low
   b0 3985.287 133.220 3724.180 4246.394 2954.998 5015.576      2Low
   b1  -14.371   4.185  -22.573   -6.168  -44.525   15.784      2Low

Comment puis-je simplifier ma syntaxe pour tracer les deux lignes de régression estimées avec leurs IC respectifs, et obtenir le graphique suivant ?

enter image description here

Voici mon code verbeux :

library(tidyverse)

yld_sum_est <- yld_sum %>% select(Yld_class, coef, pred) %>% 
  spread(coef, pred)  

yld_sum_low <- yld_sum %>% select(Yld_class, coef, ci.lb) %>% 
  spread(coef, ci.lb)

yld_sum_up <- yld_sum %>% select(Yld_class, coef, ci.ub) %>% 
  spread(coef, ci.ub)

ggplot() + 
  geom_abline(data = yld_sum_est, aes(intercept = b0, slope = b1)) +
  geom_abline(data = yld_sum_low, aes(intercept = b0, slope = b1), linetype= "dashed") +
  geom_abline(data = yld_sum_up, aes(intercept = b0, slope = b1), linetype= "dashed") +
  scale_x_continuous(limits=c(0,60), name="x") +
  scale_y_continuous(limits=c(1000, 4200), name="y")

2voto

liborm Points 58

C'est un problème de 'forme de données'. Si vous voulez que ggplot dessine plusieurs objets en un seul appel, les paramètres de l'objet (comme intercept et slope) doivent être les colonnes de votre data frame et les instances de l'objet doivent être les lignes au moment où les données entrent dans ggplot.

Particulièrement dans votre cas, vous avez besoin d'un data frame avec 6 lignes - une pour chaque ligne, contenant chacune l'identité de la ligne et ses paramètres, comme ceci :

library(tidyverse)

# Le bloc de données de la question est dans le presse-papiers
read.table("clipboard", header = T) -> yld_sum

yld_sum %>%
  select(-starts_with("cr"), -se) %>%
  gather(metric, value, -coef, -Yld_class) %>%
  spread(coef, value) %>% 
  ggplot() +
  geom_abline(aes(
    intercept = b0, 
    slope = b1,
    linetype = if_else(metric == "pred", "", "dashed")),
    ) +
  scale_x_continuous(limits=c(0,60), name="x") +
  scale_y_continuous(limits=c(1000, 4200), name="y") +
  guides(linetype = F)

N'hésitez pas à explorer le processus de transformation des données en plaçant l'appel à View de RStudio après chaque étape successive (comme %>% View).

La forme finale des données, à titre d'illustration (après l'appel à spread()) :

  Yld_class metric       b0      b1
1      1Low  ci.lb 2940.289 -27.580
2      1Low  ci.ub 3388.164 -13.816
3      1Low   pred 3164.226 -20.698
4      2Low  ci.lb 3724.180 -22.573
5      2Low  ci.ub 4246.394  -6.168
6      2Low   pred 3985.287 -14.371

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X