Я хочу использовать функцию "caralloc" из пакета SeqAlloc, чтобы рандомизировать людей в три, а не в два условия по умолчанию.
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
}
Используйте пример пакета:
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 ...