Na lmer
função dentro lme4
de R
há uma chamada para a construção de uma matriz modelo de efeitos aleatórios, , como explicado aqui , páginas 7 - 9.
O cálculo de envolve produtos KhatriRao e / ou Kronecker de duas matrizes, e .
A matriz de é um bocado: "matriz Indicador de agrupamento de índices factor", mas isto parece ser uma matriz esparso com o manequim de codificação para seleccionar qual a unidade (por exemplo, pessoas com medidas repetidas) correspondentes aos níveis hierárquicos superiores são "em" para qualquer observação. O matriz parece agir como um selector de medições do nível hierárquico mais baixo, de modo que a combinação de ambos os selectores "" iria produzir uma matriz, da forma ilustrada no papel por meio de exemplo, a seguinte:
(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
Transpondo cada uma dessas matrizes e realizando uma multiplicação de Khatri-Rao:
Mas é a transposição do mesmo:
(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
Acontece que os autores fazem uso de banco de dados sleepstudy
em lme4
, mas realmente não elaborar sobre as matrizes de design que se aplicam a este estudo particular. Então, estou tentando entender como o código inventado no artigo reproduzido acima se traduziria no sleepstudy
exemplo mais significativo .
Por simplicidade visual, reduzi o conjunto de dados para apenas três assuntos - "309", "330" e "371":
require(lme4)
sleepstudy <- sleepstudy[sleepstudy$Subject %in% c(309, 330, 371), ]
rownames(sleepstudy) <- NULL
Cada indivíduo exibirá uma interceptação e inclinação muito diferentes, caso uma regressão OLS simples seja considerada individualmente, sugerindo a necessidade de um modelo de efeito misto com a hierarquia mais alta ou o nível de unidade correspondente aos sujeitos:
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)
}
A chamada de regressão de efeito misto é:
fm1<-lmer(Reaction~Days+(Days|Subject), sleepstudy)
E a matriz extraída da função produz o seguinte:
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
Parece correto, mas se for, qual é a álgebra linear por trás disso? Eu entendo as linhas de 1
ser a seleção de indivíduos como. Por exemplo, o assunto 309
está ativado para a linha de base + nove observações, então obtém quatro 1
e assim por diante. A segunda parte é claramente a medida real: 0
para a linha de base, 1
para o primeiro dia de privação de sono, etc.
Mas quais são os reais
Aqui está uma possibilidade,
lmer
mkZt()
(procure aqui ) seja um bom começo?