---
title: "Výber databázy a úvodná špecifikácia"
author: "Irina Sokolova <br>"
date: today
format:
html:
toc: true
toc-location: left
theme: united
highlight-style: tango
embed-resources: true
code-fold: show
code-tools: true
editor:
markdown:
wrap: 72
---
## Výber databázy
V rámci zadania som si pre spracovanie na budúcich hodinách zvolila databázu **Dataset ESG and Firm Performance**. Databáza kombinuje finančné ukazovatele výkonnosti podnikov s ich hodnotením v oblastiach Environment, Social, Governance.
## Štruktúra a charakteristika dát
Zvolená databáza má charakter panelových dát a spĺňa požiadavku na usporiadanie údajov v čase:
**Časový rozsah:** Obdobie rokov **2013 – 2022** (ročné frekvencie).
**Prierezová dimenzia:** Rôzne spoločnosti z rôznych sektorov (napr. Industrial Gases, Petrol Marketing, Foam Furniture, Real Estate).
**Kľúčové premenné:**
*Identifikátory:* `YEARS`, `COMPANIES`, `REGION`, `COUNTRIES`, `STOCK EXCHANGE`
*Finančné metriky:* `TOBIN Q`, `MARKET CAPITALIZATION`, `RETURN ON ASSETS`, `DEBT TO ASSET`, `FIRM SIZE`
*ESG indexy:* `SOCIAL DISCLOSURE INDEX`, `ENVIRONMENTAL DISCLOSURE INDEX`, `GOVERNANCE DISCLOSURE INDEX`, `ESG INDEX`
## Načítanie knižníc a import dát
V tejto časti naimportujem potrebné knižnice a naštudovanú databázu obsahujúcu časové rady firiem (roky 2013–2022).
```{r}
library(tidyverse)
library(knitr)
library(kableExtra)
library(broom)
library(stringr)
library(ggplot2)
udaje <- read.csv2("Dataset ESG and Firm Performance.csv", header = TRUE, sep = ";", dec = ".")
head(udaje)
colnames(udaje)
```
## Filtrovanie a zobrazenie dát pre rok 2013
Vyfiltrujem si dáta špecificky pre rok 2013 a vytvorím prehľadnú formátovanú tabuľku vybraných ukazovateľov pomocou balíka kable.
```{r}
udaje.2013 <- udaje %>%
filter(YEARS == 2013) %>%
dplyr::select(COMPANIES, RETURN.ON.ASSETS, ESG.INDEX, DEBT.TO.ASSET, FIRM.SIZE)
head(udaje.2013, 5) %>%
kable(caption = "Ukážka vybraných firiem v roku 2013", digits = 2) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"), full_width = FALSE)
```
## Prehľadová tabuľka celého datasetu
Zobrazím komplexnejší prehľad pomocou flexibilnej tabuľky.
```{r}
library(knitr)
library(kableExtra)
kable(
udaje,
# format,
digits = 2,
# row.names = NA,
# col.names = NA,
align=c("l","c","l","r"),
caption = "Toto je tabuľka"
# label = NULL,
# format.args = list(),
# escape = TRUE,
# ...
) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center")
```
## Vizualizácia. Vzťah veľkosti firmy a ESG indexu
Skúmam, či väčšie firmy dosahujú v roku 2013 vyššie hodnoty ESG indexu.
```{r}
ggplot(udaje.2013, aes(x = FIRM.SIZE, y = ESG.INDEX)) +
geom_point(color = "cyan", alpha = 0.7) +
theme_minimal() +
labs(title = "Závislosť ESG indexu od veľkosti firmy (2013)",
x = "Veľkosť firmy (Firm Size)",
y = "ESG Index")
```
```{r}
ggplot(udaje, aes(x = factor(YEARS), y = ESG.INDEX)) +
geom_boxplot(fill = "lightblue", color = "darkred") +
labs(title = "ESG Index naprieč rokmi",
x = "Rok",
y = "ESG Index") +
theme_minimal()
```
```{r}
esg.stats <- udaje %>%
filter(YEARS %in% 2013:2016) %>%
group_by(YEARS) %>%
summarise(
n = n(),
mean = mean(ESG.INDEX, na.rm = TRUE),
sd = sd(ESG.INDEX, na.rm = TRUE),
min = min(ESG.INDEX, na.rm = TRUE),
median = median(ESG.INDEX, na.rm = TRUE),
max = max(ESG.INDEX, na.rm = TRUE),
.groups = "drop" )
esg.stats %>%
kable(digits = 2, caption = "Základné štatistiky ESG Indexu (2013–2016)") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2")
```
```{r}
model <- lm(ESG.INDEX ~ RETURN.ON.ASSETS + FIRM.SIZE + DEBT.TO.ASSET, data = udaje.2013)
# Úhľadná tabuľka koeficientov modelu pomocou balíka broom a kableExtra
coef.tbl <- tidy(model, conf.int = TRUE) %>%
mutate(
term = dplyr::recode(term,
"(Intercept)" = "Intercept",
"RETURN.ON.ASSETS" = "Return on Assets",
"FIRM.SIZE" = "Firm Size",
"DEBT.TO.ASSET" = "Debt to Asset" ),
stars = case_when(
p.value < 0.001 ~ "***",
p.value < 0.01 ~ "**",
p.value < 0.05 ~ "*",
p.value < 0.1 ~ "·",
TRUE ~ "" ) ) %>%
transmute(
Term = term,
Estimate = estimate,
`Std. Error` = std.error,
`t value` = statistic,
`p value` = p.value,
`95% CI` = str_c("[", round(conf.low, 3), ", ", round(conf.high, 3), "]"),
Sig = stars )
coef.tbl %>%
kable(digits = 3, caption = "OLS Regresné koeficienty") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
footnote(general = "Signif. kódy: *** p<0.001, ** p<0.01, * p<0.05, · p<0.1.", threeparttable = TRUE)
```
## Načítanie knižníc a import dát s ChybnouDatabazou.
V tejto časti naimportujem potrebné knižnice a budem pracovať s ChybnouDatabazou.
```{r}
library(tidyverse)
library(knitr)
library(kableExtra)
library(broom)
library(stringr)
library(ggplot2)
udaje <- read.csv2("ChybnaDatabaza.csv", header = TRUE, sep = ";", dec = ".")
head(udaje)
colnames(udaje)
```
```{r}
data_row <- read.csv2(
"ChybnaDatabaza.csv",
header = TRUE,
sep = ";",
dec = ".",
na.strings = c("", "NA"),
stringsAsFactors = FALSE
)
head(data_row)
kable(
head(data_row, 5),
digits = 2,
caption = "Ukážka prvých záznamov z chybnej databázy"
) %>%
kable_styling(
bootstrap_options = c("striped", "hover", "condensed", "responsive"),
full_width = FALSE,
position = "center"
)
```
## Úprava a skrátenie názvov premenných
Názvy stĺpcov upravím a skratím pre lepšiu prehľadnosť v modeloch a grafoch, pričom si vytvorím porovnávaciu tabuľku premenných.
```{r}
library(dplyr)
old_names <- names(data_row)
data_row <- data_row %>%
rename_with(~ abbreviate(.x, strict = FALSE))
names(data_row) <- make.unique(names(data_row))
comparison <- data.frame(
Original_Name = old_names,
Shortened_Name = names(data_row)
)
print(comparison)
```
## Imputácia chýbajúcich údajov
Skontrolujem výskyt chýbajúcich hodnôt v datasete, vizualizujem ich vzorec a následne vykonám vícenásobnú imputáciu chýbajúcich údajov pomocou knižnice mice.
```{r}
library(mice)
library(VIM)
print("Počet chýbajúcich údajov za jednotlivé premenné:")
colSums(is.na(data_row))
md.pattern(data_row)
aggr(data_row, bars = FALSE, col = c('navyblue', 'red'), numbers = TRUE, sortVars = TRUE)
imp <- mice(data_row, seed = 123)
udaje_imputovane <- complete(imp, 1)
data_row <- udaje_imputovane
head(data_row)
rm(imp)
rm(udaje_imputovane)
print("Počet chýbajúcich údajov po imputácii:")
colSums(is.na(data_row))
```
## Vizualizácia vyčistených a imputovaných dát
Vytvorím bodový graf pre rok 2013 a boxplot pre vývoj ESG indexu naprieč rokmi na základe upravených dát.
```{r}
library(dplyr)
udaje.2013 <- data_row %>%
filter(YEAR == 2013) %>%
dplyr::select(RETU, ESG., DEBT, FIRM)
ggplot(udaje.2013, aes(x = FIRM, y = ESG.)) +
geom_point(color = "darkcyan", alpha = 0.7) +
theme_minimal() +
labs(title = "ESG index v roku 2013",
x = "Veľkosť firmy",
y = "Score")
ggplot(data_row, aes(x = factor(YEAR), y = ESG.)) +
geom_boxplot(fill = "blue", color = "yellow4") +
labs(
title = "ESG Index by YEAR",
x = "Year",
y = "ESG Index" ) +
theme_minimal()
```
## Štatistické testovanie a regresia
Porovnanie priemerov ESG indexu medzi rokmi 2013 a 2015. Testovanie vplyvu premennej YEAR na hodnoty ESG indexu. Odhad modelu na základe imputovaných dát pre rok 2013.
```{r}
t.test.result <- t.test(
data_row$ESG.[data_row$YEAR == 2013],
data_row$ESG.[data_row$YEAR == 2015]
)
print(t.test.result)
```
```{r}
anova.result <- aov(ESG. ~ YEAR, data = data_row)
summary(anova.result)
```
```{r}
model <- lm(ESG. ~ RETU + FIRM + DEBT, data = udaje.2013)
summary(model)
```