Nella lmer
funzione all'interno lme4
di R
c'è 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 sleepstudy
in 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 1
come la selezione di individui piace. Ad esempio, il soggetto 309
è attivo per la linea di base + nove osservazioni, quindi ottiene quattro 1
e così via. La seconda parte è chiaramente la misurazione effettiva: 0
per il basale, 1
per 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 lmer
sembra richiedere la funzione, e non è ancora chiaro quali siano le regole per creare .
mkZt()
( cercala qui ) è un buon inizio?