我想将来自贝叶斯分析的组截距和斜率的参数估计值覆盖到实际数据的分组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)
我想也许可以通过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)
但是它只是忽略了这些参数,并重新绘制了现有参数上的各个行。
我意识到我可以计算出每个组的截距和斜率的平均值,并以某种方式将其强行施加到图中,但是我不知道如何做到这一点,而无需group
来掩盖这些小面,除了通过为平均斜率和截距创建另一个数据框并将其传递到绘图中之外。而且我不想简单地使用geom_smooth()
,因为这将使用实际数据而不是我的参数估计值。
非常感谢任何帮助