Calcular previsões de efeitos aleatórios manualmente para um modelo misto linear

10

Estou tentando calcular manualmente as previsões de efeitos aleatórios a partir de um modelo misto linear e usando a notação fornecida por Wood em Modelos Aditivos Generalizados: uma introdução ao R (página 294 / página 307 do pdf), estou ficando confuso sobre o que cada parâmetro representa.

Abaixo está um resumo de Wood.

Definir um modelo misto linear

Y=Xβ+Zb+ϵ

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

Se b e y são variáveis ​​aleatórias com distribuição normal conjunta

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

As previsões de ER são calculadas por

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

Σθ=ZψZT/σ2+In

Usando um exemplo de modelo de interceptação aleatória do lme4pacote R, recebo saída

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)

A multiplicação dessas juntas dá

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

o que não está correto quando comparado com

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

Por quê?

user2957945
fonte

Respostas:

9

Dois problemas (confesso que levei 40 minutos para localizar o segundo):

  1. σ223.51

    sig <- 23.51

    ψ39.19

    psi <- 39.19
  2. Os resíduos não são obtidos com cake$angle - predict(m, re.form=NA)mas com residuals(m).

Juntar as peças:

> 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

que é semelhante a ranef(m).

Eu realmente não entendo o que predictcomputa.


ϵ^PYP=V1V1X(XV1X)1XV1

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

b^=ψ/σ2Ztϵ^

Elvis
fonte
11
yxβplot(residuals(m), cake$angle-predict(m, re.form=NULL)) ; plot(residuals(m), cake$angle-predict(m, re.form=NA))
11
Uma maneira usando o efeito fixo, e a terceira versão do E [b | y] acima: 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)). Obrigado por apontar os itens corretos.
user2957945
ΣbyΣyy
ΣybψZ
Elvis, pensei outra vez sobre isso (sei que sou lento). Eu acho que usar resíduos como esse não é realmente sensato, pois usa os valores previstos (e portanto resíduos) no nível RE para calcular, então estamos usando nos dois lados da sua equação. (para que ele usa as previsões RE (E [b | y]) para fazer as previsões de resíduos, embora estes são os termos que estão tentando prever))
user2957945