Longitudinální a panelová data – NMST422

Letný semester 2024-2025 | Cvičenie 8 | 14.04.2025



Prihlásenie k SAS OnDemand: https://www.sas.com/en_us/software/on-demand-for-academics.html
Nutná je registrácia s vytvorením vlastného účtu s jedinečným identifikačným číslom a potvrdenie registrácie prostredníctvom emailu. Identifikačné číslo užívateľa (vo forme uXXX, kde XXX je samotné číslo uživateľa) sa objavuje v niektorých následujúcich SAS skriptoch. Symbol XXX v zdrojových kódoch je potrebné vždy nahradiť príslušným identifikačným číslom užívateľa.

Doporučená literatúra a ďalšie užitočné materiály




VIII. Lineárne modely s náhodnými efektami

Predpokládajme základný (lineárny) regresný model s náhodnými efektami, ktorý je vyjadrený prostredníctvom rovnice \[ \boldsymbol{Y}_i = \mathbb{X}_i\boldsymbol{\beta} + \mathbb{Z}_i\boldsymbol{b}_i + \boldsymbol{\varepsilon}_i \] kde \(\boldsymbol{Y}_i = (Y_{i1}, \dots, Y_{i n_i})^\top \in \mathbb{R}^{n_i}\) je vektor opakovaných meraní vrámci \(i\)-teho subjektu (pre \(i \in \{1, \dots, N\}\)) a \(\boldsymbol{b}_i = (b_{i1}, \dots, b_{i q})^\top \in \mathbb{R}^q\) je vektor náhodných (nepozorovaných) efektov v rámci \(i\)-teho subjektu, pre ktorý väčšinou predpokládame, že \(\boldsymbol{b}_i \sim N_q(\boldsymbol{0}, \mathbb{D})\) a náhodný vektor chýb \(\boldsymbol{\varepsilon}_{i}\) má opäť mnohorozmerné normálne rozdelenie s nulovým vektorom stredných hodnôt a určitou variančnou-kovariančnou štruktúrou. Jednotlivé vektory \(\boldsymbol{Y}_1, \dots, \boldsymbol{Y}_N\) sú vzájomné nezávislé a chybový člen \(\boldsymbol{\varepsilon}_i\) sa často v literatúre rozdeľuje na tzv. chyby merania a tzv. sériovú koreláciu.

Vyššie uvedený model býva často zapísaný aj v tvare \[ \boldsymbol{Y}_i = \mathbb{X}_i\boldsymbol{\beta} + \mathbb{Z}_i\boldsymbol{b}_i + \boldsymbol{\varepsilon}_{1 i} + \boldsymbol{\varepsilon}_{2 i}, \] kde jednotlivé stochastické členy v zápise postupne predstavujú
  • \(\boldsymbol{b}_i\) – medzi-subjektovú variabilitu (between-subject variability);
  • \(\boldsymbol{\varepsilon}_{1 i}\) – tzv. chyby merania (measurement error);
  • \(\boldsymbol{\varepsilon}_{2 i}\) – tzv. sériovu koreláciu (serial correlation).



Užitočné

  • Ak v regresnom modeli predpokládame pouze náhodný intercept, pre rozptyl (rezídua) to ma za následok predpoklad homoskedasticity (rozptyl je konštantný). Celkovú variančnú-kovariančnú maticu \(\boldsymbol{Y}_i\) resp. \(\boldsymbol{r}_i\) môžeme vyjadriť v tvare \[ Var(\boldsymbol{Y}_i) = Var(\boldsymbol{b}_i) = \nu^2 \mathbb{Z}_i\mathbb{Z}_i^\top + \sigma^2\mathbb{I}_{m_i} + \tau^2 \mathbb{H}_i, \] kde \(\mathbb{Z}_i\mathbb{Z}_i^\top\) je matica typu \(n_i \times n_i\), ktorá ma na všetkých pozíciach hodnotu jedna.

  • Korelácia medzi dvoma rezíduammi \(r_{ij}\) a \(r_{ik}\) (v rámci toho istého \(i\)-teho subjektu) je potom vyjadrená ako \[ \rho(|t_{ij} - t_{ik}|) = \frac{\nu^2 + \tau^2 g(|t_{ij} - t_{ik}|)}{\nu^2 + \sigma^2 + \tau^2}. \]

  • Pre \(j \neq k\) teda platí, že \[ \frac{1}{2}E(r_{ij} - r_{ik})^2 = \sigma^2 + \tau^2 (1 - g(|t_{ij} - t_{ik}|)) = v(u_{ijk}), \] kde posledný člen sa nazýva variogram (semi-variogram)—t.j., funkcia \(v(\cdot)\), ktorá závisí pouze na časových okamžikoch jednotlivých meraní, t.j. \(t_{i j}\) a \(t_{i k}\). Klesajúca funkcia \(g(\cdot)\) má za následok rastúci priebeh variogramu, pričom \(v(0) = \sigma^2\) a \(\lim_{u \to \infty} v(u) = \sigma^2 + \tau^2\).

