在 R 中绘制混合模型的回归系数
Plotting mixed models' regression coefficients in 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
。
我对此一无所知 sjPlot
class,但它看起来像是将一堆东西捆绑到列表中的情节中。 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
。也许它更不同,并且在更复杂的情况下有充分的理由。
sjPlot 函数的 return 值 return 既是数据框又是绘图对象,因此您必须在参数中访问绘图对象:
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)
我很难尝试使用 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
。
我对此一无所知 sjPlot
class,但它看起来像是将一堆东西捆绑到列表中的情节中。 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
。也许它更不同,并且在更复杂的情况下有充分的理由。
sjPlot 函数的 return 值 return 既是数据框又是绘图对象,因此您必须在参数中访问绘图对象:
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)