2017-06-22 4 views
1

Ich möchte eine ggplot Abbildung von Autokorrelationen für verschiedene Untergruppen meiner Daten erstellen.Verwendung von Facette_Wrap von ggplot mit Autokorrelationsdiagramm

Mit dem forecast Paket schaffe ich es für die ganze Probe wie dies eine ggplot Figur zu erzeugen:

library(tidyverse) 
library(forecast) 

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

ggAcf(df$val) 

Welche produziert:

enter image description here

Aber jetzt folgende ich versuche um die Facetten zu erzeugen und es funktioniert nicht:

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

Irgendwelche Ideen?

+0

Bitte überprüfen Sie die Klasse von Schlüsselvariable und stellen Sie sicher, dass es ein Faktor variabel ist. –

+0

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

Antwort

2

Eine mögliche Lösung manuell die ACF Werte und Grundstück Gebäude aus.

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

Genau das, was ich gesucht habe. Bearbeiten: Oh, aber die Fehlerbänder sind hardcodes ... –

+1

Antwort wurde aktualisiert, um Konfidenzintervalle auf die gleiche Weise wie 'ggAcf' zu berechnen –

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

Oder:

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

Funktioniert auch, danke! Mein Real-World-Datensatz weist eine höhere und manchmal wechselnde Anzahl von Gruppen auf, sodass ich die Codes in diesem Fall anpassen müsste. –

Verwandte Themen