Letný semester 2025 | Cvičenie 2 | 03.03.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ácia prostredníctvom emailu
zadaného pri registrácii. 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. Príslušný symbol
XXX je potrebné vždy nahradiť
príslušným identifikačným číslom užívateľa.
Podobne ako v prípade štandardných (lineárnych) regresných modelov (resp. akejkoľvek štatistickej analýzy – t.j. aplikácie konkrétneho stochastického/pravdepodobnostného modelu), je štatistická analýza dat rozdelená do dvoch samostatných, ale vzájomne prepojených časti – exploratívnej analýzy a konfirmačnej analýzy (exploratory vs. confirmatory part). Exploratívna analýza využíva rôzne popisné charakteristiky (t.j., empirické odhady teoretických charakteristík) a nástroje pre vizualizáciu dat. Konfirmačná analýza (i.e., štatistická inferencia) hľadá pomocou vhodných pravdepodobnostných metód odpoveď na konkrétnu (expertnú) otázku (t.j., testuje konkrétnu nulovú hypotézu).
Hlavnou výhodou longitudinálnych dat (a modelov určených na ich analýzu) je to, že na rozdiel od (viacmenej jednoduchého/priamočiarého) cross-sekčného porovnania dvoch (rôznych a disjunktných) subpopulácii umožňujú odhadovať a porovnávať (testovať) aj (výrazne komplexnejšiu a netriviálnu) zmenu v rámci konkrétnych subjektov a to vzhľadom k (časovo/priestorovo) sa meniacím sa hodnotám nezávislých premenných popisujúcih daný subjekt. Klasická regresná analýza cross-sekčných dat umožňuje len porovnávať dve podskupiny, ktoré sa vzájomne líšia vzhľadom k hodnotám (uvažovaných) nezávislých premenných. Longitudinálne data a modely umožňujú porovnanie jednak statických (medzi-populačných) cross-sekčných rozdielov a tiež dynamických zmien v rámci konkrétnuch subjektov. Nejedná sa ale o kauzálnu analýzu.
Pre \(N \in \mathbb{N}\) nezavislých
subjektov, z ktorých každý subjekt \(i \in
\{1, \dots, N\}\) sledujeme opakovane \(n_i \in \mathbb{N}\) krát, môžeme data
reprezentovať v tvare \(\{(Y_{ij},
\boldsymbol{X}_{ij}^\top)^\top;~i = 1, \dots, N; j = 1, \dots,
n_{i}\}\). V prípade reprezentácie v zmysle \[
\{(\boldsymbol{Y}_{i}^\top, \boldsymbol{X}_{i 1}^\top, \dots,
\boldsymbol{X}_{i n_i}^\top)^\top;~i = 1, \dots, N\},
\] kde \(\boldsymbol{Y}_i = (Y_{i1},
\dots, Y_{i n_i})^\top\), môžeme dokonca (pri niektoých
dodatočných predpokladoch) hovoriť o náhodnom výbere (nezávisl é a
rovnako (združene) rozdelené náhodné vektory). Je nutné si ale uvedomiť,
že rozmer (dĺžka) náhodných vektorov \((\boldsymbol{Y}_{i}^\top, \boldsymbol{X}_{i
1}^\top, \dots, \boldsymbol{X}_{i n_i}^\top)^\top\) je pre rôzne
\(i \in \{1, \dots, N\}\) rôzna.
Obyčajný linárny regresný (tzv. “cross-sectional”) model môžeme formulovať ako \[ Y_{i 1} = \boldsymbol{x}_{i 1}^\top \boldsymbol{\beta}_{CS} + \varepsilon_{i 1}, \qquad i = 1, \dots, N, \] pre vektor neznámych parametrov \(\boldsymbol{\beta}_{CS} \in \mathbb{R}^p\). Príslušný ohad \(\widehat{\boldsymbol{\beta}}_{CS}\) lze po jednotlivých zložkách interpretovať ako odhadovaný očakávaný rozdiel (i.e., odhad rozdielu v teoretických stredných hodnotách) medzi dvoma podskupinami, ak je rozdiel príslušného regresoru (jeden konkrétny element v \(\boldsymbol{x}_{i 1}\)) jednotkový a ostatné hodnoty regresorov (zvyšných elementov \(\boldsymbol{x}_{i 1}\)) sú rovnaké.
Na druhej strane, jednoduchý model pre longitudinálne data môžeme zapísať aj v tvare \[ Y_{i j} = \boldsymbol{x}_{i 1}^\top \boldsymbol{\beta}_{CS} + (\boldsymbol{x}_{i j} - \boldsymbol{x}_{i 1})^\top \boldsymbol{\beta}_{L} + \varepsilon_{i j}. \qquad i = 1, \dots, N; j = 1, \dots, n_i, \] kde celkový počet pozorovaní je \(\sum_{i = 1}^N n_{i}\). Model ale okrem odhadu pre vektorový parameter \(\boldsymbol{\beta}_{CS}\) (ktorý má ekvivalentnú interpretáciu ako v prípade obýčajného regresného modelu vyššie) umožňuje odhadnúť aj vektorový parameter \(\boldsymbol{\beta}_L\). Interpretácia tohto parametru je ale už specifická pre daný subjekt a vyjadruje zmenu v rámci daného subjektu \(i \in \{1, \dots, N\}\). Príslušný odhad \(\widehat{\boldsymbol{\beta}}_{L}\) môžeme po jednotlivých zložkách interpretovať ako očakávanú zmenu v rámci daného subjektu v čase, ak sa príslušný regresor zmení v čase o jednotku.
Pre ilustráciu použijeme datový súbor
pig_weights.csv, ktorý udáva váhu u 48
ošípaných, ktoré boli postupne merané po dobu 9 týždňov
(tzv.
follow-up period, teda obdobie, počas ktorého boli subjekty opakovane
sledované, je 9 týždňov) – avšak nejedná sa nutné o stejných 9 týždňov.
Do programu SAS data načítame následujúcim príkazom:
libname weight '/home/uXXX/sasuser.v94';
filename reffile '/home/uXXX/sasuser.v94/data/pig_weights.csv';
proc import datafile=reffile
dbms=csv
out=weight.data
replace;
getnames=yes;
run;
proc print datafile = weight.data;
run;
Samostatne sa podívajte na niektoré základné popisné charakteristiky spočítané z dat. Pre ilustráciu niektorých popisných charakteristík poslúži napr. aj následujúci graf. Pokúste sa ale vytvoriť aj niekoľko ďalších grafov a obrázkov samostatne.
proc sgscatter data=weight.data;
matrix weight week /
ellipse=(type=mean)
diagonal=(histogram kernel);
run;
V nasledujúcej časti sa špecificky zameriame na vizualizáciu datového
súboru vhľadom k jeho časovo-zavislej štruktúre a tzv.
subject-specific longitudinálnych profilov.
Porovnajte následujúce grafické výstupy:
proc sgscatter data=weight.data;
plot weight * week ;
run;
proc sgscatter data=weight.data;
plot weight * week / group = id;
run;
proc sgplot data=weight.data;
series y=weight x=week /group=id;
run;
Podívajte sa na základnú syntax procedrúry
PROC sgscatter
napr. na
tejto
stránke a analogicky tiež na syntax procedúry
PROC sgplot
napr. na
tejto
stránke.
Jednoduché longitudinálne profily nie vždy dobre poslúžia k tomu, aby
sme získali dôležité informácie o (časovom) vývoji konkrétneho
jednotlivca vzhľadom k celkovej skupine. Špeciálne v prípadoch, keď je
uvažovných subjektov príliš mnoho, je niekedy užitočné zvážiť aj graf s
tzv. štandardizovanými longitudinálnymi profilmi.
Jedna z možnosti, ako štandardizované longitudinálne profily získať v programe SAS, je v niekoľkých krokoch uvedená v následujúcich bodoch:
K vytvoreniu štandardizovaných profilov potrebujeme v prvom rade vhodné popisné charakteristiky spočítané z dat. Konkrétne výberové priemery a smerodatné odchýlky v jednotlivých (časových) meraniach. Vytvorenie popisných charakteristík (agregované data vzhľadom k jednotlivým týždňom follow-up obdobia) získame napr. následujúcim spôsobom:
proc means data=weight.data mean std;
class week;
var weight;
output out=summary mean = MeanValue std = StdValue;
run;
proc print datafile = summary;
run;
V ďalšom kroku potrebujeme priradiť jednotlivé agregované (empirické) charakteristiky k jednotlivým pozorovaniam (t.j., vhodne prepojiť dva datove súbory). V programe SAS je pre tento krok kľúčové správne usporiadanie jednolivých pozorovaní – v tomto konkrétnom prípade ide o usporiadanie oboch datových súborov podľa premennej, ktorá identifikuje jednotlivé týždne (premenná week):
proc sort data=weight.data; by week; run;
proc sort data=summary; by week; run;
Zlúčenie oboch datových súborov dohromady a opätovne preusporiadanie podľa jednotlivých subjektov (ako v pôvodných datach):
data weight.dataStd;
merge summary weight.data ;
by week;
run;
proc sort data=weight.dataStd; by id; run;
V aktuálnom datovom súbore už v podstate priamočiaro a jednoducho (pomocou lineárnej kombinácie už existujúcich premenných) vytvoríme novú premennú, ktorá bude obsahovať štandardizované profily. Na záver štandardizované profily vykreslíme:
data weight.dataStd;
set weight.dataStd;
weightStd = (weight - MeanValue)/StdValue;
run;
proc print datafile = weight.dataStd;
run;
proc sgplot data=weight.dataStd;;
series y=weightStd x=week /group=id;
run;
Graf štandardizovaných rezíduí je možné napríklad použíť k nahliadnutiu na rezídua, prípadne na overenie niektorých predpokladov súvisiacich s náhodnými chybami.
ods graphics on;
proc loess data=weight.dataStd;
model weightStd=week;
run;
V tejto časti použijeme o niečo komplexnejší datový súbor o pacientoch so sklerózou multiplex (roztroušená skleróza). Podkladový datový súbor je možné stiahnúť ako csv súbor (následne je potrebné súbor uploadovať do SAS OnDemand a pomocou nasledujúceho SAS kódu načítať).
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;
proc print datafile = sm.data;
run;
V praxi sa niektoré premenné rozlíšujú do dvoch skupín: tzv. subject-specific variables a tzv. time-dependent variables. V prvom prípade sa jedná o premenné, ktoré sú v čase nemenné (napr. pohlavie pacienta, vek pacienta v čase podstúpenia liečby, zdravotný stav pacienta v čase podstúpenia liečby, alebo aj napr. výskyt/nevýskyt komplikácii počas sledovania). V tom druhom prípade sa jedná o premenné, ktoré sa v rámci konkrétneho jedinca v priebehu opakovaných meraní môžu meniť (napr. hodnota EDSS, alebo opäť výskyt komplikácii zaznamenaný samostatne pri každej kontrole).
Ide o zisťovanie a vyšetrovanie vzťahov (závislostnej štruktúry) v tzv. subject-specific premenných – porovnávanie vrámci nezávislých subjektov (podskupín, sub-populácii). V prípade datového súboru s pacientami so sklerózou multiplex – napríklad EDSS (t.j., Expanded Disability Status Scale) v závislosti na pohlaví pacienta:
proc loess data = sm.data;
model EDSS = age / clm smooth=0.1 0.5 residual;;
by gender;
run;
Jedná sa o zisťovanie vplyvu/zmeny v rámci opakovaných pozorovaní – korelované pozorovania vrámci daného subjektu. Opäť v prípade datového súboru s pacientami so sklerózou multiplex – napríklad EDSS (a jeho vývoj) v závislosti na čase:
proc loess data = sm.data;
model EDSS = time / clm smooth=0.1 0.5 residual;
run;
Nemusí sa ale nutne jednať pouze o čas ako takový – t.j., premennú time. Analogicky móžeme zisťovať napr. zmenu v EDSS v závislosti na zmene hodnoty v premennej relapse:
proc sort data=sm.data; by relapse; run;
proc boxplot data=sm.data;
plot EDSS*relapse;
run;
Na záver sa opäť vrátime k datovému súboru o váhach ošípaných, ktorý
sme navyše doplnili o štandardizované profily. Vytvorené štandardizované
longitudinálne profily použijeme k tomu, aby sme nahliadli do
časovo-závislej štruktúry.
proc print datafile = weight.dataStd;
run;
Existuje samozrejme množstvo rôznych spôsobov, ako empiricky
vyšetrovať a zisťovať prípadnú závislosť medzi pozorovaniami.
Predpokládame, že jednotlivé súbjekty sú vzájomne nezávisle (malo by to
vyplývať z povahy samotného experimentu). Opakované pozorovania v rámci
konkretného jedinca ale nezávislé samozrejme nie sú. Pre následné
modelovanie (t.j., “confirmatory analysis”) je ale dôležité závislostnú
štruktúru opakovaných pozorovaní pochopiť a následne správne v modeli
ošetriť.
V prvom kroku vhodne pripravíme data. Pri analýze longitudinálnych
dat sa často používa terminológia, ktorá odkazuje na tzv.
long-data štruktúru dat, prípadne tzv. wide-data typ dat.
Data uložené v datovom súbore weight.dataStd sú reprezentované v
tzv. long-data type. Pomocou PROC transpose
ale data
môžeme reprezentovať vo wide-data formáte:
proc sort data=weight.dataStd; by id; run;
proc transpose data=weight.dataStd out=weight.dataWide;
by id;
var weightStd;
run;
Wide-data formát už môžeme priamo využiť pre spočítanie variančenej kovariačnej (resp. korelačnej) matice
proc corr data=weight.dataWide;
var COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9;
run;
prípadne tzv. matice scatterplotov, ktorá časovo-závislostnú štruktúru reprezentuje vizuálne:
proc sgscatter data=weight.dataWide;
title "Scatterplot Matrix -- Repeated observations";
matrix COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9;
run;
title;
Predchádzajúci výstup lze také porovnať s následujúcim výstupom:
proc sgscatter data=weight.dataWide;
matrix COL1 COL2 COL3 COL4 COL5 COL6 COL7 COL8 COL9 / diagonal=(histogram kernel);
run;
Pripomeňme, že pre ľubovolnú náhodnú veličinu \(X \sim F\) z nejakého (absolútne) spojitého rozdelenia s distribučnou funkciou \(F\) platí, že \[ P[X \leq x] = F(x), \qquad \forall x \in \mathbb{R}. \] Zároveň ale dostávame, že platí tiež \[ P[F(X) \leq x] = P[X \leq F^{-1}(x)] = F\Big(F^{-1}(x)\Big) = x, \qquad \textrm{pre} \quad x \in [0,1], \] kde \(F^{-1}(u)\) pre \(u \in [0,1]\) je príslučná kvantilová funkcia náhodnej veličiny \(X\) (t.j., inverzná funkcia k distribučnej funkcii \(F\)). Inými slovami, transformovaná náhodná veličina \(F(X)\) má rovnomerné (spojité) rozdelenie na intervale \([0,1]\).