Nella lmerfunzione all'interno lme4di Rc'è un invito a costruire una matrice modello di effetti casuali, , come spiegato qui , pagine 7 - 9.
Il calcolo di comporta i prodotti KhatriRao e / o Kronecker di due matrici, J_i e X_i .
La matrice è un boccone: " Matrice di indici di fattore di raggruppamento", ma sembra essere una matrice sparsa con codifica fittizia per selezionare quale unità (ad esempio, soggetti in misurazioni ripetitive) corrispondente a livelli gerarchici più alti sono "accesi" per qualsiasi osservazione. La matrice sembra agire come un selettore di misure nel livello gerarchico inferiore, in modo che la combinazione di entrambi i "selettori" produca una matrice, della forma illustrata nel documento attraverso il seguente esempio:
(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
Trasposizione di ciascuna di queste matrici ed esecuzione di una moltiplicazione Khatri-Rao:
Ma è la trasposizione:
(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
Si scopre che gli autori fanno uso del database sleepstudyin lme4, ma non elaborano realmente le matrici di progettazione mentre si applicano a questo studio particolare. Quindi sto cercando di capire come il codice inventato nel documento riprodotto sopra si tradurrebbe nell'esempio più significativo sleepstudy.
Per semplicità visiva ho ridotto il set di dati a soli tre soggetti: "309", "330" e "371":
require(lme4)
sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ]
rownames(sleepstudy) <- NULL
Ogni individuo mostrerebbe un'intercettazione e una pendenza molto diverse se una semplice regressione OLS fosse presa in considerazione individualmente, suggerendo la necessità di un modello a effetti misti con la gerarchia o il livello di unità superiore corrispondente ai soggetti:
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)
}

La chiamata di regressione ad effetto misto è:
fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)
E la matrice estratta dalla funzione produce quanto segue:
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
Sembra giusto, ma se lo è, qual è l'algebra lineare dietro di essa? Capisco le file di 1come la selezione di individui piace. Ad esempio, il soggetto 309è attivo per la linea di base + nove osservazioni, quindi ottiene quattro 1e così via. La seconda parte è chiaramente la misurazione effettiva: 0per il basale, 1per il primo giorno di privazione del sonno, ecc.
Ma quali sono le attuali matrici e e la corrispondente o , a seconda di quale è pertinente?X i Z i = ( J T i ∗ X T i ) ⊤ Z i = ( J T
Ecco una possibilità,
Il problema è che non è trasposto come lmersembra richiedere la funzione, e non è ancora chiaro quali siano le regole per creare .
mkZt()( cercala qui ) è un buon inizio?



