Я использую порядковую логит-модель с пакетом brms. Я хочу написать плотность апостериорного распределения параметров.
<model>
dfpop$pop = factor(df$pop, levels = c("extinct","<10", "<100", "<1000", ">=1000"), ordered = TRUE)
dfpop$RDB2000pop = factor(dfpop_chenv$RDB2000pop, levels = c("<10", "<100", "<1000", ">=1000"), ordered = TRUE)
bmodel<- brms::brm(pop ~ R2000pop + Temperature2003 + Population2003 + Volcanic.area + Agricultural.land2003 + RiverLake2003 + Seashore2003 + Protected.area +
(1+RDB2000pop+Temperature2003+Population2003+ Volcanic.area + Agricultural.land2003 + RiverLake2003 + Seashore2003 + Protected.area |species_id),
data = dfpop,
family = "cumulative",
prior = c(set_prior("normal(0,10)", class = "b")),
warmup = 200,
iter = 1000,
chains = 4,
save_all_pars = TRUE)
Я смог построить модель, но я могу создать только один график за раз. Следующий код попытался запустить функцию цикла, задав имена переменных. Однако я не смог нарисовать плотность в полученном результате.
<plot>
model1tranformed <- ggs(bmodel)
exvars <- rownames(summary(bmodel)$fixed)
plots <- list()
for(i in 1:length(exvars)){
p<-ggplot(filter(model1tranformed,
Parameter %in% c("exvars[i]"),
Iteration > 0),
aes(x = value))+
geom_density(fill = "darkgreen",
alpha = .5)+
geom_vline(xintercept = 0,
col = "darkred",
size = 1)+
scale_x_continuous(name = "Value",
limits = c(-10,10)) +
geom_vline(xintercept = summary(bmodel)$fixed[i,3:4],
col = "blue",
linetype = 2) +
theme_light() +
theme(text = element_text(size = 20))
labs(title = paste("pd_",exvars[i]))
plots[[i]] = p
}
library(gridExtra)
pp <- do.call("grid.arrange", c(plots, ncol=4))
ggsave(pp)
Parameter %in% c("exvars[i]")
- это гарантирует, что результат вызоваfilter
в цикле всегда будет одним и тем же. Возможно, это должно бытьParameter %in% exvars[i]
? - person MrGumble   schedule 04.08.2021do.call
выполняется,i
равенlength(exvars)
, и, следовательно, ваши графики идентичны. Измените свой циклfor
на (например)lapply
, который вызывает оценку, и все будет хорошо. На SO есть ответы на многие и многие похожие вопросы, которые иллюстрируют возможные решения. - person Limey   schedule 04.08.2021