R 如何使用ggplot2中值的倒数来衡量stat_smooth

R 如何使用ggplot2中值的倒数来衡量stat_smooth,r,ggplot2,boxplot,smoothing,R,Ggplot2,Boxplot,Smoothing,在ggplot2中给出了这样一个箱线图示例: ggplot(diamonds, aes(carat, price)) + geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) + stat_smooth( method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5) 我得到的图像

在ggplot2中给出了这样一个箱线图示例:

ggplot(diamonds, aes(carat, price)) +
  geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) +
  stat_smooth( method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5) 
我得到的图像如下所示:

然而,stat_平滑线在很大程度上受每个克拉类别中点数的影响。我更愿意平等地对待每一个类别,在我看来,这意味着用一个特定的克拉值对每个点进行加权,用该值与总点数的倒数进行加权。(因此,在5时,点的权重为1,在1时,点的权重为1/aBigNumber。)我尝试了权重美学,但它打破了箱线图。我尝试将权重添加到平滑中,但出现了一个错误:

错误:ggplot2不知道如何处理类uneval的数据


那么,如何对平滑函数进行加权,以便对类别进行平等处理(与类别中的点数相反),并在输出中保持箱线图?

您可以这样做

library(dplyr)
diamonds2 <- diamonds %>% mutate(cutcarat=cut_width(carat, 0.25)) %>% 
                          group_by(cutcarat) %>% 
                          summarise(carat=mean(carat), price=mean(price))
ggplot() +
      geom_boxplot(data=diamonds,
                   aes(x=carat, y=price, group = cut_width(carat, 0.25)), 
                   outlier.alpha = 0.1) +
      geom_smooth(data=diamonds2, 
                   aes(x=carat, y=price), method="lm", 
                   formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", size=1.5)
库(dplyr)
钻石2%变异(切割克拉=切割宽度(克拉,0.25))%>%
组别(cutcarat)%>%
汇总(克拉=平均值(克拉),价格=平均值(价格))
ggplot()+
geom_箱线图(数据=菱形,
aes(x=克拉,y=价格,组=切割宽度(克拉,0.25)),
离群值(α=0.1)+
几何光滑(数据=直径2,
aes(x=克拉,y=价格),method=“lm”,
公式=y~多边形(x,2),n=40,se=TRUE,color=“red”,size=1.5)

正如这里所做的解释:平滑函数被拟合到具有值范围和该值范围的平均输出的矩阵上,本质上给出了一条拟合到相等加权值的曲线,因为在区间的每个点上只有一条曲线。