2017-06-22 16 views
1

自分のデータの異なるサブグループに対して自己相関のggplotを作成します。自己相関プロットでggplotのfacet_wrapを使用する

library(tidyverse) 
library(forecast) 

df <- data.frame(val = runif(100), 
       key = c(rep('a', 50), key = rep('b', 50))) 

ggAcf(df$val) 

生成します:forecastパッケージを使用して

、私はこのような全体のサンプルのためggplotフィギュア生成するために管理し

enter image description here

をしかし、今、私は次のことをしようとしていますファセットを生成し、それは機能しません:

ggplot(df) + 
    ggAcf(aes(val)) + 
    facet_wrap(~key) 

アイデア?

+0

キー変数のクラスを確認し、それが要因変数であることを確認してください。 –

+0

is.factor(df $ key) [1] TRUE –

答えて

2

手動ACF値とプロットを構築可能溶液。

library(tidyverse) 
library(forecast) 

df <- data.frame(val = runif(100), 
       key = c(rep('a', 50), key = rep('b', 50))) 

df_acf <- df %>% 
    group_by(key) %>% 
    summarise(list_acf=list(acf(val, plot=FALSE))) %>% 
    mutate(acf_vals=purrr::map(list_acf, ~as.numeric(.x$acf))) %>% 
    select(-list_acf) %>% 
    unnest() %>% 
    group_by(key) %>% 
    mutate(lag=row_number() - 1) 

df_ci <- df %>% 
    group_by(key) %>% 
    summarise(ci = qnorm((1 + 0.95)/2)/sqrt(n())) 

ggplot(df_acf, aes(x=lag, y=acf_vals)) + 
    geom_bar(stat="identity", width=.05) + 
    geom_hline(yintercept = 0) + 
    geom_hline(data = df_ci, aes(yintercept = -ci), color="blue", linetype="dotted") + 
    geom_hline(data = df_ci, aes(yintercept = ci), color="blue", linetype="dotted") + 
    labs(x="Lag", y="ACF") + 
    facet_wrap(~key) 

acf with calc ci

+0

まさに私が探していたもの。編集:ああ、エラーバンドはハードコードです... –

+1

答えは 'ggAcf'と同じ方法で信頼区間を計算するように更新されました。 –

1
library(forecast) 
df <- data.frame(val = runif(100), 
       key = c(rep('a', 50), key = rep('b', 50))) 


a = subset(df, key == "a") 
ap = ggAcf(a$val) 

b = subset(df, key == "b") 
bp = ggAcf(b$val) 


library(grid) 
grid.newpage() 
pushViewport(viewport(layout=grid.layout(1,2))) 
print(ap, vp=viewport(layout.pos.row = 1, layout.pos.col = 1)) 
print(bp, vp=viewport(layout.pos.row = 1, layout.pos.col = 2)) 

enter image description here

または:

grid.newpage() 
pushViewport(viewport(layout=grid.layout(1,2))) 
print(ap, vp=viewport(layout.pos.row = 1, layout.pos.col = 1)) 
print(bp, vp=viewport(layout.pos.row = 1, layout.pos.col = 2)) 

enter image description here

+0

また、ありがとう!私の実際のデータセットはより高い、時には変化するグループ数を持っているので、その場合にコードを適合させる必要があります。 –

関連する問題