Cvičenie 4 – Lineárna regresia a jej aplikácia

Autor

Yan Biliavskyi

# Cieľ analýzy

V tomto zadaní sa venujem analýze vzťahu medzi udržateľnosťou firiem (ESG skóre) a ich finančnou výkonnosťou. Hlavnou otázkou výskumu je zistiť, či firmy, ktoré dosahujú vyššie ESG skóre, majú zároveň aj vyššiu návratnosť aktív (ROA).

Na odpoveď na túto otázku použijem metódu lineárnej regresie (jednoduchej aj viacnásobnej) v R. Analyz z databázy `Dataset ESG and Firm Performance` za rok 2021.

# Príprava a spracovanie dát

Na začiatku načítam potrebné knižnice na spracovanie dát (`broom`, `knitr`, `kableExtra`) a vizualizáciu (`ggplot2`).

library(broom)

library(knitr)

library(kableExtra)

library(ggplot2)
# Načítanie súboru
udaje <- read.csv("Dataset ESG and Firm Performance.csv", sep = ";", dec = ".",
                  na.strings = c("", "NA"), check.names = FALSE, stringsAsFactors = FALSE)

# Úprava názvov premenných pre prácu v R
names(udaje) <- make.names(trimws(names(udaje)), unique = TRUE)

# Výber dát za rok 2021 a potrebných premenných
udaje.2021 <- udaje[!is.na(udaje$YEARS) & udaje$YEARS == 2021,
                    c("COMPANIES", "RETURN.ON.ASSETS", "ESG.INDEX", "FIRM.SIZE", "DEBT.TO.ASSET")]

# Prevod číselných stĺpcov na typ numeric
premenne_num <- c("RETURN.ON.ASSETS", "ESG.INDEX", "FIRM.SIZE", "DEBT.TO.ASSET")
udaje.2021[premenne_num] <- lapply(udaje.2021[premenne_num], as.numeric)

# Očistenie od prípadných chýbajúcich hodnôt
udaje.2021 <- na.omit(udaje.2021)

Vizuálna kontrola dát: Táto tabuľka zobrazuje prvých 6 riadkov očistenej databázy za rok 2021. Vizuálne sa uistíme, že filtrácia prebehla úspešne, prázdne hodnoty sú odstránené a potrebné stĺpce (ESG, ROA, zadĺženosť, veľkosť) sú na svojich správnych miestach.

head(udaje.2021) |>
  kable(format = "html", digits = 2, row.names = FALSE,
        caption = "Ukážka spracovaných dát firiem za rok 2021") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Ukážka spracovaných dát firiem za rok 2021
COMPANIES RETURN.ON.ASSETS ESG.INDEX FIRM.SIZE DEBT.TO.ASSET
Industrial & Medical Gases Nigeria 12.19 0.22 6.75 45.44
TotalEnergies Marketing Nigeria 40.52 0.61 8.32 80.06
Vitafoam Nig 35.54 0.31 7.50 59.31
Updc Property -21.94 0.71 7.29 59.08
University Press 2.14 0.36 6.58 29.62
Unilever Nig 1.05 0.68 8.03 39.27
  #| label: opisna-statistika
opis <- data.frame(
  Premenna = premenne_num,
  Minimum = sapply(udaje.2021[premenne_num], min),
  Median = sapply(udaje.2021[premenne_num], median),
  Priemer = sapply(udaje.2021[premenne_num], mean),
  Maximum = sapply(udaje.2021[premenne_num], max)
)

opis |>
  kable(format = "html", digits = 2, row.names = FALSE,
        caption = "Opisná štatistika premenných (2021)") |>
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Opisná štatistika premenných (2021)
Premenna Minimum Median Priemer Maximum
RETURN.ON.ASSETS -1099.68 3.68 -25.04 187.28
ESG.INDEX 0.04 0.25 0.30 0.82
FIRM.SIZE 5.26 7.12 7.21 9.38
DEBT.TO.ASSET 3.67 63.75 74.67 283.81

