使用汇总方法从geom_abline()获得平均截距和斜率

时间:2019-07-02 00:59:32

标签: r ggplot2

我想将来自贝叶斯分析的组截距和斜率的参数估计值覆盖到实际数据的分组ggplot散点图上。我可以很好地覆盖各个行,但我也很想为每个组都获得一条平均行。

这是一些玩具数据。三组截距和坡度不同

# data 
x <- rnorm(120, 0, 1)
y <- c(20 + 3*x[1:40] + rnorm(40,0.01), rnorm(40,0.01), 10 + -3*x[81:120] + rnorm(40,0.01))
group = factor(rep(letters[1:3], each = 40))

df <- data.frame(group,x,y)

# fake parameter estimates of intercept and slope
parsDF <- data.frame(int = c(rnorm(10,20,.5), rnorm(10,0,.5), rnorm(10,10,.5)),
                     slope = c(rnorm(10,3,.3), rnorm(10,0,.3), rnorm(10,-3,.3)),
                     group = rep(letters[1:3], each = 10))

现在该情节

ggplot(df, aes(x,y, colour = group)) +
       geom_abline(data = parsDF, aes(intercept = int, slope = slope), colour = "gray75") + 
       geom_point() +
       facet_wrap(~group)

enter image description here

我想也许可以通过stat.summary型方法为每个组添加一个单个平均截距和斜线,

ggplot(df, aes(x,y, colour = group)) +
       geom_abline(data = parsDF, aes(intercept = int, slope = slope), colour = "gray75") + 
       geom_abline(data = parsDF, aes(intercept = int, slope = slope), stat = "summary", fun.y = "mean", colour = "black", linetype = "dotted") + 
       geom_point() +
       facet_wrap(~group)

但是它只是忽略了这些参数,并重新绘制了现有参数上的各个行。

enter image description here

我意识到我可以计算出每个组的截距和斜率的平均值,并以某种方式将其强行施加到图中,但是我不知道如何做到这一点,而无需group来掩盖这些小面,除了通过为平均斜率和截距创建另一个数据框并将其传递到绘图中之外。而且我不想简单地使用geom_smooth(),因为这将使用实际数据而不是我的参数估计值。

非常感谢任何帮助

0 个答案:

没有答案