PROC IML;
sigma_a2 =1; sigma_e2 =2;
y={ 2.3, 2.2, 1.7, 1.8, 1.9, 1.9, 1.8, 1.7, 1.9, 1.7};
X={1 0, 1 0, 1 0, 1 0, 1 0, 1 0, 0 1, 0 1, 0 1, 0 1};
Z={ 1 0 0 0 0, 1 0 0 0 0, 0 1 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 1 0 0, 0 0 0 1 0, 0 0 0 1 0, 0 0 0 0 1, 0 0 0 0 1};
A={ 1 0 0.5 0 0.25 , 0 1 0.5 0.5 0.25 , 0.5 0.5 1 0.25 0.5 , 0 0.5 0.25 1 0.125, 0.25 0.25 0.5 0.125 1 };
G = A * sigma_a2; R = I(10) * sigma_e2;
PRINT y,X,Z; PRINT G, R;
V = Z*G*Z` + R; IV = INV(V); b = INV (X`*IV*X) * (X`*IV*y);
a = G*Z`*IV*(y-X*b); e = R *IV*(y-X*b);
PRINT b, a, e;
IR = INV(R); XRX = X`*IR*X; XRZ = X`*IR*Z; ZRX = XRZ`; ZRZG = Z`*IR*Z + INV(G);
C1 = XRX || XRZ; C2 = ZRX || ZRZG; C = C1 // C2; IC = INV(C);
XRy = X`*IR*y; ZRy = Z`*IR*y;
RHS = XRY//ZRy;
SOL = IC * RHS;
b = SOL(|1:2 ,|); a = SOL(|3:7 ,|);
e = y - X*b - Z*a;
PRINT XRX, XRZ, ZRX, ZRZG, XRy, ZRy; PRINT RHS, SOL, a, b;