Hinweis: Diese Frage ist ein Repost, da meine vorherige Frage aus rechtlichen Gründen gelöscht werden musste.
Beim Vergleich von PROC MIXED von SAS mit der Funktion lme
aus dem nlme
Paket in R bin ich auf einige verwirrende Unterschiede gestoßen. Insbesondere unterscheiden sich die Freiheitsgrade in den verschiedenen Tests zwischen PROC MIXED
und lme
, und ich fragte mich, warum.
Beginnen Sie mit dem folgenden Datensatz (unten angegebener R-Code):
- ind: Faktor, der die Person angibt, an der die Messung durchgeführt wird
- fac: Orgel, an der gemessen wird
- trt: Faktor, der die Behandlung angibt
- y: eine kontinuierliche Antwortvariable
Die Idee ist, die folgenden einfachen Modelle zu bauen:
y ~ trt + (ind)
: ind
als Zufallsfaktor
y ~ trt + (fac(ind))
: fac
verschachtelt ind
als Zufallsfaktor
Beachten Sie, dass das letzte Modell Singularitäten verursachen sollte, da es y
für jede Kombination von ind
und nur einen Wert gibt fac
.
Erstes Modell
In SAS baue ich das folgende Modell:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM ind /s;
run;
Laut Tutorials sollte dasselbe Modell in R wie folgt nlme
lauten:
> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)
Beide Modelle geben die gleichen Schätzungen für die Koeffizienten und ihre SE an, verwenden jedoch bei der Durchführung eines F-Tests für die Auswirkung von trt
einen unterschiedlichen Freiheitsgrad:
SAS :
Type 3 Tests of Fixed Effects
Effect Num DF Den DF F Value Pr > F
trt 1 8 0.89 0.3724
R :
> anova(m2)
numDF denDF F-value p-value
(Intercept) 1 8 70.96836 <.0001
trt 1 6 0.89272 0.3812
Frage 1: Was ist der Unterschied zwischen beiden Tests? Beide werden mit REML angepasst und verwenden dieselben Kontraste.
ANMERKUNG: Ich habe verschiedene Werte für die Option DDFM = ausprobiert (einschließlich BETWITHIN, die theoretisch die gleichen Ergebnisse liefern sollten wie lme).
Zweites Modell
In SAS:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM fac(ind) /s;
run;
Das äquivalente Modell in R sollte sein:
> m4<-lme(y~trt,random=~1|ind/fac,data=Data)
In diesem Fall gibt es einige sehr merkwürdige Unterschiede:
- R passt, ohne sich zu beschweren, während SAS feststellt, dass der endgültige Hessische nicht eindeutig positiv ist (was mich nicht ein bisschen überrascht, siehe oben)
- Die SE auf den Koeffizienten unterscheiden sich (ist kleiner in SAS)
- Auch hier verwendete der F-Test eine andere Menge an DF (tatsächlich war diese Menge in SAS = 0).
SAS-Ausgabe:
Effect trt Estimate Std Error DF t Value Pr > |t|
Intercept 0.8863 0.1192 14 7.43 <.0001
trt Cont -0.1788 0.1686 0 -1.06 .
R Ausgang:
> summary(m4)
...
Fixed effects: y ~ trt
Value Std.Error DF t-value p-value
(Intercept) 0.88625 0.1337743 8 6.624963 0.0002
trtCont -0.17875 0.1891855 6 -0.944840 0.3812
...
(Beachten Sie, dass in diesem Fall der F- und der T-Test gleichwertig sind und denselben DF verwenden.)
Interessanterweise lme4
passt das Modell in R nicht einmal:
> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose) :
Number of levels of a grouping factor for the random effects
must be less than the number of observations
Frage 2 : Was ist der Unterschied zwischen diesen Modellen mit verschachtelten Faktoren? Sind sie richtig spezifiziert und wenn ja, wie kommt es, dass die Ergebnisse so unterschiedlich sind?
Simulierte Daten in R:
Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22,
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L,
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1",
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L,
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l",
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont",
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")
Simulierte Daten:
y ind fac trt
1.05 1 l Treat
0.86 2 l Treat
1.02 3 l Treat
1.14 1 r Treat
0.68 3 r Treat
1.05 4 l Treat
0.22 4 r Treat
1.07 2 r Treat
0.46 5 r Cont
0.65 6 l Cont
0.41 7 l Cont
0.82 8 l Cont
0.60 6 r Cont
0.49 5 l Cont
0.68 7 r Cont
1.55 8 r Cont