bootstrap 的分层排列
Stratified permutation with bootstrap
我在尝试对排列进行分层时遇到问题。
我的数据是这样的:
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
我只是想做的是通过 party
分层随机排列
library(dplyr)
md %>%
group_by(party) %>%
mutate(perm = sample(gender))
这给了我一个正确的随机排列
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
我想要的是多次重复这个操作。按照提出的解决方案(非分层排列)
library(broom)
md %>%
bootstrap(100) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
但是,我没有引入 group_by
论点。
md %>%
bootstrap(10) %>%
group_by(party) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
有什么想法吗?
此外,bootstrap
功能实际上很慢。知道为什么吗?有什么解决方案可以让它更快吗?我们能以某种方式将它并行化吗?
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)
这是一个使用 data.table
的解决方案(如果您正在寻找性能,您应该真正尝试一下)包和 replicate
:
setDT(dx)
rbindlist(replicate(10,dx[,perm := sample(gender),party],simplify=FALSE))
我不是 dplyr
的用户,也不是 piper ,但是如果你是 "pipe-fanatic" 你可以转换上面的代码并通过管道传递它:
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)
我在尝试对排列进行分层时遇到问题。
我的数据是这样的:
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
我只是想做的是通过 party
library(dplyr)
md %>%
group_by(party) %>%
mutate(perm = sample(gender))
这给了我一个正确的随机排列
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
我想要的是多次重复这个操作。按照提出的解决方案
library(broom)
md %>%
bootstrap(100) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
但是,我没有引入 group_by
论点。
md %>%
bootstrap(10) %>%
group_by(party) %>%
do(data.frame(., treat = sample(.$gender, 6, replace=TRUE)))
有什么想法吗?
此外,bootstrap
功能实际上很慢。知道为什么吗?有什么解决方案可以让它更快吗?我们能以某种方式将它并行化吗?
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)
这是一个使用 data.table
的解决方案(如果您正在寻找性能,您应该真正尝试一下)包和 replicate
:
setDT(dx)
rbindlist(replicate(10,dx[,perm := sample(gender),party],simplify=FALSE))
我不是 dplyr
的用户,也不是 piper ,但是如果你是 "pipe-fanatic" 你可以转换上面的代码并通过管道传递它:
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)