Как построить доверительные интервалы glht () с помощью ggplot ()? - PullRequest
0 голосов
/ 07 мая 2018

Используя glht() из пакета multcomp, можно рассчитать доверительные интервалы различных обработок, например так ( source ):

Simultaneous Confidence Intervals

Multiple Comparisons of Means: Tukey Contrasts

Fit: lm(formula = Years ~ Attr, data = MockJury)

Quantile = 2.3749

95% family-wise confidence level
Linear Hypotheses:
                                Estimate  lwr       upr
Average - Beautiful ==      0   -0.3596   -2.2968   1.5775
Unattractive - Beautiful == 0    1.4775   -0.4729   3.4278
Unattractive - Average ==   0    1.8371   -0.1257   3.7999

Эти интервалы можно затем визуализировать с помощью plot(): Confidence interval plot

Можно ли построить эти интервалы, используя ggplot() (для согласованности и эстетики)? Если да, то как?

Если нет, есть ли обходной путь, чтобы выходные данные напоминали диаграмму ggplot()?

1 Ответ

0 голосов
/ 08 мая 2018

Если вы преобразуете вывод confint во фрейм данных, вы можете напрямую отобразить вывод в ggplot2. Вот подход (использующий пример glht из файла справки), который использует функцию tidy из broom для преобразования вывода confint() во фрейм данных, подходящий для построения графика:

library(multcomp)
library(tidyverse)
library(broom)

lmod <- lm(Fertility ~ ., data = swiss)

m = glht(lmod, linfct = c("Agriculture = 0",
                          "Examination = 0",
                          "Education = 0",
                          "Catholic = 0",
                          "Infant.Mortality = 0"))

confint(m) %>% 
  tidy %>% 
  ggplot(aes(lhs, y=estimate, ymin=conf.low, ymax=conf.high)) +
    geom_hline(yintercept=0, linetype="11", colour="grey60") +
    geom_errorbar(width=0.1) + 
    geom_point() +
    coord_flip() +
    theme_classic()

enter image description here

ОБНОВЛЕНИЕ: В ответ на комментарий ...

Кривые концы для доверительных интервалов

Я не уверен, что можно легко добавить изогнутые концы к панелям ошибок, так как вы можете приблизиться, используя geom_segment и стрелки с небольшим углом стрелки.

confint(m) %>% 
  tidy %>% 
  ggplot(aes(x=lhs, y=estimate)) +
  geom_hline(yintercept=0, linetype="11", colour="grey60") +
  geom_segment(aes(xend=lhs, y=conf.low, yend=conf.high), size=0.4, 
               arrow=arrow(ends="both", length=unit(0.05, "inches"), angle=70)) + 
  geom_point() +
  coord_flip() +
  theme_classic()

enter image description here

lhs заказ

С точки зрения упорядочения, lhs будет упорядочено в алфавитном порядке, если оно не преобразовано в коэффициент с определенным порядком. Например, ниже мы упорядочиваем по значению estimate.

confint(m) %>% 
  tidy %>% 
  arrange(estimate) %>% 
  mutate(lhs = factor(lhs, levels=unique(lhs))) %>%   # unique() returns values in the order they first appear in the data
  ggplot(aes(x=lhs, y=estimate)) +
  geom_hline(yintercept=0, linetype="11", colour="grey60") +
  geom_segment(aes(xend=lhs, y=conf.low, yend=conf.high), size=0.4, 
               arrow=arrow(ends="both", length=unit(0.05, "inches"), angle=70)) + 
  geom_point() +
  coord_flip() +
  theme_classic()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...