Beantwortung Ihrer Frage "Ich frage mich, wie ich die ATE aus Modell 2 herausholen kann" in den Kommentaren:
Erstens ist in Ihrem Modell 2 nicht alles identifizierbar, was zu dem Problem des in der Entwurfsmatrix führt. Es ist notwendig, eine Ebene zu , beispielsweise unter der Annahme von für . Das heißt, unter Verwendung der Kontrastcodierung und unter der Annahme, dass der Behandlungseffekt in Periode 1 0 ist. In R wird der Interaktionsterm mit dem Behandlungseffekt in Periode 1 als Referenzniveau codiert, und dies ist auch der Grund, warum hat die Interpretation des Behandlungseffekts in Periode 1. In SAS wird der Behandlungseffekt in Periode als Referenzniveau codiert, dann hat die Interpretation des Behandlungseffekts in Periodeγ j = 0 j = 1 ˜ β m ˜ β mγjγj= 0j = 1β~mβ~m, nicht mehr Periode 1.
Angenommen, der Kontrast wird auf R-Weise erzeugt, dann haben die für jeden Interaktionsterm geschätzten Koeffizienten (ich werde dies immer noch mit , obwohl es nicht genau das ist, was Sie in Ihrem Modell definiert haben) die Interpretation der Behandlungseffektdifferenz zwischen dem Zeitraum und Zeitraum 1. Bezeichnen Sie ATE in jedem Zeitraum , dann für . Daher ein Schätzer für heißt . (Ignoriert den Notationsunterschied zwischen dem wahren Parameter und dem Schätzer selbst, weil Faulheit) Und natürlich Ihr j A T E j γ j = A T E j - A T E 1γjjA T E.jγj= A T E.j- A T E.1j = 2 , … , mA T E.jβ~+ γjA T E =β= 1m∑mj = 1A T E.j= β~+ ( β~+ γ2) + ⋯ + ( β~+ γm)m= β~+ 1m( γ2+ ⋯ + γm) .
Ich habe eine einfache Simulation in R durchgeführt, um dies zu überprüfen:
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)
Und die Ergebnisse bestätigen dies:
ATE.m1 ATE.m2
3.549213 3.549213
Ich weiß nicht, wie man die Kontrastcodierung in Modell 2 oben direkt ändert. Um zu veranschaulichen, wie man eine lineare Funktion der Interaktionsterme direkt verwenden kann und wie man den Standardfehler erhält, habe ich das Multcomp-Paket verwendet:
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)
Und hier ist die Ausgabe:
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)
Ich denke, der Standardfehler wird durch wobei die obige lineare Kombinationsform und die geschätzte Varianz-Kovarianz-Matrix der Koeffizienten aus Modell 3 ist. wVw V.^wT.- -- -- -- -- -√wV.
Abweichungscodierung
Eine andere Möglichkeit, direkt mit der Interpretation von besteht in der Verwendung der Abweichungscodierung , sodass spätere Kovariaten den Vergleich : ATEATEj-ATE.β~A T E.A T E.j- 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)
Ausgabe:
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