Настройка отдельных цветов на графиках rstanarm / bayesplot, а не в цветовой схеме - PullRequest
0 голосов
/ 16 июня 2020

Мне интересно, можно ли применять цвета непосредственно к параметрам из моделей rstanarm с помощью функции Bayesplot

Например, из https://mc-stan.org/bayesplot/articles/plotting-mcmc-draws.html:

library("bayesplot")
library("ggplot2")
library("rstanarm")

fit <- stan_glm(mpg ~ ., data = mtcars, seed = 1111)
posterior <- as.array(fit)

color_scheme_set("red")
mcmc_intervals(posterior, pars = c("cyl", "drat", "am", "sigma"))

возвращает:

enter image description here

В документации описаны пользовательские схемы или смешивание, но они по-прежнему применяются к каждому параметру на графике:

color_scheme_set("mix-blue-red")

plot(fit, pars = c("cyl", "drat", "am", "sigma"))

enter image description here

Функция построения графика (с моделью rstanarm) больше не принимает аргумент col, чтобы иметь возможность указывать каждую точку. Есть ли способ указать строку цветов (или схем) для каждого параметра в графике?

Изменить: на основе комментариев от @Limey вы можете изменять графики как ggobjects, но я не вижу простого способ доступа к оригинальной эстетике графика.

Например, scale_colour_manual (или любой другой scale_colour_..., если на то пошло) не изменяет нанесенные значения:

plot(fit, pars = c("cyl", "drat", "am", "sigma"))+
  scale_colour_manual(values=c("blue", "purple", "orange","red"))

(см. график выше, выглядит так же). Другой пример: я могу нанести точки поверх оригинала:

plot(fit, pars = c(names(mtcars)[-1]))+
  geom_point(aes(x=fit$coefficients[-1],y=names(fit$coefficients)[-1]),color="black")

enter image description here

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

plot(fit, pars = c(names(mtcars)[-1]))+
  geom_point(aes(x=fit$coefficients[-1],y=names(fit$coefficients)[-1]),color="pink",size=3)

enter image description here

Я мог бы сделать это и для каждого из объектов панели ошибок, но на данный момент я не совсем изменение исходного сюжета, а построение графика прямо поверх него. В этом случае имеет смысл полностью отказаться от функции построения графика rstanarm и просто сделать это вручную или создать свою собственную функцию, что нормально. Однако, если кто-нибудь знает, как напрямую изменять цвета plot(rstanarm_object), мне все равно было бы интересно это услышать.

1 Ответ

0 голосов
/ 16 июня 2020

Это не решает проблему напрямую, но все же может быть обходным путем, который можно улучшить, если не появятся другие решения.

Исходя из изменений OP через комментарии от @Limey:

Вы можете просто построить все самостоятельно из объекта модели, который приближается к нанесенным значениям. Я понимаю, что это не идеально, и, возможно, у кого-то есть предложение, как эти ценности могут полностью совпадать. rstanarm по умолчанию отображает интервалы 50% и 90% достоверные интервалы. Здесь я использую таблицы t и интервалы 50% и 90% уверенность , которые не совпадают, но они близки.

color_scheme_set("gray")

vars<-c(2,5,9,11) # select values from fit$coefficients 
                  # (this is assumed to match with names(mtcars))
                  # Note I have switched `sigma` to `carb` for ease of model retrieval

plot(fit, pars = c(names(mtcars)[vars]))+ # the original plot, now in grey

# the first error bar. With a t table, 1.645 is a 90% confidence interval,
# which isn't the same here as the 90% credible interval from rstanarm, but it 
# gets us close
  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*1.645),
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*1.645),
                     y=names(fit$coefficients)[vars]),
                 height=0,alpha=0.5,color="yellow" # transparency is so you can see grey through the yellow.. I know this isn't pretty
                     )+

  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*.675), # this is .675, which corresponds to a 50% confidence interval (again not the same as a credible interval, but it is getting us close
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*.675),
                     y=names(fit$coefficients)[vars]),
                 height=0,lwd=2,alpha=0.5,color="yellow"
                     )+
# now plot the points over the lines:
  geom_point(aes(x=fit$coefficients[vars],
y=names(fit$coefficients)[vars]),
color="yellow",size=3,alpha=0.5)

enter image description here

Это некрасиво, и это не совсем точно (вы можете увидеть немного серого по краям желтого), но это близко. Если вы можете изменить цвет каждого набора значений, вы можете чередовать цвета:

colors=c("red","blue","red","blue") # selecting colors one by one
colors=rep(c("red","blue"),2) # or just have alternating colors repeat (2 times here)

ggplot()+ # note that I have removed `rstanarm` object, which is no longer necessary
  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*1.645),
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*1.645),
                     y=names(fit$coefficients)[vars]),
                 height=0,alpha=0.5,color=colors
                     )+
  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*.675),
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*.675),
                     y=names(fit$coefficients)[vars]),
                 height=0,lwd=2,alpha=0.5,color=colors
                     )+
  geom_point(aes(x=fit$coefficients[vars],
y=names(fit$coefficients)[vars]),
color=colors,size=3,alpha=0.5)

enter image description here

или что-то совершенно дурацкое:

colors=c("red","blue","green","yellow")
colors2=rev(colors)

ggplot()+
  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*1.645),
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*1.645),
                     y=names(fit$coefficients)[vars]),
                 height=0,alpha=0.5,color=colors
                     )+
  geom_errorbarh(aes(xmin=(fit$coefficients[vars]-fit$ses[vars]*.675),
                     xmax=(fit$coefficients[vars]+fit$ses[vars]*.675),
                     y=names(fit$coefficients)[vars]),
                 height=0,lwd=2,alpha=0.5,color=colors
                     )+
  geom_point(aes(x=fit$coefficients[vars],
                 y=names(fit$coefficients)[vars]),
             color=colors2,size=3,alpha=0.5)

enter image description here

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