2016-09-30 4 views
3

Ich habe Probleme beim Versuch, Permutationen zu stratifizieren.Geschichtete Permutation mit Bootstrap

Aussehen Meine Daten wie folgt aus:

 gender party  value 
1  F Democrat  762 
2  M Democrat  484 
3  F Independent 327 
4  M Independent 239 
5  F Republican 468 
6  M Republican 477 

Was ich einfach versuche zufällige Permutation zu tun ist durch party

library(dplyr) 
md %>% 
    group_by(party) %>% 
    mutate(perm = sample(gender)) 

geschichtete Was mich eine korrekte zufällige Permutation

 gender party  value perm 
1  F Democrat  762  M 
2  M Democrat  484  F 
3  F Independent 327  M 
4  M Independent 239  F 
5  F Republican 468  F 
6  M Republican 477  M 
gibt

Was ich möchte ist diese Operation mehrmals zu wiederholen. Nach der vorgeschlagenen Lösung here (nicht-Schichtung Permutation)

library(broom) 
md %>% 
bootstrap(100) %>% 
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE))) 

Allerdings bin ich Fehler ein group_by Argument einzuführen.

md %>% 
    bootstrap(10) %>% 
    group_by(party) %>% 
    do(data.frame(., treat = sample(.$gender, 6, replace=TRUE))) 

Irgendeine Idee?

Auch bootstrap Funktion ist eigentlich ziemlich langsam. Irgendeine Idee warum? Und jede Lösung, um es schneller zu machen? Können wir es irgendwie parallelisieren?

library(reshape2) 
M <- as.table(rbind(c(762, 327, 468), c(484, 239, 477))) 
dimnames(M) <- list(gender = c("F", "M"), 
       party = c("Democrat","Independent", "Republican")) 
md = melt(M) 
+0

ist 'md%>% group_by (Partei)%>% Bootstrap (10, by_group = TRUE)%>% tun (data.frame (., behandeln = sample (. $ gender, 6, replace = TRUE)))? – Axeman

+0

Sie haben geschrieben: * Was ich möchte ist, diese Operation viele Male zu wiederholen * Aber was ist die erwartete Ausgabe? Was ist mit der Verwendung von "replizieren"? – agstudy

+0

@agstudy Replikat ist eine Möglichkeit, ich habe es in der genannten Frage verwendet. Es macht die Codes nur schwerfällig. – giacomo

Antwort

3

Hier eine Lösung data.table mit Paket und replicate (wenn Sie für die Leistung suchen Sie es wirklich gehen geben sollte):

setDT(dx) 
rbindlist(replicate(10,dx[,perm := sample(gender),party],simplify=FALSE)) 

ich ein Benutzer von dplyr weder ein pfeifer bin nicht aber wenn Ihr ein "Rohr-Fanatiker" Sie den Code umwandeln kann oben und Rohr es:

PERM <- function(dx) 
    dx[,perm := sample(gender),party] 

REPLICATE <- function(dx,n) 
    rbindlist(replicate(n,dx[,perm := sample(gender),party],simplify=FALSE)) 

dx %>% 
    PERM() %>% 
    REPLICATE(10) 
+0

vielen Dank – giacomo