在縱向研究中估計平均治療效果的最佳方法是什麼?
在一項縱向研究中,結果單位在時間點重複測量共有固定測量場合(固定 = 對單位進行測量同時進行)。
單位被隨機分配到治療中,,或對照組,. 我想估計和測試治療的平均效果,即
跨越時間和個人的期望。為此,我考慮使用固定場合多級(混合效果)模型:
和攔截,這,跨單位的隨機截距,以及殘差。
現在我正在考慮替代模型
其中包含固定效果每個場合假人在哪裡如果和別的。此外,該模型包含治療和時間與參數之間的相互作用. 所以這個模型考慮到了可能因時間而異。這本身就提供了豐富的信息,但我相信它也應該提高參數估計的精度,因為被考慮在內。
然而,在這個模型中係數似乎不等於了。相反,它在第一次代表 ATE ()。所以估計可能比但這並不代表了。
我的問題是:
- 在這個縱向研究設計中估計治療效果的最佳方法是什麼?
- 我必須使用模型 1 還是有辦法使用(可能更有效)模型 2?
- 有沒有辦法有解釋和特定場合的偏差(例如使用效果編碼)?
在評論中解決您的問題“我想知道如何將 ATE 從模型 2 中取出”:
首先,在您的模型 2 中,並非全部是可識別的,這導致設計矩陣中的秩不足問題。有必要降低一級,例如假設為了. 即使用對比編碼,假設第1期的治療效果為0。在R中,將第1期治療效果的交互項編碼為參考水平,這也是為什麼具有時期1的治療效果的解釋。在SAS中,它將編碼時期的治療效果作為參考電平,則有期治療效果的解釋,不再是第 1 期。
假設對比度是以 R 方式創建的,那麼為每個交互項估計的係數(我仍然將其表示為,儘管它不完全是您在模型中定義的內容)解釋了時間段之間的治療效果差異和時間段 1. 表示每個時間段的 ATE, 然後為了. 因此,估計器為是. (忽略真實參數和估計器本身之間的符號差異,因為懶惰)自然而然你的.
我在 R 中做了一個簡單的模擬來驗證這一點:
set.seed(1234) time <- 4 n <-2000 trt.period <- c(2,3,4,5) #ATE=3.5 kj <- c(1,2,3,4) intercept <- rep(rnorm(n, 1, 1), each=time) eij <- rnorm(n*time, 0, 1.5) trt <- rep(c(rep(0,n/2),rep(1,n/2)), each=time) y <- intercept + trt*(rep(trt.period, n))+rep(kj,n)+eij sim.data <- data.frame(id=rep(1:n, each=time), period=factor(rep(1:time, n)), y=y, trt=factor(trt)) library(lme4) fit.model1 <- lmer(y~trt+(1|id), data=sim.data) beta <- getME(fit.model1, "fixef")["trt1"] fit.model2 <- lmer(y~trt*period + (1|id), data=sim.data) beta_t <- getME(fit.model2, "fixef")["trt1"] gamma_j <- getME(fit.model2, "fixef")[c("trt1:period2","trt1:period3","trt1:period4")] results <-c(beta, beta_t+sum(gamma_j)/time) names(results)<-c("ATE.m1", "ATE.m2") print(results)
結果驗證了這一點:
ATE.m1 ATE.m2 3.549213 3.549213
我不知道如何直接改變上面模型 2 中的對比編碼,所以為了說明如何直接使用交互項的線性函數,以及如何獲得標準誤差,我使用了 multcomp 包:
sim.data$tp <- interaction(sim.data$trt, sim.data$period) fit.model3 <- lmer(y~tp+ (1|id), data=sim.data) library(multcomp) # w= tp.1.1 + (tp.2.1-tp.2.0)+(tp.3.1-tp.3.0)+(tp.4.1-tp.4.0) # tp.x.y=interaction effect of period x and treatment y w <- matrix(c(0, 1,-1,1,-1,1,-1,1)/time,nrow=1) names(w)<- names(getME(fit.model3,"fixef")) xx <- glht(fit.model3, linfct=w) summary(xx)
這是輸出:
Simultaneous Tests for General Linear Hypotheses Fit: lmer(formula = y ~ tp + (1 | id), data = sim.data) Linear Hypotheses: Estimate Std. Error z value Pr(>|z|) 1 == 0 3.54921 0.05589 63.51 <2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 (Adjusted p values reported -- single-step method)
我認為標準誤差是通過和是上述線性組合形式和模型 3 中係數的估計方差 - 協方差矩陣。
偏差編碼
另一種製作方法直接解釋就是使用偏差編碼,這樣後面的協變量就代表比較:
sim.data$p2vsmean <- 0 sim.data$p3vsmean <- 0 sim.data$p4vsmean <- 0 sim.data$p2vsmean[sim.data$period==2 & sim.data$trt==1] <- 1 sim.data$p3vsmean[sim.data$period==3 & sim.data$trt==1] <- 1 sim.data$p4vsmean[sim.data$period==4 & sim.data$trt==1] <- 1 sim.data$p2vsmean[sim.data$period==1 & sim.data$trt==1] <- -1 sim.data$p3vsmean[sim.data$period==1 & sim.data$trt==1] <- -1 sim.data$p4vsmean[sim.data$period==1 & sim.data$trt==1] <- -1 fit.model4 <- lmer(y~trt+p2vsmean+p3vsmean+p4vsmean+ (1|id), data=sim.data)
輸出:
Fixed effects: Estimate Std. Error t value (Intercept) 3.48308 0.03952 88.14 trt1 3.54921 0.05589 63.51 p2vsmean -1.14774 0.04720 -24.32 p3vsmean 1.11729 0.04720 23.67 p4vsmean 3.01025 0.04720 63.77