Dôležitou súčasťou každého štatistika alebo človeka pracujúceho v oblasti dátovej analýzi je spísanie záverečného reportu (prezentácie). Okrem číselných výstupov z regresie (odhady, konfidenčné intervaly a pod.) je veľmi dôležité výsledok reprezentovať vhodným obrázkom.

U viacerých ľudí som si všimol isté pochybenia pri tvorení prezentačných obrázkov. Malé nedostatky dokážu celkovo pokaziť dojem z inak výborne odvedenej práce. Týmto príspevkom by som rád poukázal na základy, ktoré je potrebné vykonať pri tvorení takéhoto obrázku.

Vhodným balíčkom na vytváranie grafickej vizualizácie je ggplot2. Pravidelné aktualizácie robia z balíčka kvalitný a nestarnúci nástroj na profesionálnu vizualizáciu. Nasledujúce kroky budú zamerané výhradne na tento balíček.


Regresný model

Pre ilustráciu si vezmime dáta teengamb z knižnice faraway a fitnime regresný model.

## 
## Call:
## lm(formula = gamble ~ sex + income + status, data = teengamb)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -48.682 -12.169  -0.268   9.161  97.728 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  13.0315    15.8676   0.821  0.41603    
## sex1        -24.3393     8.1274  -2.995  0.00454 ** 
## income        4.9280     1.0352   4.760 2.21e-05 ***
## status       -0.1496     0.2413  -0.620  0.53856    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 22.92 on 43 degrees of freedom
## Multiple R-squared:  0.5058, Adjusted R-squared:  0.4713 
## F-statistic: 14.67 on 3 and 43 DF,  p-value: 1.014e-06

Poznámka: V tomto texte sa nebudem zaoberať vhodnosťou modelu, signifikanciu a pod.


Reprezentatívny obrázok regresného modelu

Máme za úlohu ukázať ako súvisí pohlavie, príjem a socio-ekonomický status na gambling mladých vo Veľkej Británii.

Voľba vhodného prediktora

Prvý krok pri viacrozmernej regresie je správne si zvoliť prediktor ku odozve. Obrázok sa kreslí hlavne podľa toho, čo sa vám zdá najzaujímavejšie. Pozrime sa, čo máme k dizpozícii my:

  • pohlavie - binárna premenná sa na reprezentovanie fakt nehodí (aj keď som sa už stretol aj stým lol)
  • príjem - reálna premenná a veľmi vhodná na použitie, ešte k tomu vzhľadom na význam sa príjem často používa (lebo peniaze zaujímajú každého)
  • socio-ekonomický status - celočíselná premenná, taktiež vhodná, ak nadobúda “veľa” hodnôd (v našom prípade len 10)

Najvhodnejšie je si dodatočne každého adepta pred voľbou vykresliť, tak ako som to urobil ja. Z vyššie uvedených nám ako víťaz vychádza príjem, hneď z viacerých dôvodov. Je to reálna premenná reflektujúca zaujímavú otázku peňazí a je signifikantná, pričom jej konkurent, socio-ekonomický status, nadobúda veľký podiel nizkych hodnôt a podobne (pri celočíselnej premennej veľmi nevhodné na ilustráciu).

Začnime od začiatku a nakreslime si prvý náčrt zatiaľ bez regresie.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income)) + 
  geom_point()

Zakomponovanie prediktorov pomocou bodov.

Body na obrázku sú nevýrazné a niektoré sa dokonca prekrývajú. Všeobecne body môžeme od seba navzájom odlíšiť podľa farby, tvaru, jasu a veľkosti.

V našom modely sa nachádza binárna (faktorová) premenná pohlavie vhodná na zakomponovanie. V prípade faktorovej premennej je zaužívané odlišovať body podľa farby, ale je to vec názoru a estetiky. V našom prípade odlíšenie podľa farby maximálne vyhovuje. Najvhodnejšie je si už na začiatku farby zafixovať.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex)) +
  geom_point() + 
  scale_colour_manual(values = c("#999999", "#E69F00"))

Teraz obrázok nesie nielen informáciu o príjme, ale aj jasne odlišuje pohlavia.

