Statistical Model Representation with ggplot2
我会用一个研究案例来问我的问题,然后我会让我的问题更笼统。
让我们先导入一些库并创建一些数据:
1 2 3 4 5 | require(visreg) require(ggplot2) y = c(rnorm(40,10,1), rnorm(20,11,1), rnorm(5,12,1)) x=c(rep(1,40), rep(2,20), rep(3,5)) dt=data.frame(x=x, y=y) |
并在
绘制数据和模型
1 2 | m1 = lm(y~x, data=dt) ggplot(dt, aes(x,y)) + geom_point() + geom_smooth(formula = y~x, method="anova", data=dt) |
现在我想将我的
1 2 3 4 | y = c(rnorm(40,10,1), rnorm(20,11,1), rnorm(5,12,1)) x=factor(c(rep(1,40), rep(2,20), rep(3,5))) # this line has changed! dt=data.frame(x=x, y=y) m2 = lm(y~x, data=dt) |
如何用 ggplot2 绘制这个模型
我的目标是使用
可以完成的事情
1 | visreg(m2) |
那么,ggplot 有没有类似 visreg 的解决方案?类似
1 | ggplot(..,aes(..)) + super_geom_smooth(model = m2) |
这与@rnso 的想法没有太大区别。
1 2 3 4 5 6 | ggplot(data = m2$model, aes(x = x, y = y)) + geom_boxplot(fill ="gray90") + geom_jitter() + theme_bw() + stat_summary(geom ="crossbar", width = 0.65, fatten = 0, color ="blue", fun.data = function(x){return(c(y=median(x), ymin=median(x), ymax=median(x)))}) |
仅供参考,
1 | visreg(m2, gg=TRUE) |
以下使用箱线图与您想要的图表非常相似:
1 | ggplot(dt, aes(x,y))+ geom_boxplot(aes(group=x), alpha=0.5)+ geom_jitter() |