如何通过dotplot或ggplot2中随机效应(不是截距)的值对随机效果进行排序

时间:2015-12-06 17:45:51

标签: r ggplot2 lattice lme4

我怀疑这个问题的答案很简单,我只是不知道它是什么。

长话短说,我想从我估计的模型中显示随机截距和斜率的点图。我正在使用有助于hereApache函数。但是,此函数以及格子中的标准ggCaterpillar,通过降低随机截距的顺序对随后的图形进行排序。我想通过增加随机效应的值(字母或数字)对图表进行排序。

考虑dotplot包中标准的最小工作示例以及lme4函数。

ggCaterpillar

我得到的图表看起来像这样。

Sample graph

如何订购图表以便通过增加随机效应的值来排序图表(例如,在sleepstudy案例中为308,309,310 ......)?

1 个答案:

答案 0 :(得分:3)

在创建class MainActivity : Activity() { public override fun onCreate(savedInstanceState: Bundle?) { ... text_view.setOnClickListener{ v -> this.doActivityStuff() } ... fun doActivityStuff() { // do some stuff } text_view.setOnClickListener(object : View.OnClickListener { override fun onClick(v: View?) { this.onClick(v) // this refer to onClickListener this@MainActivity.doActivityStuff() // this refer to MainActivity } }) } ord的函数部分中,行按拦截的大小重新排序。我们可以将该部分设置为可选,如下面的更新函数所示:

pDf

如果我们现在用require(ggplot2) ggCaterpillar <- function(re, QQ=TRUE, likeDotplot=TRUE, reorder=TRUE) { require(ggplot2) f <- function(x) { pv <- attr(x, "postVar") cols <- 1:(dim(pv)[1]) se <- unlist(lapply(cols, function(i) sqrt(pv[i, i, ]))) if (reorder) { ord <- unlist(lapply(x, order)) + rep((0:(ncol(x) - 1)) * nrow(x), each=nrow(x)) pDf <- data.frame(y=unlist(x)[ord], ci=1.96*se[ord], nQQ=rep(qnorm(ppoints(nrow(x))), ncol(x)), ID=factor(rep(rownames(x), ncol(x))[ord], levels=rownames(x)[ord]), ind=gl(ncol(x), nrow(x), labels=names(x))) } else { pDf <- data.frame(y=unlist(x), ci=1.96*se, nQQ=rep(qnorm(ppoints(nrow(x))), ncol(x)), ID=factor(rep(rownames(x), ncol(x)), levels=rownames(x)), ind=gl(ncol(x), nrow(x), labels=names(x))) } if(QQ) { ## normal QQ-plot p <- ggplot(pDf, aes(nQQ, y)) p <- p + facet_wrap(~ ind, scales="free") p <- p + xlab("Standard normal quantiles") + ylab("Random effect quantiles") } else { ## caterpillar dotplot p <- ggplot(pDf, aes(ID, y)) + coord_flip() if(likeDotplot) { ## imitate dotplot() -> same scales for random effects p <- p + facet_wrap(~ ind) } else { ## different scales for random effects p <- p + facet_grid(ind ~ ., scales="free_y") } p <- p + xlab("Levels") + ylab("Random effects") } p <- p + theme(legend.position="none") p <- p + geom_hline(yintercept=0) p <- p + geom_errorbar(aes(ymin=y-ci, ymax=y+ci), width=0, colour="black") p <- p + geom_point(aes(size=1.2), colour="blue") return(p) } lapply(re, f) } 调用函数,我们得到行的原始顺序:

reorder = FALSE

here

如果您愿意,可以在绘图之前对行重新排序,例如颠倒顺序:

ggCaterpillar(ranef(fit,condVar=TRUE), QQ=FALSE, likeDotplot=TRUE, reorder=FALSE)[["Subject"]]

enter image description here