Remarque: cette question est une rediffusion, car ma question précédente a dû être supprimée pour des raisons juridiques.
En comparant PROC MIXED de SAS avec la fonction lme
du nlme
package dans R, je suis tombé sur des différences assez confuses. Plus précisément, les degrés de liberté dans les différents tests diffèrent entre PROC MIXED
et lme
, et je me suis demandé pourquoi.
Commencez à partir de l'ensemble de données suivant (code R ci-dessous):
- ind: facteur indiquant l'individu où la mesure est prise
- fac: organe où la mesure est prise
- trt: facteur indiquant le traitement
- y: une variable de réponse continue
L'idée est de construire les modèles simples suivants:
y ~ trt + (ind)
: ind
comme facteur aléatoire
y ~ trt + (fac(ind))
: fac
imbriqué ind
comme facteur aléatoire
Notez que le dernier modèle devrait provoquer des singularités, car il n'y a qu'une seule valeur de y
pour chaque combinaison de ind
et fac
.
Premier modèle
En SAS, je construis le modèle suivant:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM ind /s;
run;
Selon les tutoriels, le même modèle dans R utilisant nlme
devrait être:
> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)
Les deux modèles donnent les mêmes estimations pour les coefficients et leur SE, mais lorsqu'ils effectuent un test F pour l'effet de trt
, ils utilisent une quantité différente de degrés de liberté:
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
Question 1: Quelle est la différence entre les deux tests? Les deux sont équipés de REML et utilisent les mêmes contrastes.
REMARQUE: j'ai essayé différentes valeurs pour l'option DDFM = (y compris BETWITHIN, qui devrait théoriquement donner les mêmes résultats que lme)
Deuxième modèle
En SAS:
PROC MIXED data=Data;
CLASS ind fac trt;
MODEL y = trt /s;
RANDOM fac(ind) /s;
run;
Le modèle équivalent dans R devrait être:
> m4<-lme(y~trt,random=~1|ind/fac,data=Data)
Dans ce cas, il existe des différences très étranges:
- R rentre sans se plaindre, alors que SAS note que la toile de jute finale n'est pas définie positive (ce qui ne me surprend pas un peu, voir ci-dessus)
- Le SE sur les coefficients diffère (est plus petit en SAS)
- Encore une fois, le test F a utilisé une quantité différente de DF (en fait, en SAS, cette quantité = 0)
Sortie 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 .
Sortie R:
> 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
...
(Notez que dans ce cas, les tests F et T sont équivalents et utilisent le même DF.)
Fait intéressant, lors de l'utilisation lme4
dans R, le modèle ne convient même pas:
> 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
Question 2 : Quelle est la différence entre ces modèles avec des facteurs imbriqués? Sont-ils spécifiés correctement et si oui, comment les résultats sont-ils si différents?
Données simulées dans 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")
Données simulées:
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