2017-11-26 26 views
1

ggplot2で、面取り密度プロットの最高(後)濃度間隔を示す水平線を描画するにはどうすればよいですか?これは、私が試したものです:私はファセットを尊重することを希望に対しgeom_densityで描画間隔を指定する

# Functions to calculate lower and upper part of HPD. 
hpd_lower = function(x) coda::HPDinterval(as.mcmc(x))[1] 
hpd_upper = function(x) coda::HPDinterval(as.mcmc(x))[2] 

# Data: two groups with different means 
df = data.frame(value=c(rnorm(500), rnorm(500, mean=5)), group=rep(c('A', 'B'), each=500)) 

# Plot it 
ggplot(df, aes(x=value)) + 
    geom_density() + 
    facet_wrap(~group) + 
    geom_segment(aes(x=hpd_lower(value), xend=hpd_upper(value), y=0, yend=0), size=3) 

enter image description here

あなたが見ることができるように、geom_segmentは、両端面のすべてのデータで計算します。私はまた、HPDintervalがファセットごとに1回だけ実行されるという解決策が欲しいと思います。

答えて

1

hpd間隔を事前に計算します。 ggplotは、データがグループ化されている場合でも、データフレーム全体のaes()関数の計算を評価します。

# Plot it 
library(dplyr) 
df_hpd <- group_by(df, group) %>% summarize(x=hpd_lower(value), xend=hpd_upper(value)) 

ggplot(df, aes(x=value)) + 
    geom_density() + 
    facet_wrap(~group) + 
    geom_segment(data = df_hpd, aes(x=x, xend=xend, y=0, yend=0), size=3) 

enter image description here

関連する問題