首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用函数"caralloc“(在R包SeqAlloc中)将人们随机分为三种情况?

如何使用函数"caralloc“(在R包SeqAlloc中)将人们随机分为三种情况?
EN

Stack Overflow用户
提问于 2019-11-06 04:15:34
回答 1查看 22关注 0票数 0

我想使用SeqAlloc包中的函数"caralloc“将人们随机分成三个条件,而不是默认的两个条件。

代码语言:javascript
复制
function (xmat, carwt, p, tol) 
{
  if (!is.matrix(xmat)) 
  xmat = as.matrix(xmat)
  n = nrow(xmat)
  result = rbinom(n, 1, 0.5)
 if (n > 1) {
for (j in 2:n) {
  matchx = apply(xmat[1:(j - 1), , drop = FALSE], 
    1, function(x, xrow) {
      as.numeric(x == xrow)
    }, xmat[j, ])
  sumsofar = matchx %*% (2 * result[1:(j - 1)] - 1)
  imbalance1 = crossprod(abs(sumsofar + 1), carwt)
  imbalance0 = crossprod(abs(sumsofar - 1), carwt)
  if (imbalance1 < imbalance0 & imbalance0 >= tol) 
    result[j] = rbinom(1, 1, p)
  if (imbalance0 < imbalance1 & imbalance1 >= tol) 
    result[j] = rbinom(1, 1, 1 - p)
 }
}
result
}

使用包示例:

代码语言:javascript
复制
sampsize <- 200
percent <- c(0.5,0.8,0.2,0.4)
carwt <- c(.4,.3,.2,.1)

set.seed(5798)

xmat <- matrix(rbinom(sampsize*length(percent),1,rep(percent,sampsize)),
          nrow=sampsize,ncol=length(percent),byrow=TRUE)
colnames(xmat) = c("C1","C2","C3","C4")
strat_factor = xmat[,1]*4 + xmat[,2]*2 + xmat[,4] + 1

caralloc(xmat,carwt,1,3)

缺省的两个条件如下:1 1 0 0 1 0 0 1 0 0 0 ...我希望看到三个条件:1 1 2 0 1 0 0 2 0 1 0 ...

EN

回答 1

Stack Overflow用户

发布于 2019-11-06 04:36:09

这听起来很难让你的团队随机化。

不能只使用sample()函数吗?

代码语言:javascript
复制
df <- data.frame(
  # some 1000 test patients:  
  patient = paste0(letters, round(runif(1000, 100, 999))), 
  # assigning a group: 0, 1 or 2:
  group = sample(c(0:2), 1000, replace = TRUE))

head(df)
#>   patient group
#> 1    a729     1
#> 2    b633     2
#> 3    c831     2
#> 4    d111     2
#> 5    e406     1
#> 6    f491     0

# evenly distributed?
hist(df$group)

要使用预定义大小的组,请使用prob参数:

代码语言:javascript
复制
df <- data.frame(
  # some 1000 test patients:  
  patient = paste0(letters, round(runif(1000, 100, 999))), 
  # assigning a group: 0, 1 or 2:
  group = sample(c(0:2), 1000, replace = TRUE, prob = c(0.1, 0.4, 0.5)))

hist(df$group)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58718796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档