Geschichtete Permutation mit Bootstrap
Ich habe Probleme beim Versuch, Permutationen zu schichten.
Meine Daten sehen folgendermaßen 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, ist eine geschichtete zufällige Permutation durch party
library(dplyr)
md %>%
group_by(party) %>%
mutate(perm = sample(gender))
Das gibt mir 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
Ich möchte diesen Vorgang viele Male wiederholen. Nach der hier vorgeschlagenen Lösung (Permutation ohne Schichtung)
library(broom)
md %>%
bootstrap(100) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
Ich kann jedoch kein group_by
Argument einbringen.
md %>%
bootstrap(10) %>%
group_by(party) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
Irgendeine Idee ?
Außerdem ist die bootstrap
Funktion eigentlich ziemlich langsam. Irgendeine Idee warum? Und eine 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)
Hier eine Lösung mit dem data.table
Paket (wenn Sie nach Leistung suchen, sollten Sie es unbedingt ausprobieren) und replicate
:
setDT(dx)
rbindlist(replicate(10,dx[,perm := sample(gender),party],simplify=FALSE))
Ich bin weder ein Benutzer dplyr
noch ein Piper, aber wenn Sie ein "Pipe-Fanatiker" sind, können Sie den obigen Code transformieren und Pipe:
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)