Calculer manuellement les prévisions d'effets aléatoires pour un modèle mixte linéaire

10

J'essaie de calculer les prédictions d'effet aléatoire à partir d'un modèle mixte linéaire à la main, et en utilisant la notation fournie par Wood dans les modèles additifs généralisés: une introduction avec R (pg 294 / pg 307 du pdf), je suis confus sur ce que chaque paramètre représente.

Voici un résumé de Wood.

Définir un modèle mixte linéaire

Y=Xβ+Zb+ϵ

où b N (0, ψ ) et ϵ N (0, σ 2 )ψϵσ2

Si b et y sont des variables aléatoires avec une distribution normale conjointe

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

Les prédictions RE sont calculées par

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

Σθ=ZψZT/σ2+In

En utilisant un exemple de modèle d'interception aléatoire du lme4package R, j'obtiens une sortie

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

ψ(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)

La multiplication de ces ensembles donne

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

ce qui n'est pas correct par rapport à

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

Pourquoi?

user2957945
la source

Réponses:

9

Deux problèmes (j'avoue qu'il m'a fallu environ 40 minutes pour repérer le second):

  1. σ223.51

    sig <- 23.51

    ψ39.19

    psi <- 39.19
  2. Les résidus ne sont pas obtenus avec cake$angle - predict(m, re.form=NA)mais avec residuals(m).

Mettre ensemble:

> 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

qui est similaire à ranef(m).

Je ne comprends vraiment pas ce qui est predictcalculé.


ϵ^PYP=V1V1X(XV1X)1XV1

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

b^=ψ/σ2Ztϵ^

Elvis
la source
1
yxβplot(residuals(m), cake$angle-predict(m, re.form=NULL)) ; plot(residuals(m), cake$angle-predict(m, re.form=NA))
1
Une manière en utilisant l'effet fixe, et la troisième version de l'E [b | y] ci - dessus: 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)). Merci d'avoir signalé les bons articles.
user2957945
ΣbyΣyy
ΣybψZ
Elvis, j'ai eu une autre petite réflexion à ce sujet (je sais que je suis lent). Je pense que l'utilisation des résidus comme celui-ci n'est pas vraiment sensée car elle utilise les valeurs prédites (et donc les résidus) au niveau RE pour calculer, nous les utilisons donc des deux côtés de votre équation. (il utilise donc les prédictions RE (E [b | y]) pour faire les prédictions des résidus même si ce sont les termes que nous essayons de prédire))
user2957945