Čo nám táto štatistika hovorí: Vyššie uvedená tabuľka uvádza minimá, maximá, mediány a priemerné hodnoty pre každú premennú. Pomáha nám to pochopiť rozptyl dát. Môžeme napríklad vidieť, v akých medziach sa pohybuje index ESG a či v dátach nie sú nejaké anomálne extrémy (odľahlé hodnoty), ktoré by mohli neskôr skresliť náš regresný model.

  #| label: fig-esg-roa
#| fig-cap: "Vzťah medzi ESG Indexom a ziskovosťou ROA v roku 2021"
#| fig-width: 8
#| fig-height: 5
ggplot(udaje.2021, aes(x = ESG.INDEX, y = RETURN.ON.ASSETS)) +
  geom_point(color = "darkblue", size = 2, alpha = 0.7) +
  labs(x = "ESG Index", y = "RETURN ON ASSETS (%)") +
  theme_minimal(base_size = 13)

  #| label: jednoducha-regresia
model1 <- lm(RETURN.ON.ASSETS ~ ESG.INDEX, data = udaje.2021)

tidy(model1)[c("term", "estimate")] |>
  kable(format = "html", digits = 3, row.names = FALSE,
        col.names = c("Člen modelu", "Odhad koeficienta"),
        caption = "Výsledky jednoduchej regresie") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Výsledky jednoduchej regresie
Člen modelu Odhad koeficienta
(Intercept) -66.913
ESG.INDEX 137.765

Analýza grafu: Každý bod na tomto grafe predstavuje jednu konkrétnu spoločnosť. Na horizontálnej osi (X) je zobrazené jej ESG skóre a na vertikálnej osi (Y) jej ziskovosť (ROA). Tento graf slúži na prvotné vizuálne posúdenie: pozeráme sa na zhluk bodov a snažíme sa zistiť, či existuje nejaký celkový trend. Z rozloženia bodov môžeme pozorovať mierny pozitívny trend — firmy s vyšším ESG indexom dosahujú spravidla vyššiu návratnosť aktív.

  #| label: fig-regresna-priamka
#| fig-cap: "Regresná priamka vplyvu ESG Indexu na ROA"
#| fig-width: 8
#| fig-height: 5
ggplot(udaje.2021, aes(x = ESG.INDEX, y = RETURN.ON.ASSETS)) +
  geom_point(color = "darkblue", size = 2, alpha = 0.7) +
  geom_abline(intercept = coef(model1)["(Intercept)"],
              slope = coef(model1)["ESG.INDEX"],
              color = "firebrick", linewidth = 1) +
  labs(x = "ESG Index", y = "RETURN ON ASSETS (%)") +
  theme_minimal(base_size = 13)

Odhad trendu: V tomto kroku prechádzame od vizuálneho odhadu k matematickému modelu. Metódou najmenších štvorcov sme cez body preložili ideálnu priamku. Odhadnutý koeficient nám presne hovorí, o koľko percentuálnych bodov v priemere vzrastie ziskovosť ROA, ak sa rating ESG zvýši o 1 jednotku. Červená čiara na grafe následne vizualizuje tento matematický model priamo na našich reálnych dátach.

  #| label: viacnasobna-regresia
model_multi <- lm(RETURN.ON.ASSETS ~ ESG.INDEX + FIRM.SIZE + DEBT.TO.ASSET, data = udaje.2021)

tidy(model_multi)[c("term", "estimate")] |>
  kable(format = "html", digits = 4, row.names = FALSE,
        col.names = c("Člen modelu", "Odhad koeficienta"),
        caption = "Výsledky viacnásobnej regresie") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Výsledky viacnásobnej regresie
Člen modelu Odhad koeficienta
(Intercept) -148.1738
ESG.INDEX 73.4415
FIRM.SIZE 17.2677
DEBT.TO.ASSET -0.3173
  #| label: suhrn-modelu
glance(model_multi)[c("nobs", "r.squared", "sigma")] |>
  kable(format = "html", digits = c(0, 3, 3), row.names = FALSE,
        col.names = c("Počet firiem (n)", "R²", "Odhad SD chyby"),
        caption = "Súhrnné charakteristiky viacnásobnej regresie") |>
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Súhrnné charakteristiky viacnásobnej regresie
Počet firiem (n) R² Odhad SD chyby
76 0.05 148.172

