Построение коэффициентов регрессии смешанных моделей в R
Я с трудом пытаюсь создать сетку с графиком из четырех коэффициентов из четырех не вложенных линейных моделей случайных эффектов, используя sj.plot
пакет. Я не женат на этом пакете, поэтому не стесняйтесь предлагать другие маршруты (ggplot2
решения лучше, чем coefplot2::coefplot2
).
Желаемый результат: сетка с графиками четырех коэффициентов рядом друг с другом.
Воспроизведение моделей:
data("sleepstudy")
sleepstudy$var2 <- rnorm(n=nrow(sleepstudy), mean=0, sd=1)
sleepstudy$var3 <- rnorm(n=nrow(sleepstudy), mean=10, sd=5)
M1 <- lmer(Reaction ~ Days + (1|Subject), data=sleepstudy, REML = FALSE)
M2 <- lmer(Reaction ~ Days + var2 + (1|Subject), data=sleepstudy, REML = FALSE)
M3 <- lmer(Reaction ~ Days + var3 + (1|Subject), data=sleepstudy, REML = FALSE)
M4 <- lmer(Reaction ~ Days + var2 + var3 + (1|Subject), data=sleepstudy, REML = FALSE)
Воспроизведение проблем. Попытка № 1 (sjp.lmm
)
> sjp.lmm(M1, M2, M3, M4)
Computing p-values via Kenward-Roger approximation. Use `p.kr = FALSE` if computation takes too long.
Computing p-values via Kenward-Roger approximation. Use `p.kr = FALSE` if computation takes too long.
Error in data.frame(betas, p = ps, pa = palpha, shape = pointshapes, grp = fitcnt, :
arguments imply differing number of rows: 3, 2, 1
Воспроизведение проблем. Попытка № 2 (sjp.lmer
+ plot_grid
)
plot.1 <- sjp.lmer(fit=M1,type="fe.std",
p.kr=FALSE,
sort.est = "sort.all",
y.offset = 0.4,
fade.ns = TRUE,
facet.grid = T)
plot.2 <- sjp.lmer(fit=M2,type="fe.std",
p.kr=FALSE,
sort.est = "sort.all",
y.offset = 0.4,
fade.ns = TRUE,
facet.grid = T)
plot.3 <- sjp.lmer(fit=M3,type="fe.std",
p.kr=FALSE,
sort.est = "sort.all",
y.offset = 0.4,
fade.ns = TRUE,
facet.grid = T)
plot.4 <- sjp.lmer(fit=M4,type="fe.std",
p.kr=FALSE,
sort.est = "sort.all",
y.offset = 0.4,
fade.ns = TRUE,
facet.grid = T)
plot_grid(list(plot.1,plot.2,plot.3,plot.4))
> plot_grid(list(plot.1,plot.2,plot.3,plot.4))
Error in gList(list(wrapvp = list(x = 0.5, y = 0.5, width = 1, height = 1, :
only 'grobs' allowed in "gList"
Есть ли способ получить этот сюжет? Версии: [6] sjPlot_2.1.1
, ggplot2_2.1.0
, lme4_1.1-12
, sjmisc_2.0.1
, gridExtra_2.2.1
, dplyr_0.5.0
,
2 ответа
Возвращаемые значения функций sjPlot возвращают как фрейм данных, так и объект plot, поэтому вам необходимо получить доступ к объекту plot в аргументах:
plot_grid(list(plot.1$plot, plot.2$plot, plot.3$plot, plot.4$plot))
Изменить: Я видел, что вы нашли ошибку в sjp.lmm()
функция и может это исправить. Если вы загрузите последний снимок с GitHub ( https://github.com/sjPlot/devel), это будет работать:
sjp.lmm(M1, M2, M3, M4)
Я ничего об этом не знаю sjPlot
класс, но, похоже, он связывает кучу вещей в сюжет в списке. plot_grid
, grid.arrange
и тому подобное не знают, как справиться с дополнительными вещами, но они могут справиться с ggplot
часть, которая называется plot
:
plot_grid(lapply(list(plot.1,plot.2,plot.3,plot.4), "[[", "plot"))
Я немного удивлен, потому что кажется, что, по крайней мере, некоторая информация в комплекте является дублирующей. Например, plot.1$data
имеет небольшой фрейм данных, который кажется копией (или подмножеством?) данных, которые уже связаны с графиком, plot.1$plot$data
, Может быть, все по-другому, и для более сложных случаев есть веская причина.