使用ggplot2进行统计模型表示

时间:2014-09-25 00:36:38

标签: r graphics ggplot2 statistics anova

我会用一个研究案例提出我的问题,然后我会使我的问题更加笼统。


让我们先导入一些库并创建一些数据:

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)

并在y上运行x的线性回归,并使用ggplot2绘制数据和模型的图表

m1 = lm(y~x, data=dt)
ggplot(dt, aes(x,y)) + geom_point() + geom_smooth(formula = y~x, method="anova", data=dt)

enter image description here

现在我想将x变量视为名义变量。所以我稍微改变了我的数据并运行了以下模型。

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绘制此模型m2?更全面的我如何直接告诉ggplot考虑对象m2以创建模型的表示?

我打算做的是使用visreg

可以完成的事情
visreg(m2)

enter image description here

那么,ggplot有没有类似visreg的解决方案?

之类的东西
ggplot(..,aes(..)) + super_geom_smooth(model = m2)

3 个答案:

答案 0 :(得分:2)

这与@ rnso的想法没什么不同。 geom_jitter()增加了更多的味道。我也改变了中间条的颜色。希望这能帮到你!

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)))})

enter image description here

答案 1 :(得分:1)

使用boxplot后,与您想要的图表非常相似:

ggplot(dt, aes(x,y))+ geom_boxplot(aes(group=x), alpha=0.5)+ geom_jitter()

enter image description here

答案 2 :(得分:1)

仅供参考,visreg现在可以输出gg个对象:

visreg(m2, gg=TRUE)

enter image description here