gpt4 book ai didi

r - 在 ggplot2 密度图中说明均值和标准差

转载 作者:行者123 更新时间:2023-12-02 06:54:09 27 4
gpt4 key购买 nike

我正在尝试构建一个绘图,在其中绘制正态分布的变量,在 x 轴上显示它们的平均值,在 y 轴上显示标准偏差 (SD)。有点像密度图,但我不希望在 y 轴上显示密度,而是使用 SD(值)。

我正在处理以下数据,

set.seed(1)
mu1 <- rnorm(10^5, mean = 1, sd = 1)
mu3 <- rnorm(10^5, mean = 3, sd = 2)

两个正态分布的变量。这里是他们的均值和标准差,

# install.packages("tidyverse", dependencies = TRUE)
require(tidyverse)
tibble(mu1, mu3) %>% summarise_all(funs(mean, sd))
#> # A tibble: 1 x 4
#> mu1_mean mu3_mean mu1_sd mu3_sd
#> <dbl> <dbl> <dbl> <dbl>
#> 1 0.9993454 3.000825 0.9982848 1.998234

我玩过 , 和其他 包,以更接近我想要的东西。我也试过复制 this function从箱线图中做类似的事情,已经成功了。

这是我的开始,

tibble(mu1, mu3) %>% gather() %>% ggplot() + 
geom_density(aes(x = value, colour = key)) +
labs(x = 'mean', y = 'currently density, but I would like sd')

plot

最佳答案

均值和标准差是在 x 轴上测量的,因此您需要沿 x 轴绘制它们。 y 轴是给定 x 区间内点的密度,类似于直方图中条形的高度。

也许这会给您带来您正在寻找的东西:下面的代码添加了一条跨越每个密度图的标准差的水平线,以及标记它们在 x 轴上的位置的垂直线。 sd 线位于 y 值处,其中分布宽度等于标准差。如果您愿意,您可以另外(或代替)填充标准偏差跨越的区域。

library(dplyr)

# Densities
n = 2^10
df = data.frame(x = c(density(foo,n=n)$x, density(bar,n=n)$x),
y = c(density(foo,n=n)$y, density(bar,n=n)$y),
group=rep(c("foo","bar"), each=n))

## Mean and SD
msd = melt(data.frame(foo=foo, bar=bar)) %>%
group_by(group=variable) %>% summarise(mean=mean(value), sd=sd(value))

# Find y value (of density) where sd has same width as density
msd$y = unlist(lapply(unique(df$group), function(g) {
d = df[df$group==g,]
d$y[which.min(abs(d$x - (msd$mean[msd$group==g] - msd$sd[msd$group==g])))]
}))

ggplot(df, aes(x=x, y=y, colour=group)) +
geom_line() + labs(x = NULL) +
geom_segment(data=msd, aes(y=y,yend=y, x=mean - sd, xend=mean + sd), lty="21") +
geom_point(data=msd, aes(y=y, x=mean)) +
geom_segment(data=msd, aes(x=mean-sd, xend=mean-sd, y=0, yend=y), alpha=0.5, lty="21") +
geom_segment(data=msd, aes(x=mean+sd, xend=mean+sd, y=0, yend=y), alpha=0.5, lty="21")

enter image description here

关于r - 在 ggplot2 密度图中说明均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35242947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com