Cieľ cvičenia

V tomto dokumente analyzujem multikolinearitu v regresnom modeli, ktorý vysvetľuje počet zranených pri dopravnej nehode pomocou vybraných charakteristík nehody (počet vozidiel, hodina, deň v týždni a mesiac). Cieľom je prakticky ukázať, ako multikolinearitu diagnostikovať (korelácie, VIF, condition number) a čo s ňou robiť, ak by bola problémom.

1 Úvod

Po autokorelácii a heteroskedasticite rezíduí je multikolinearita tretím závažným porušením predpokladov použitia metódy najmenších štvorcov. Pri OLS sa okrem iného predpokladá, že matica \(\mathbf{X}\) je tvorená lineárne nezávislými stĺpcami, čo zabezpečí regularitu matice \(\mathbf{X}^T\mathbf{X}\) a teda možnosť jej inverzie. Tá sa používa pri odhadoch regresných koeficientov.

V praxi sa však môže stať, že vzniká „takmer singulárna“ matica \(\mathbf{X}^T\mathbf{X}\), t. j. vysvetľujúce premenné sú navzájom veľmi podobné a existuje ich taká lineárna kombinácia, kde zvyšok \(\nu_i\) je veľmi malý.

\[ x_{il} = \alpha_0 + \alpha_1 x_{i1} + \dots + \alpha_{l-1} x_{i,(l-1)} + \alpha_{l+1} x_{i,(l+1)} + \alpha_k x_{i,k} + \nu_i \]

V takom prípade je inverzná matica \((\mathbf{X}^T\mathbf{X})^{-1}\) numericky nestabilná a na diagonále môže obsahovať veľké hodnoty. To sa následne premieta do:

  • nestability odhadov koeficientov \(\hat\beta\),
  • nadhodnotených štandardných chýb,
  • slabšej štatistickej významnosti premenných (hoci „v realite“ môžu byť dôležité).

Tento problém nazývame multikolinearita.


2 Dôsledky multikolinearity

Multikolinearita patrí medzi najčastejšie problémy viacnásobnej lineárnej regresie. Dôležité je rozlišovať, čo multikolinearita robí a čo nerobí:

  1. Nespôsobuje skreslené (biased) odhady regresných koeficientov – OLS ostáva pri splnení ostatných predpokladov nestranný.
  2. Zvyšuje štandardné chyby odhadov koeficientov, a teda aj p-hodnoty. V praxi to znamená, že premenné môžu vyzerať ako „nevýznamné“, aj keď reálne majú vplyv.
  3. Koeficienty sú nestabilné – malé zmeny v dátach môžu viesť k veľkým zmenám v odhadoch (niekedy dokonca k zmene znamienka).
  4. Interpretácia modelu je menej spoľahlivá, najmä ak sú regresory silno prepojené.
Praktický kontext (dopravné nehody)

V dátach o dopravných nehodách sa multikolinearita môže objaviť napríklad vtedy, ak sú časové premenné (hodina, deň, mesiac) prepojené cez spoločné vzorce správania (špičky, víkendy, sezónnosť) alebo ak niektoré premenné nepriamo kopírujú iné (napr. počet vozidiel súvisí s typom nehody, ktorý sa viaže na konkrétny čas).

Preto je vhodné tieto vzťahy preveriť, aj keď sa na prvý pohľad nezdajú problémové.


3 Východiskový model a údaje

Budeme pracovať s regresným modelom z predchádzajúcich cvičení, ktorého cieľom je vysvetliť počet zranených pri dopravnej nehode na základe vybraných charakteristík.

Východiskový regresný model má tvar:

\[ injuries\_total_i = \beta_0 + \beta_1 num\_units_i + \beta_2 crash\_hour_i + \beta_3 crash\_day\_of\_week_i + \beta_4 crash\_month_i + u_i \]

kde:

  • \(injuries\_total_i\) je počet zranených pri i-tej nehode,
  • \(num\_units_i\) je počet zúčastnených vozidiel,
  • \(crash\_hour_i\) je hodina nehody,
  • \(crash\_day\_of\_week_i\) je deň v týždni,
  • \(crash\_month_i\) je mesiac nehody,
  • \(u_i\) je náhodná zložka.

3.1 Načítanie a príprava údajov

Použité údaje pochádzajú z databázy dopravných nehôd (premávka). Najprv načítam dáta, vyberiem relevantné premenné a chýbajúce hodnoty nahradím mediánom (jednoduchá a stabilná imputácia, vhodná pri veľkých dátach).

