ตอบคำถามของคุณ "ฉันสงสัยว่าจะได้รับ ATE จากรุ่น 2" ในความคิดเห็น:
ประการแรกในแบบจำลองของคุณ 2 ไม่ใช่ทั้งหมด γJสามารถระบุได้ซึ่งนำไปสู่ปัญหาการขาดอันดับในเมทริกซ์การออกแบบ มีความจำเป็นต้องลดระดับหนึ่งเช่นสมมติว่าγJ= 0 สำหรับ j = 1. นั่นคือการใช้การเข้ารหัสความคมชัดและถือว่าผลการรักษาในระยะที่ 1 คือ 0 ใน R มันจะเขียนโค้ดคำศัพท์การโต้ตอบกับผลการรักษาที่ระยะ 1 เป็นระดับอ้างอิงและนั่นก็เป็นเหตุผลว่าทำไมβ~ มีการตีความผลการรักษาในระยะที่ 1 ใน SAS มันจะใช้รหัสผลการรักษาในช่วงเวลา ม. เป็นระดับอ้างอิงแล้ว β~ มีการตีความผลการรักษาในช่วงเวลา ม.ไม่ใช่ระยะเวลา 1 อีกต่อไป
สมมติว่าความแตกต่างถูกสร้างขึ้นในวิธี R จากนั้นค่าสัมประสิทธิ์ที่ประมาณไว้สำหรับแต่ละคำการโต้ตอบ (ฉันจะยังคงแสดงสิ่งนี้โดย γJแม้ว่ามันจะไม่ได้เป็นสิ่งที่คุณกำหนดไว้ในแบบจำลองของคุณ) มีการตีความผลการรักษาที่แตกต่างระหว่างช่วงเวลา J และช่วงเวลา 1. แสดง ATE ในแต่ละช่วงเวลา T EJจากนั้น γJ=T EJ-T E1 สำหรับ j = 2 , … , m. ดังนั้นตัวประมาณสำหรับT EJ คือ β~+γJ. (ไม่สนใจความแตกต่างของสัญกรณ์ระหว่างพารามิเตอร์ที่แท้จริงและตัวประมาณเพราะความเกียจคร้าน) และตามธรรมชาติของคุณA T E =β=1ม.Σม.j = 1T EJ=β~+ (β~+γ2) + ⋯ + (β~+γม.)ม.=β~+1ม.(γ2+ ⋯ +γม.).
ฉันทำแบบจำลองง่ายๆใน 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)
ฉันคิดว่าข้อผิดพลาดมาตรฐานนั้นได้มาจาก WV^WT-----√ กับ W เป็นรูปแบบการผสมเชิงเส้นข้างต้นและ V การประมาณค่าความแปรปรวนร่วม - ความแปรปรวนร่วมของสัมประสิทธิ์จากแบบจำลอง 3
ส่วนเบี่ยงเบนการเข้ารหัส
อีกวิธีในการทำ β~ มีการตีความโดยตรงของ T Eคือการใช้การเข้ารหัสเบี่ยงเบนเพื่อเป็นตัวแทนของ covariates ในภายหลังT EJ- A T E เปรียบเทียบ:
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