Model obsahuje ešte jednu zaujímavú celočíselnú premennú socio-ekonomický status. Kedže je táto premenná usporiadaná, môžeme na dlíšenie použiť veľkosť bodu.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point() + 
  scale_colour_manual(values = c("#999999", "#E69F00"))

V tomto štátiu úpravy bodu musíme skončiť aj keby máme k dispozícii viacej premenných, akékoľvek pridanie rôzneho tvaru alebo jasu by už bolo “pretečenie kotla”. Samozrejme závisí od modelu a okolnosti. Nakoniec, prekrívanie bodov ošetrime zníženim jasu.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point(alpha = 0.6) +
  scale_colour_manual(values = c("#999999", "#E69F00"))

Popis

Veľmi podceňovaná časť u mnohých, pričom týmto “detailom” môžete veľmi pokaziť celkový dojem z prezentovaného výsleku. Osi treba vždy jednoznačne a čo najkratšie pomenovať, ideálne je pridať aj mieru.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point(alpha = 0.6) +
  scale_colour_manual(values = c("#999999", "#E69F00")) + 
  labs(y = "Gambling expenditure per year (pounds)", 
    x = "Income per week (pounds)")

Tak isto aj legendu.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point(alpha = 0.6) +
  scale_colour_manual(values = c("#999999", "#E69F00"), 
    name="Sex",
    breaks=c("0","1"),
    labels=c("Male", "Female")) + 
  labs(y = "Gambling expenditure per year (pounds)", 
    x = "Income per week (pounds)", 
    size = "Socioeconomic\n status score")

Nakoniec sa môžete pohrať aj s nastavením veľkosti písma a podobne, tu nepôjdeme až tak do detailu.

Znázornenie regresie

Vzhľdom na faktorovú premennú si náš obrázok vyžaduje vložiť dve priamky, zvlášť pre mužov a pre ženy. Pričom šikovne využijeme zafixovaných farieb a ofarbíme priamky rovnakými farbami ako body, takto nie je potrebné priamky zvlášť pomenovať.

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point(alpha = 0.6) +
  scale_colour_manual(values = c("#999999", "#E69F00"), 
    name="Sex",
    breaks=c("0","1"),
    labels=c("Male", "Female")) + 
  labs(y = "Gambling expenditure per year (pounds)", 
    x = "Income per week (pounds)", 
    size = "Socioeconomic\n status score") + 
  geom_abline(intercept = (13.0315 - 0.1496*mean(teengamb$status)),
    slope = 4.9280, 
    col="#999999") +
  geom_abline(intercept = (13.0315 - 24.3393 - 0.1496*mean(teengamb$status)),
    slope = 4.9280,
    col="#E69F00")

Zmena témy (volitelné)

Nakoniec, sivý podklad grafu v interakcii so znížením jasom bodov môže pôsobiť rušivo na bielom podklade (pre niekoho). Knižnica obsahuje celú škálu tém, kde jednoduchým príkazom zmeníte vzhľad dramaticky závisí od estetiky. Napríklad mne sa páči theme_minimal() :)

ggplot(data = teengamb, mapping = aes(y = gamble, x = income, col = sex, size = status)) + 
  geom_point(alpha = 0.6) +
  scale_colour_manual(values = c("#999999", "#E69F00"), 
    name="Sex",
    breaks=c("0","1"),
    labels=c("Male", "Female")) + 
  labs(y = "Gambling expenditure per year (pounds)", 
    x = "Income per week (pounds)", 
    size = "Socioeconomic\n status score") + 
  geom_abline(intercept = (13.0315 - 0.1496*mean(teengamb$status)),
    slope = 4.9280, 
    col="#999999") +
  geom_abline(intercept = (13.0315 - 24.3393 - 0.1496*mean(teengamb$status)),
    slope = 4.9280,
    col="#E69F00") + 
  theme_minimal()

Celkový význam obrázku

Takto zostavený obrázok nám dáva rozšírenú informáciu o vplyve príjmov, socio-ekonomickom statuse a pohlaví na gamblovanie vo Veľkej Británii. Obrázkom ľahko odprezentujeme:

Vhodne zostavený obrázok len povedal to isté čo najdete vo výpise z regresie.