Ukážka dát po výbere premenných a imputácii (prvých 8 riadkov).
injuries_total num_units crash_hour crash_month crash_day_of_week
0 2 13 7 7
0 2 0 8 1
0 3 10 12 5
5 2 19 8 4
0 2 14 8 7
2 1 0 9 4
0 2 11 12 3
1 2 14 9 4
Komentár k ukážke dát

Tabuľka vyššie ukazuje prvé riadky dát po výbere premenných a po imputácii chýbajúcich hodnôt mediánom. Týmto krokom som si zabezpečila, že regresný model bude možné odhadnúť bez toho, aby mi chýbajúce pozorovania zbytočne znižovali počet dát alebo spôsobovali chyby pri výpočtoch. Zároveň platí, že medián je voči extrémnym hodnotám stabilnejší než priemer, takže pri dátach o nehodách ide o rozumnú „bezpečnú“ voľbu.


4 Odhad základného regresného modelu

V tomto kroku odhadujem základný lineárny regresný model, kde vysvetľovanou premennou je celkový počet zranení pri nehode. Medzi vysvetľujúce premenné zaraďujem počet vozidiel a časové premenné (hodina, deň v týždni, mesiac).

Najprv si urobím „projektový“ výstup: tabuľku koeficientov a krátky prehľad kvality modelu.

Základné metriky kvality modelu.
Adj. R² AIC BIC Počet pozorovaní
0.0263 0.0262 494869.2 494930.7 209306
Odhadnuté koeficienty základného modelu (vrátane 95 % intervalov spoľahlivosti).
term estimate std.error statistic p.value conf.low conf.high
(Intercept) -0.2478 0.0111 -22.4030 0 -0.2695 -0.2262
num_units 0.3234 0.0044 74.2270 0 0.3148 0.3319
crash_hour -0.0024 0.0003 -7.9164 0 -0.0030 -0.0018
crash_month 0.0030 0.0005 6.0130 0 0.0020 0.0040
crash_day_of_week -0.0059 0.0009 -6.7182 0 -0.0076 -0.0042
Ako čítať tabuľky výsledkov

V prvej tabuľke sú súhrnné metriky kvality modelu. Najdôležitejšie sú hodnoty a Adj. R², ktoré hovoria, koľko variability v počte zranení model vysvetľuje (pri nehodách býva prirodzene veľa faktorov mimo modelu). AIC a BIC využívam hlavne na porovnanie alternatívnych špecifikácií – nižšia hodnota znamená „lepšiu“ rovnováhu medzi kvalitou prispôsobenia a zložitosťou modelu.

Druhá tabuľka obsahuje odhady koeficientov a 95 % intervaly spoľahlivosti. Zameriavam sa na znamienko (či premenná zvyšuje/znižuje očakávaný počet zranení) a na šírku intervalu (čím je užší, tým je odhad stabilnejší). Graf koeficientov nižšie tieto výsledky vizualizuje, takže sa dajú rýchlo porovnať medzi sebou.

4.1 Interpretácia výsledkov

Na základe odhadnutého modelu vidím, že najsilnejší priamy vplyv má premenná počet vozidiel v nehode (\(num\_units\)). V praxi to dáva zmysel: viac zúčastnených vozidiel znamená väčšiu pravdepodobnosť zranení a zároveň aj viac osôb, ktoré sa môžu zraniť.

Časové premenné (hodina nehody, deň v týždni a mesiac) majú zväčša menšie koeficienty, no stále môžu zachytávať systematické rozdiely v riziku nehôd (napr. dopravné špičky, sezónne obdobia alebo rozdiely medzi pracovnými dňami a víkendom). Hodnota \(R^2\) býva pri dátach o dopravných nehodách často skôr nižšia, pretože nehody ovplyvňuje veľa faktorov, ktoré v modeli nemám (počasie, typ cesty, alkohol, rýchlosť, typ vozidla a pod.). Aj „jednoduchý“ model však vie poskytnúť užitočné smerovanie a základnú kvantifikáciu vplyvov.

V grafe koeficientov vidím odhad každého regresora spolu s intervalom spoľahlivosti. Ak interval nepretína nulu, efekt je v dátach konzistentný (premenná má jasný smer vplyvu). Pri širších intervaloch je naopak vhodné byť opatrnejšia pri interpretácii, pretože odhad je citlivejší na špecifikáciu alebo vzorku.


5 Korelačná analýza

