Dans la lmer
fonction au sein lme4
de R
il y a un appel à la construction d' une matrice de modèle d'effets aléatoires, , comme expliqué ici , pages 7 - 9.
Le calcul de implique les produits de KhatriRao et / ou Kronecker de deux matrices, et . J i X i
La matrice est une bouchée: "Matrice indicatrice d'indices de facteurs de regroupement", mais il semble que ce soit une matrice clairsemée avec un codage fictif pour sélectionner quelle unité (par exemple, les sujets dans les mesures répétitives) correspondant aux niveaux hiérarchiques supérieurs est "activée" pour toute observation. La matrice semble agir comme un sélecteur de mesures au niveau hiérarchique inférieur, de sorte que la combinaison des deux "sélecteurs" produirait une matrice, de la forme illustrée dans l'article via l'exemple suivant:X i Z i
(f<-gl(3,2))
[1] 1 1 2 2 3 3
Levels: 1 2 3
(Ji<-t(as(f,Class="sparseMatrix")))
6 x 3 sparse Matrix of class "dgCMatrix"
1 2 3
[1,] 1 . .
[2,] 1 . .
[3,] . 1 .
[4,] . 1 .
[5,] . . 1
[6,] . . 1
(Xi<-cbind(1,rep.int(c(-1,1),3L)))
[,1] [,2]
[1,] 1 -1
[2,] 1 1
[3,] 1 -1
[4,] 1 1
[5,] 1 -1
[6,] 1 1
Transposer chacune de ces matrices et effectuer une multiplication de Khatri-Rao:
Mais est la transposition:
(Zi<-t(KhatriRao(t(Ji),t(Xi))))
6 x 6 sparse Matrix of class "dgCMatrix"
[1,] 1 -1 . . . .
[2,] 1 1 . . . .
[3,] . . 1 -1 . .
[4,] . . 1 1 . .
[5,] . . . . 1 -1
[6,] . . . . 1 1
Il s'avère que les auteurs utilisent la base sleepstudy
de données lme4
mais ne développent pas vraiment les matrices de conception telles qu'elles s'appliquent à cette étude particulière. J'essaie donc de comprendre comment le code composé dans le document reproduit ci-dessus se traduirait en un sleepstudy
exemple plus significatif .
Pour des raisons de simplicité visuelle, j'ai réduit l'ensemble de données à seulement trois sujets - "309", "330" et "371":
require(lme4)
sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ]
rownames(sleepstudy) <- NULL
Chaque individu présenterait une interception et une pente très différentes si une régression OLS simple était envisagée individuellement, suggérant la nécessité d'un modèle à effets mixtes avec la hiérarchie ou le niveau d'unité supérieur correspondant aux sujets:
par(bg = 'peachpuff')
plot(1,type="n", xlim=c(0, 12), ylim=c(200, 360),
xlab='Days', ylab='Reaction')
for (i in sleepstudy$Subject){
fit<-lm(Reaction ~ Days, sleepstudy[sleepstudy$Subject==i,])
lines(predict(fit), col=i, lwd=3)
text(x=11, y=predict(fit, data.frame(Days=9)), cex=0.6,labels=i)
}
L'appel de régression à effets mixtes est le suivant:
fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)
Et la matrice extraite de la fonction donne les résultats suivants:
parsedFormula<-lFormula(formula= Reaction~Days+(Days|Subject),data= sleepstudy)
parsedFormula$reTrms
$Ztlist
$Ztlist$`Days | Subject`
6 x 12 sparse Matrix of class "dgCMatrix"
309 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . . . . . . . . . . . .
309 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . . . . . . . . . . . .
330 . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 . . . . . . . . . .
330 . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9 . . . . . . . . . .
371 . . . . . . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1
371 . . . . . . . . . . . . . . . . . . . . 0 1 2 3 4 5 6 7 8 9
Cela semble vrai, mais si c'est le cas, quelle est l'algèbre linéaire derrière elle? Je comprends que les rangées de 1
sont la sélection d'individus comme. Par exemple, le sujet 309
est activé pour la ligne de base + neuf observations, il obtient donc quatre 1
et ainsi de suite. La deuxième partie est clairement la mesure réelle: 0
pour la ligne de base, 1
pour le premier jour de privation de sommeil, etc.
Mais quelles sont les matrices et réelles et les ou , selon le cas est pertinent?
Voici une possibilité,
Le problème est que ce n'est pas le transposé comme la lmer
fonction semble le demander, et on ne sait toujours pas quelles sont les règles pour créer .
mkZt()
(recherchez-la ici ) est un bon début?