2016-02-06 176 views
2

我正在嘗試構建一個繪圖,其中繪製了x軸上的均值分佈變量以及y軸上的標準偏差(SD)。有點像密度圖,但我不想在Y軸上有密度,我想要有SD(值)。在ggplot2密度圖中說明平均值和標準偏差

我與下面的數據工作,

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

+2

你有你心目中的情節的例子嗎? (可能是圖紙)。你的情節應該傳達什麼信息? – Heroka

+0

我或多或少地想知道你看到的情節,但是我想要y軸上的標準偏差而不是密度。那有意義嗎? –

+3

對我來說並不是真的,因爲sd只有一個數字。它不隨分佈而變化(如密度一樣)。 – Heroka

回答

7

的平均值和標準偏差在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

+0

什麼是「%>%」,它不適用於我,它是某種管道?我從來沒有見過它。 –

+1

是的,它是'dplyr'軟件包中的管道運算符。請參閱[dplyr' vignette]的「管道」部分(https://cran.r-project.org/web/packages/dplyr/vignettes/dplyr.html)。 – eipi10

相關問題