1. LMM v programe SAS

Implementácia linárných regresných modelov v programe SAS:

  1. CLASS Statement
    Definícia faktorových/diskrétných premenných. Pre program SAS je nutné definovať aj čas opakovaných pozorovaní (v rámci spojitého stochastického procesu \(W_I(t)\)) ako diskrétnú premennú–t.j., pozorovania v rámci diskreétnych časových okamžikoch \(t_{i1} < \dots < t_{i n_i}\)
  2. MODEL Statement
    Špecifikácia podmienenej strednej hodnoty \(\mathbb{X}_i \boldsymbol{\beta}\)–t.j. pevných efektov. Dodatočný parameter solution zabezpečí vypísanie odhadnutých pevných efektov–odhadnutej štruktúry podmienenej strednej hodnoty. Rôzne parametrizácie pre faktorové premenné je možne ovplyvniť voľbou parametra noint.
  3. RANDOM Statement
    Špecifikácia náhodných efektov a to vrátane náhodného interceptu, ktorý musí byť uvedený explicitne. Potrebná je aj špecifikácia subjektov, v rámci ktorých sa predpokladá nezávislosť. Parameter type = upresňuje variančnú-kovariančnú maticu \(\mathbb{D}\) pre vektor náhodných efektov. V návode (help) procedúry pozri aj parametre g, gcorr, v a vcorr.
  4. REPEATED Statement
    Špcifikácia poradia opakovaných pozorovaní v rámci konkrétneho subjektu. Opakované pozorovania sú špecifikované pomocou faktorovej/ordinálnej premennej (viď timeClas v zásise nižšie).Nutná je opäť identifikácia subjektov. Pomocou parametru type = sa volí variančná-kovariačná matica pre sériouvú koreláciu opakovaných pozorovaní. V návode (help) procedúry pozri aj parametre r a rcorr.



libname sm '/home/uXXX/sasuser.v94';
filename reffile '/home/uXXX/sasuser.v94/data/sm_data2.csv';

proc import datafile=reffile
    dbms=csv
    out=sm.data
    replace;
    getnames=yes;
run;
    
data sm.data2;
set sm.data;
timeCls = time;
time2 = time * time;
run;



  • Inference pro parametre strednej hodnoty
    Inferencia o parametroch \(\boldsymbol{\beta}\in \mathbb{R}^p\) (contrast statement a voľba (napr.) chisc)
    • približné Waldove testy
    • \(t\)-testy a \(F\)-testy s korekciou pre odhad \(\widehat{\boldsymbol{\alpha}}\)
    • testy pomerom vierohodnosti (nie pre REML)
    • robustné prístupy za podmienky správne špecifikovanej podmienenej strednej hodnoty


  • Inference pro parametre variančnej-kovariančnej štruktúry
    Inferencia o parametroch \(\boldsymbol{\alpha} \in \mathbb{R}^q\) (voľba covtest v proc mixed statement)
    • približné Waldové testy
    • testy pomerom vierohodnosti



Inferencia o parametri \(\boldsymbol{\beta} \in \mathbb{R}^p\)

V nasledujúcom kóde je využitý približný Waldov test (resp. \(t\)-test a \(F\)-test) s Kenward-Roger aproximáciou počtu stupňov voľnosti.

proc mixed data = sm.data2 method = ml; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept gender / type = vc subject = id;
repeated timeCls / type = simple subject = id;