Korelácia zachytáva párové lineárne vzťahy medzi vysvetľujúcimi premennými. Ak by sme videli veľmi vysoké korelácie (napr. \(|r| > 0.8\)\(0.9\)), bol by to prvý varovný signál multikolinearity.

Korelačná matica vysvetľujúcich premenných.
Premenná num_units crash_hour crash_month crash_day_of_week
num_units 1.000 0.016 0.003 0.003
crash_hour 0.016 1.000 0.003 0.062
crash_month 0.003 0.003 1.000 -0.006
crash_day_of_week 0.003 0.062 -0.006 1.000

Interpretácia korelácií

Korelačná tabuľka a heatmap slúžia ako prvý „screening“ multikolinearity. Ak by sa niektoré dvojice premenných pohybovali veľmi blízko k ±1, znamenalo by to, že jedna premenná je takmer lineárnou kombináciou druhej. Tu však vidím skôr nízke až stredné korelácie, takže už na párovej úrovni nevyzerá model rizikovo. Heatmap je užitočný hlavne preto, že okamžite ukáže, či sa niekde netvoria „bloky“ vysoko korelovaných premenných.

Z tabuľky vidím, že korelácie medzi premennými sú nízke až stredné a výrazne pod prahmi, ktoré by typicky signalizovali problém. To je dobré znamenie: už na tejto úrovni nič nenasvedčuje tomu, že by premenné boli „takmer duplikáty“.

5.1 Grafická kontrola vzťahov

Scatterplotová matica dopĺňa korelácie o vizuálny pohľad. Hľadám najmä veľmi úzke, takmer priamkové vzťahy – tie by boli typické pre silnú multikolinearitu. Keďže takéto vzorce nepozorujem, výsledok je konzistentný s predchádzajúcou korelačnou analýzou.

Scatterplotová matica dopĺňa korelačnú tabuľku. Keby bola multikolinearita silná, očakávala by som veľmi úzke „elipsy“ alebo takmer priamkové vzťahy v niektorých pároch premenných. V grafoch však nevidím výrazné lineárne väzby, čo je konzistentné s nízkymi koreláciami.


6 VIF (Variance Inflation Factor)

Indikátorom multikolinearity je VIF. Pre premennú \(x_j\) platí:

\[ VIF_j = \frac{1}{1 - R_j^2} \]

kde \(R_j^2\) pochádza z regresie \(x_j\) na všetky ostatné vysvetľujúce premenné.

Praktické pravidlá:

  • VIF > 5 (prísnejšie) môže naznačovať problém,
  • VIF > 10 (voľnejšie) často znamená vážnejšiu multikolinearitu.
VIF pre jednotlivé vysvetľujúce premenné.
Premenná VIF
crash_hour 1.004
crash_day_of_week 1.004
num_units 1.000
crash_month 1.000

Čo znamená VIF v praxi

VIF hovorí, koľkokrát sa „nafúkne“ rozptyl odhadu koeficientu kvôli prepojeniu s ostatnými regresormi. Preto je dobré sledovať, či niektorá premenná výrazne nevyčnieva. Do grafu som pridala referenčné čiary pre hranice 5 (prísnejšie pravidlo) a 10 (voľnejšie pravidlo). Ak sú hodnoty pod týmito hranicami, multikolinearita obvykle nie je hlavný dôvod nestability koeficientov.

V mojom modeli hodnoty VIF neprekračujú kritické hranice. To znamená, že štandardné chyby koeficientov nie sú „umelo nafúknuté“ kvôli silnej podobnosti regresorov.


7 Condition Number

Condition number (index podmienenosti) zachytáva aj situácie, keď VIF nič výrazné neukáže, ale premenné sú navzájom prepojené „cyklickými“ lineárnymi vzťahmi.

Použijem vzťah:

\[ \kappa = \sqrt{\frac{\theta_{max}}{\theta_{min}}} \]

kde \(\theta\) sú vlastné čísla matice \(\mathbf{X}^T\mathbf{X}\) (bez interceptu).

Pravidlo interpretácie:

  • \(< 10\) → nízka multikolinearita
  • \(10–30\) → mierna
  • \(30–100\) → silná
  • \(> 100\) → veľmi vážna
Index podmienenosti (Condition number).
Condition.number..κ.
25.096
Vlastné čísla matice X’X (zoradené zostupne).
Vlastné.číslo..θ.
56961748.41
3304109.29
1033686.96
90441.34
Ako interpretujem Condition Number