Prečo používame viacnásobný model: V reálnom ekonomickom prostredí ziskovosť firmy nezávisí len od jej prístupu k ekológii a spoločnosti (ESG), ale aj od jej veľkosti a úrovne zadĺženosti. Viacnásobná regresia vytvára komplexnejší model. Odpovedá na dôležitú otázku: „Ak porovnáme dve firmy rovnakej veľkosti a s rovnakým dlhom, o koľko ziskovejšia bude tá, ktorá má lepšie ESG?“. Týmto spôsobom očisťujeme vplyv ESG od ostatných faktorov (podmienka ceteris paribus)

  #| label: rezidua
porovnanie <- data.frame(
  Firma = udaje.2021$COMPANIES,
  Skutocnost = udaje.2021$RETURN.ON.ASSETS,
  Predikcia = fitted(model_multi),
  Reziduum = residuals(model_multi)
)

head(porovnanie) |>
  kable(format = "html", digits = 2, row.names = FALSE,
        col.names = c("Firma", "Skutočnosť (ROA %)", "Predikcia (ROA %)", "Rezíduum"),
        caption = "Porovnanie skutočnosti a predikcie pre vybrané firmy") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Porovnanie skutočnosti a predikcie pre vybrané firmy
Firma Skutočnosť (ROA %) Predikcia (ROA %) Rezíduum
Industrial & Medical Gases Nigeria 12.19 -29.88 42.07
TotalEnergies Marketing Nigeria 40.52 14.89 25.63
Vitafoam Nig 35.54 -14.72 50.26
Updc Property -21.94 11.10 -33.04
University Press 2.14 -17.51 19.65
Unilever Nig 1.05 27.96 -26.91

Význam rezíduí v praxi: Žiadny model nedokáže predpovedať realitu so 100% presnosťou. Táto tabuľka berie skutočnú ziskovosť konkrétnej firmy a porovnáva ju s hodnotou, ktorú teoreticky vypočítal náš model. Rozdiel sa nazýva „rezíduum“.

1. Ktorá premenná je v našom modeli vysvetľovaná a ktoré sú vysvetľujúce?

V našom modeli je vysvetľovanou (závislou) premennou RETURN.ON.ASSETS (Ziskovosť/ROA), ktorú sa snažíme predpovedať. Vysvetľujúcimi (nezávislými) premennými sú ESG.INDEX, FIRM.SIZE (veľkosť firmy) a DEBT.TO.ASSET (zadĺženosť).

2. Vysvetlenie koeficientu ESG v jednoduchom vs. viacnásobnom modeli a podmienka “ceteris paribus”:

V jednoduchom modeli nám koeficient ukazuje len hrubý, celkový vzťah medzi ESG a ziskom. Vo viacnásobnom modeli však pridávame frázu „za inak nezmenených okolností“ (ceteris paribus), pretože model už matematicky odfiltroval vplyv veľkosti firmy a jej dlhov. Zisťujeme tak čistý vplyv ESG na ROA pri porovnaní firiem, ktoré sú rovnako veľké a rovnako zadĺžené.

3. Význam kladného a záporného rezídua v tabuľke:

4. Prečo z kladného koeficienta nemožno automaticky vyvodiť kauzálny účinok?

Kladný koeficient nám potvrdzuje iba štatistickú koreláciu (že ESG a ziskovosť rastú spoločne). Nedokazuje to však kauzalitu (príčinnosť) – teda že samotné zavedenie ESG politiky je priamou príčinou vyššieho zisku. Môže tu existovať skrytý faktor (tzv. omitted variable bias), napríklad špičkový manažment firmy, ktorý dokáže zabezpečiť aj vysoké ESG skóre, aj výborné finančné výsledky.

P.S. Dúfam, že tentoraz sa mi úloha podarila lepšie; snažil som sa, ako ste mi radili, podrobne opísať všetky svoje kroky a ich dôvody. Dúfam, že sa vám to bude páčiť. Musím však hneď povedať, že mi s úlohou veľmi pomohol Gemini, pretože som celkom nepochopil, ako ste na hodine vysvetlili tú „lineárnu regresiu“.