contrast 'Age vs. time' age*time2 1 /  chisq;
run;


proc mixed data = sm.data2 method = ml; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept gender / type = vc subject = id;
repeated timeCls / type = simple subject = id;

contrast 'Age vs. time' age*time2 1,
                                    age*time 1 /  chisq;
run;


proc mixed data = sm.data2 method = ml; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept gender / type = vc subject = id;
repeated timeCls / type = simple subject = id;

contrast 'Age vs. time' age*time2 1,
                        age*time 1 /  chisq;
                        
contrast 'Quadratic time' time2 1 /  chisq;
run;


proc mixed data = sm.data2 method = ml; 
class id gender timeCls;
model EDSS = gender age time time2 / solution;
random intercept gender / type = vc subject = id;
repeated timeCls / type = simple subject = id;

contrast 'Overall time' time2 1, 
                        time 1 /  chisq;
run;

Využijte metódu REML, prípadne alternatívne metódy aproximácie stupňov voľnosti a porovnajte výsledky. (robustné odhady pomocou tzv. sandwich odhadu pomocou parametru empirical v proc statemente)

Test podmodelu založený na pomere vierohodnosti spočítanom cez REML môže mať za následok aj zápornú hodnotu testovej štatistiky. Testy o \(\boldsymbol{\beta} \in \mathbb{R}^p\) parametri (t.j., štruktúra podmienenej strednej hodnoty) pomerom vierhodnosti preto nie sú valídne v prípade, že je použitá metóda REML.


Inferencia o parametri \(\boldsymbol{\alpha} \in \mathbb{R}^q\)

V pripade testov o paremtri \(\boldsymbol{\alpha} \in \mathbb{R}^q\) je vhodnejšie vyžiť metódu REML, ktorá má za následok nestranné odhady parametrov modelujúcich variačnu/kovariančnú štruktúru.

V následujúcej časti je uvažované á postupná inferencie o náhodných efektov. Niektoré testy ale nemaju logický význam…

proc mixed data = sm.data2 method = reml covtest; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept time time2 / type = un subject = id;
repeated timeCls / type = simple subject = id;
run;


proc mixed data = sm.data2 method = reml covtest; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept time time2 / type = vc subject = id;
repeated timeCls / type = simple subject = id;
run;


proc mixed data = sm.data2 method = reml covtest; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept time  / type = vc subject = id;
repeated timeCls / type = simple subject = id;
run;


proc mixed data = sm.data2 method = reml covtest; 
class id gender timeCls;
model EDSS = gender age time time2 age*time age*time2 / solution;
random intercept time  / type = un subject = id;
repeated timeCls / type = simple subject = id;
run;

Test pomerom vierohodnosti:

  /* Full model with random effect */
  proc mixed data = sm.data2 method=ml noclprint noinfo covtest ic;
    class id gender timeCls;
    model EDSS = gender age time time2 age*time age*time2 / solution;
    random intercept time time2 / type = un subject = id;
    repeated timeCls / type = simple subject = id;
    ods output FitStatistics=full_fit;
  run;

  /* Reduced model without random effect */
  proc mixed data = sm.data2 method=ml noclprint noinfo ic;
    class id gender timeCls;
    model EDSS = gender age time time2 age*time age*time2 / solution;
    random intercept time  / type = un subject = id;
    repeated timeCls / type = simple subject = id;
    ods output FitStatistics=reduced_fit;
  run;

  /* Extract -2 Log Likelihoods */
  data full_ll;
    set full_fit;
    if Description = '-2 Res Log Likelihood' then call symputx('ll_full', Value);
  run;

  data reduced_ll;
    set reduced_fit;
    if Description = '-2 Res Log Likelihood' then call symputx('ll_reduced', Value);
  run;

  /* Compute LRT and p-value */
  data lrt_result;
    ll_diff = 1527.5 - 1430.0;

    p_value = 1 - cdf('CHISQ', ll_diff, 1);

    put "----------------------------------------";
    put "Likelihood Ratio Test for Random Effect:";
    put "LRT statistic = " ll_diff;
    put "Degrees of freedom = " df;
    put "P-value = " p_value;
    put "----------------------------------------";
  run;