Nota: esta pregunta es una nueva publicación, ya que mi pregunta anterior tuvo que ser eliminada por razones legales.
Al comparar PROC MIXED de SAS con la función lme
del nlme
paquete en R, me topé con algunas diferencias bastante confusas. Más específicamente, los grados de libertad en las diferentes pruebas difieren entre PROC MIXED
y lme
, y me preguntaba por qué.
Comience desde el siguiente conjunto de datos (el código R se proporciona a continuación):
- ind: factor que indica al individuo donde se toma la medición
- fac: órgano donde se toma la medida
- trt: factor que indica el tratamiento
- y: alguna variable de respuesta continua
La idea es construir los siguientes modelos simples:
y ~ trt + (ind)
: ind
como factor aleatorio
y ~ trt + (fac(ind))
: fac
anidado ind
como factor aleatorio
Tenga en cuenta que el último modelo debería causar singularidades, ya que solo hay 1 valor de y
por cada combinación de ind
y fac
.
Primer modelo
En SAS, construyo el siguiente modelo:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM ind /s;
run;
Según los tutoriales, el mismo modelo en R usando nlme
debería ser:
> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)
Ambos modelos dan las mismas estimaciones para los coeficientes y su SE, pero cuando realizan una prueba F para el efecto de trt
, utilizan una cantidad diferente de grados de libertad:
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
Pregunta 1: ¿Cuál es la diferencia entre ambas pruebas? Ambos están equipados con REML y usan los mismos contrastes.
NOTA: Probé diferentes valores para la opción DDFM = (incluido BETWITHIN, que teóricamente debería dar los mismos resultados que lme)
Segundo modelo
En SAS:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM fac(ind) /s;
run;
El modelo equivalente en R debería ser:
> m4<-lme(y~trt,random=~1|ind/fac,data=Data)
En este caso, hay algunas diferencias muy extrañas:
- R encaja sin quejarse, mientras que SAS señala que el hessian final no es definitivo positivo (lo cual no me sorprende un poco, ver arriba)
- El SE en los coeficientes difiere (es menor en SAS)
- Nuevamente, la prueba F usó una cantidad diferente de DF (de hecho, en SAS esa cantidad = 0)
Salida SAS:
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 salida:
> 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
...
(Tenga en cuenta que en este caso, las pruebas F y T son equivalentes y usan el mismo DF).
Curiosamente, cuando se usa lme4
en R, el modelo ni siquiera encaja:
> 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
Pregunta 2 : ¿Cuál es la diferencia entre estos modelos con factores anidados? ¿Se especifican correctamente y, de ser así, cómo es que los resultados son tan diferentes?
Datos simulados en 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")
Datos simulados:
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