2015-06-22 72 views
1

我們有七次暴露和24組。我們希望將七次曝光中的五次隨機分配到組中,同時還要確保每次曝光的結果都是一致的,這意味着每次曝光最終都會暴露相同的次數。我寫了一些代碼,但我無法控制每次曝光顯示的次數。例如:使用R分配治療組

exposures <- c("A", "B", "C", "D", "E", "F", "G") 
groups <- c(1:24) 

table <- c() 

for (i in 1:24){ 
    draw <- sample(exposures, size=5, replace=F) 
    table <- rbind(table, draw) 
} 

table(table) 

所以計數結束了一些接近,但有什麼我可以做,以確保每次曝光的最低限度?謝謝!

編輯此外,我們需要每個曝光組每次只出現一次。

+0

如果組的數量乘以每組曝光次數不是總曝光次數的整數倍(在這種情況下不是這種情況下...... 120不是7的整數倍) – Bridgeburners

+1

@Bridgeburners我看到「大約相同的次數」和「確保每個參數的最小值」。 – Frank

回答

1

根據未使用的兩次曝光而非五次曝光,可以更容易地想到它。讓我們限制時間的曝光可以排除數量:

draw_exc <- function(exposures,nexp,ng,max_excluded = 10){ 

    nexc <- length(exposures)-nexp 

    exp_rem <- exposures 
    exc  <- matrix(,ng,nexc) 
    for (i in 1:ng){ 
    pool <- combn(exp_rem,nexc) 
    draw <- pool[,sample(1:ncol(pool), 1)] 

    exc[i,] <- draw 

    tab  <- table(exc) 
    exp_rem <- setdiff(exp_rem, names(tab[tab > max_excluded])) 
    } 
    exc 
} 

這裏有一個例證:

set.seed(1) 
exc  <- draw_exc(exposures,5,24,10) 
assignment <- apply(exc,1,function(x) setdiff(exposures,x)) 

table(exc) 
# exc 
# A B C D E F G 
# 7 4 6 6 8 10 7 

table(assignment) 
# assignment 
# A B C D E F G 
# 17 20 18 18 16 14 17 

所以,用24組,排除的最大數目等於24減去出場的最小數量。這個循環效率不高,但似乎完成了這項工作。

+0

謝謝弗蘭克!這是最有幫助的。 – armbreaker284