2014-09-01 33 views
0

假設一個多點RCT有兩組 - 實驗組和對照組。需要爲每個時間段和地點計算權重。我將實驗主體的權重固定爲1,然後計算控制主體的權重,以便控制組權重的總和等於實驗組權重的總和(對於每個時間段和站點)。下面是代碼來生成假設數據集:多點RCT的計算權重

set.seed(13458) # Set random seed 
ID <- c(1:20) # Generate 20 unique subject IDs 
timePeriod <- c(rep(1, 3), rep(2, 6), rep(3, 11)) # Generate time periods 
site <- c(rep("A", 3), rep("B", 6), rep("C", 11)) # Generate sites 
group <- sample(c("exp", "cont"), 20, replace = TRUE) # Random assignment 
outcome <- sample(c(rep(0,75), 0:100), 20, replace = TRUE) # Generate outcomes 
DF <- data.frame(ID, timePeriod, site, group, outcome) # Create a data frame 

和輸出:

head(DF) 
    ID timePeriod site group outcome 
1 1   1 A cont  12 
2 2   1 A cont  37 
3 3   1 A exp  59 
4 4   2 B exp  0 
5 5   2 B cont  0 
6 6   2 B exp  0 
7 7   2 B cont  0 
8 8   2 B exp  22 
9 9   2 B exp  34 
10 10   3 C cont  26 

下面是用於計算實驗和對照受試者每個時間段與本站權重相當笨拙策略。

library(plyr) 
a <- ddply(DF, c("timePeriod", "site", "group"), function(x){ 
    countSubjects <- length(x$group) 
    data.frame(N = countSubjects)  
    }) 

a$weight <- rep(NA, nrow(a)) for(i in 1:nrow(a)) 
    { 
    n <- a$N[i+1] 
    d <- a$N[i] 
    weight <- n/d 
    a$weight[i] <- ifelse(a$group[i] == "cont", weight, 
         ifelse(a$group[i] == "exp", 1, a$ratio)) 
    } 

> print(a) 
    timePeriod site group N weight 
1   1 A cont 2 0.5 
2   1 A exp 1 1.0 
3   2 B cont 2 2.0 
4   2 B exp 4 1.0 
5   3 C cont 5 1.2 
6   3 C exp 6 1.0 
> 

如何可以利用這些權重來計算調整後的結果(即,相乘結果,以由所述時間段,站點和組的各個權重的每個受試者)?我的興趣是將計算的權重和調整後的結果添加到原始數據框中。 (這裏是調整後的結果的一個例子。)

ID 1: 12 * .5 = 6 
ID 2: 37 * .5 = 18.5 
ID 3: 59 * 1 = 59 
ID 4: 0 * 1 = 0 
… 
ID 8: 22 * 1 = 22 
… 
ID 10: 26 * 1.2 = 31.2 

回答

1

隨着dplyr它可以這樣做:

tmp <- DF %>% group_by(timePeriod, site, group) %>% mutate(N=n(), outcome) 
tmp %>% group_by(timePeriod, site) %>% 
    arrange(group) %>% 
    mutate(weight=ifelse(group=="cont", last(N)/first(N), last(N)/last(N)), 
     adjusted=outcome*weight) 
+0

感謝您的快速反饋。加載dplyr庫後,我運行了代碼,發現錯誤「找不到函數」%>%「」。任何想法爲什麼發生這種情況? – 2014-09-01 16:48:26

+0

你使用哪個版本的dplyr庫? – iugrina 2014-09-01 16:49:26

+0

我剛剛更新到新的:dplyr_0.2。更新後,錯誤消息是「期待一個單一的值」。 – 2014-09-01 16:51:32