Calcola manualmente le previsioni di effetti casuali per un modello misto lineare


10

Sto provando a calcolare manualmente le previsioni di effetti casuali da un modello misto lineare, e usando la notazione fornita da Wood in Generalized Additive Models: un'introduzione con R (pag. 294 / pag. 307 di pdf), mi sto confondendo su ciò che ogni parametro rappresenta.

Di seguito è riportato un riepilogo di Wood.

Definire un modello misto lineare

Y=Xβ+Zb+ϵ

dove b N (0, ) e N (0, )ψϵσ2

Se b e y sono variabili casuali con distribuzione normale unita

[by]N[[0Xβ],[ψΣbyΣybΣθσ2]]

Le previsioni di RE sono calcolate da

E[by]=ΣbyΣyy1(yxβ)=ΣbyΣθ1(yxβ)/σ2=ψzTΣθ1(yxβ)/σ2

doveΣθ=ZψZT/σ2+In

Usando un esempio di modello di intercettazione casuale dal lme4pacchetto R ottengo l'output

library(lme4)
m = lmer(angle ~ temp + (1 | replicate), data=cake)
summary(m)

% Linear mixed model fit by REML ['lmerMod']
% Formula: angle ~ temp + (1 | replicate)
%    Data: cake
% 
% REML criterion at convergence: 1671.7
% 
% Scaled residuals: 
%      Min       1Q   Median       3Q      Max 
% -2.83605 -0.56741 -0.02306  0.54519  2.95841 
% 
% Random effects:
%  Groups    Name        Variance Std.Dev.
%  replicate (Intercept) 39.19    6.260   
%  Residual              23.51    4.849   
% Number of obs: 270, groups:  replicate, 15
% 
% Fixed effects:
%             Estimate Std. Error t value
% (Intercept)  0.51587    3.82650   0.135
% temp         0.15803    0.01728   9.146
% 
% Correlation of Fixed Effects:
%      (Intr)
% temp -0.903

Quindi da questo, penso che = 23.51, possa essere stimato da e dal quadrato dei residui a livello di popolazione.ψ(yXβ)cake$angle - predict(m, re.form=NA)sigma

th = 23.51
zt = getME(m, "Zt") 
res = cake$angle - predict(m, re.form=NA)
sig = sum(res^2) / (length(res)-1)

Moltiplicando questi insieme si ottiene

th * zt %*% res / sig
         [,1]
1  103.524878
2   94.532914
3   33.934892
4    8.131864
---

che non è corretto rispetto a

> ranef(m)
$replicate
   (Intercept)
1   14.2365633
2   13.0000038
3    4.6666680
4    1.1182799
---

Perché?

Risposte:


9

Due problemi (confesso che ci sono voluti circa 40 minuti per individuare il secondo):

  1. Non devi calcolare con il quadrato dei residui, è stimato da REML come e non vi è alcuna garanzia che i BLUP abbiano la stessa varianza.σ223.51

    sig <- 23.51

    E questo non è ! Che è stimato comeψ39.19

    psi <- 39.19
  2. I residui non si ottengono con cake$angle - predict(m, re.form=NA)ma con residuals(m).

Mettendolo insieme:

> psi/sig * zt %*% residuals(m)
15 x 1 Matrix of class "dgeMatrix"
         [,1]
1  14.2388572
2  13.0020985
3   4.6674200
4   1.1184601
5   0.2581062
6  -3.2908537
7  -4.6351567
8  -4.5813846
9  -4.6351567
10 -3.1833095
11 -2.1616392
12 -1.1399689
13 -0.2258429
14 -4.0974355
15 -5.3341942

che è simile a ranef(m).

Davvero non capisco cosa predictcalcola.


PS. Per rispondere alla tua ultima osservazione, il punto è che usiamo i "residui" come un modo per ottenere il vettore dove . Questa matrice viene calcolata durante l'algoritmo REML. È correlato ai BLUP di termini casuali di e ϵ^PYP=V1V1X(XV1X)1XV1

ϵ^=σ2PY
b^=ψZtPY.

Quindi .b^=ψ/σ2Ztϵ^


1
Grazie Elvis. Sto lottando un pochino per allineare i valori che hai usato alle equazioni precedenti, tuttavia, sembra che ci siano molti modi per scuoiare un gatto. I residui che trovo un po 'sorprendenti in quanto ho pensato che dovrebbe essere , (effetto fisso) mentre i residui vengono calcolati usando gli effetti casuali. (vedi la differenza tra ). yxβplot(residuals(m), cake$angle-predict(m, re.form=NULL)) ; plot(residuals(m), cake$angle-predict(m, re.form=NA))
user2957945

1
Un modo utilizzando l'effetto fisso, e la terza versione di E [b | y] sopra: z = getME(m, "Z") ; big_sig = solve(((z * psi) %*% zt ) / sig + diag(270)) ; psi/sig * zt %*% big_sig %*% (cake$angle-predict(m, re.form=NA)). Grazie per aver segnalato gli articoli corretti.
user2957945

Un'ultima Q se posso, posso ottenere o direttamente dall'output? ΣbyΣyy
user2957945

Non è pari a ? ΣybψZ
Elvis,

Elvis, ho avuto un altro pensiero su questo (so di essere lento). Penso che usare i residui in questo modo non sia davvero sensato in quanto utilizza i valori previsti (e quindi i residui) a livello di RE per calcolare, quindi lo stiamo usando su entrambi i lati dell'equazione. (quindi utilizza le previsioni di RE (E [b | y]) per fare le previsioni dei residui anche se questi sono i termini che stiamo cercando di prevedere))
user2957945
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.