Condition number dopĺňa VIF, pretože zachytí aj „kombinované“ lineárne závislosti medzi viacerými premennými naraz. Preto ho beriem ako druhú kontrolu: aj keď sú VIF hodnoty nízke, veľmi vysoké κ by znamenalo problém. Ak sa κ pohybuje približne v pásme 10–30, ide o miernu multikolinearitu – výsledky sú zvyčajne interpretovateľné, len je dobré vnímať citlivosť koeficientov na zmeny dát alebo špecifikácie.

Ak je hodnota \(\kappa\) približne v pásme 10–30, ide o miernu multikolinearitu. To väčšinou neznamená, že model je „zlý“, ale je dobré vnímať, že pri interpretácii jednotlivých koeficientov môže byť vyššia citlivosť na zmeny v dátach.


8 Riešenia multikolinearity

Aj keď diagnostika neukazuje závažný problém, v tejto časti ukážem typické postupy, ktoré sa v praxi používajú. Beriem to ako „návod“, čo by som urobila, keby boli indikátory výrazne vyššie.

8.1 Vynechanie premennej

Najjednoduchší zásah je vynechať premennú, ktorá spôsobuje problém. Často sa vynechá premenná s najvyšším VIF (alebo tá, ktorá je najmenej dôležitá z pohľadu interpretácie).

Porovnám 2 alternatívne modely: bez num_units a bez crash_hour.

Porovnanie kvality modelov po vynechaní premennej.
Model Adj. R² AIC BIC
Základný 0.0263 0.0262 494869.2 494930.7
Bez num_units 0.0006 0.0006 500305.7 500357.0
Bez crash_hour 0.0260 0.0260 494929.9 494981.1

Zmyslom tohto porovnania je prakticky overiť stabilitu modelu. Ak by bola multikolinearita výrazná, po vynechaní jednej premennej by sa koeficienty ostatných často výrazne zmenili (alebo by sa zásadne zmenila kvalita modelu). Ak sa metriky menia len mierne, je to signál, že základná štruktúra vzťahov je robustná.

8.2 Centrovanie a štandardizácia (škálovanie)

Štandardizácia premenných (z-skóre) môže zlepšiť numerickú stabilitu výpočtov. Použijem:

\[ x^{scale} = \frac{x - M}{\sqrt{D}} \]

kde \(M\) je priemer a \(D\) rozptyl.

Kvalita centrovaného/štandardizovaného modelu.
Adj. R² AIC BIC
0.0263 0.0262 494869.2 494930.7
VIF v centrovanom modeli.
Premenná VIF
crash_hour_c 1.004
crash_day_week_c 1.004
num_units_c 1.000
crash_month_c 1.000
Condition number v centrovanom modeli.
Condition.number..κ.
1.067

Centrovanie a štandardizácia mení jednotky premenných, takže koeficienty sa interpretujú v „štandardných odchýlkach“. V tomto dokumente to používam najmä ako diagnostický krok – či sa niečo zásadné nezmení po zlepšení numerickej stability. Ak sa VIF a condition number po štandardizácii nezhoršujú (alebo sa dokonca zlepšia), je to ďalší argument, že multikolinearita nie je kritická.

8.3 Úprava mierky so zachovaním interpretácie

Ak chcem zachovať interpretáciu a zároveň dostať koeficienty do podobných rádov, môžem upraviť jednotky (napr. „v desiatkach“).

Model s preškálovanou premennou num_units (v desiatkach).
term estimate std.error statistic p.value conf.low conf.high
(Intercept) -0.2478 0.0111 -22.4030 0 -0.2695 -0.2262
num_units10 3.2336 0.0436 74.2270 0 3.1482 3.3190
crash_hour -0.0024 0.0003 -7.9164 0 -0.0030 -0.0018
crash_month 0.0030 0.0005 6.0130 0 0.0020 0.0040
crash_day_of_week -0.0059 0.0009 -6.7182 0 -0.0076 -0.0042
VIF po preškálovaní premennej num_units.
Premenná VIF
crash_hour 1.004
crash_day_of_week 1.004
num_units10 1.000
crash_month 1.000
Condition number po preškálovaní.
Condition.number..κ.
245.38

Úprava mierky (napr. „v desiatkach“) je praktická vtedy, keď chcem zachovať interpretáciu a zároveň mať koeficienty v porovnateľných rádoch. V tomto prípade koeficient pri num_units10 hovorí, o koľko sa zmení očakávaný počet zranení pri zvýšení počtu vozidiel o 10 (nie o 1). Takáto interpretácia býva často intuitívnejšia.


