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

R 使用汇总方法从geom_abline()获取平均截距和斜率,r,ggplot2,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

我想将贝叶斯分析中的组截距和斜率的参数估计叠加到实际数据的分组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))

我想也许我可以通过
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()
,因为这将使用实际数据,而不是我的参数估计


任何备受赞赏的帮助

看起来都不像是一个统计参数,但你可能可以用另一种方式使用
+stat\u summary(…,geom=“abline”)
谢谢@Gregor,但是
ggplot(df,aes(x,y,color=group))+geom\u abline(data=parsDF,aes(intercept=int,slope=slope),color=“gray75”)+stat_summary(data=parsDF,aes(intercept=int,slope=slope),geom=“abline”,fun.y=“mean”,color=“black”,linetype=“domind”)+geom_point()+facet_wrap(~group)
返回错误消息
美学长度必须为1或与数据相同(30):intercept,slope,x,y
是的,我猜
stat\u summary
非常注重
y
美学,您需要
int
slop
。我猜您只需要将数据汇总到一个单独的数据框中。哦,没关系,这不是一个很大的麻烦;geom_abline(data=parsDF%%>%group_by(group)%%>%summary_at(vars(int,slope),mean),aes(intercept=int,slope=slope,color=group),show.legend=F)看起来不像
geom_abline
使用stat参数,但您可能可以使用
+stat_summary(…,geom=“abline”)使用另一种方法
谢谢@Gregor,但
ggplot(df,aes(x,y,color=group))+geom\u-abline(data=parsDF,aes(intercept=int,slope=slope),color=“gray75”)+stat\u summary(data=parsDF,aes(intercept=int,slope=slope),geom=“abline”,fun.y=“mean”,color=“black”,linetype=“dopped”)+geom\u点()+facet_wrap(~group)
返回了一条错误消息
美学必须是长度1或与数据(30)相同:截距、斜率、x、y
是的,我想
统计摘要
非常关注
y
美学,您需要
int
slop
。我猜您只需要将数据汇总到一个单独的数据框中。哦,没关系,这不是一个很大的麻烦;几何曲线(数据=parsDF%>%group by(group)%>%SUMMARY(变量(整数,斜率),平均值),aes(截距=整数,斜率=斜率,颜色=group),show.LENGD=F)
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)