9 Pokročilé metódy (voliteľné)

9.1 PCA (Principal Component Analysis)

PCA vytvára nové premenné (komponenty), ktoré sú navzájom nekorelované. V praxi to pomáha v prípadoch, keď je multikolinearita silná a nechcem „vyhodiť“ premenné, ale skôr ich skombinovať do menej dimenzií.

PCA: podiel vysvetlenej variability komponentmi.
Komponent Podiel.vysvetlenej.variability
PC1 0.2662
PC2 0.2510
PC3 0.2488
PC4 0.2339
PCA: loadings (váhy premenných v komponentoch).
Premenná PC1 PC2 PC3 PC4
num_units 0.1967 -0.6036 0.7602 0.1377
crash_hour 0.7023 -0.0382 -0.0843 -0.7058
crash_month -0.0196 -0.7732 -0.6264 0.0972
crash_day_of_week 0.6839 0.1907 -0.1501 0.6881
Kvalita regresného modelu s PC1 a PC2.
Adj. R² AIC BIC
0.012 0.012 497912.1 497953.1
Ako čítam PCA výstupy

Tabuľka „podiel vysvetlenej variability“ ukazuje, koľko informácie (variability) zachytí každá hlavná komponenta. Loadings tabuľka zas hovorí, ktoré pôvodné premenné tvoria danú komponentu najviac (vyššia absolútna hodnota = väčší vplyv). Scree plot je rýchly vizuálny nástroj: ak prvé 1–2 komponenty vysvetlia veľkú časť variability, dá sa rozumne znížiť dimenzia bez veľkej straty informácie. Model s PC1 a PC2 tu beriem ako ukážku – v praxi by sa PCA používalo najmä vtedy, ak by multikolinearita bola silná.

Zo scree plotu sa dá odčítať, či je prvá komponenta dominantná alebo či je potrebné ponechať viac komponentov. V prípade, že krivka prudko klesá na začiatku, znamená to, že prvé komponenty nesú najviac informácie.

9.2 Hrebeňová regresia (Ridge Regression)

Ridge regresia stabilizuje odhady tak, že do \(\mathbf{X}^T\mathbf{X}\) pridá penalizáciu \(\lambda\mathbf{I}\). Koeficienty sú potom „stiahnuté“ smerom k nule, čo znižuje varianciu (za cenu malého biasu).

Ridge regresia: koeficienty pre vybrané hodnoty lambda (0, 5, 10).
Premenná lambda=0 lambda=5 lambda=10
-0.2478 -0.2478 -0.2478
num_units 0.3234 0.3234 0.3233
crash_hour -0.0024 -0.0024 -0.0024
crash_month 0.0030 0.0030 0.0030
crash_day_of_week -0.0059 -0.0059 -0.0059
Interpretácia Ridge výsledkov

V ridge regresii sledujem, ako sa koeficienty menia pri rastúcej penalizácii λ. Pri λ = 0 je ridge veľmi blízko klasickej regresii, s vyšším λ sa koeficienty „sťahujú“ smerom k nule. Ridge path graf pomáha vidieť, ktoré koeficienty sa stabilizujú rýchlo a ktoré sú citlivejšie. V tomto reporte to uvádzam ako doplnok – dôležité je, že tento prístup vie v prípade silnej multikolinearity priniesť stabilnejšie odhady.


10 Zhrnutie

Čo som zistila

V tejto úlohe som analyzovala multikolinearitu v regresnom modeli, ktorý vysvetľuje počet zranení pri dopravných nehodách pomocou premenných počet vozidiel, hodina, deň v týždni a mesiac.

Korelácie medzi vysvetľujúcimi premennými sú bez extrémnych hodnôt, ktoré by naznačovali silnú lineárnu závislosť. VIF je pod bežnými kritickými hranicami, čo znamená, že štandardné chyby koeficientov nie sú nafúknuté v dôsledku multikolinearity. Condition number sa pohybuje v pásme miernej multikolinearity, ktorá však nepredstavuje vážny problém pre interpretáciu.

Skúsila som aj typické postupy riešenia (vynechanie premennej, centrovanie/štandardizácia, úprava mierok). Výsledky modelov ostali stabilné a potvrdili, že multikolinearita v tomto konkrétnom modeli nie je dominantným problémom. Záverom teda je, že zvolená špecifikácia modelu je použiteľná a interpretovateľná – multikolinearita neohrozuje hlavné výsledky.