Author

Irina Sokolova

Published

October 26, 2026

Výber databázy

V rámci zadania som si pre spracovanie zvolila databázu annual-enterprise-survey-2025-financial-year-provisional.

Príprava údajov

Code
library(broom)
library(knitr)
library(kableExtra)
library(ggplot2)
library(tidyr)

Načítam údaje, očistím hodnoty od oddeľovačov tisícov a prekonvertujem ich na číselný formát:

Code
cesta <- "udaje/annual-enterprise-survey-2025-financial-year-provisional.csv"
if (!file.exists(cesta)) cesta <- "annual-enterprise-survey-2025-financial-year-provisional.csv"
if (!file.exists(cesta)) {
  stop
}

udaje <- read.csv(cesta, sep = ",", dec = ".",
                  na.strings = c("", "NA"),
                  check.names = FALSE, stringsAsFactors = FALSE)

Vyčistenie stĺpca Value od čiarok

Code
udaje$Value <- as.numeric(gsub(",", "", udaje$Value))
Warning: NAs introduced by coercion

Vyberiem rok 2025 a úroveň agregácie Level 3, aby som mala jednotlivé odvetvia

Code
udaje.2025 <- udaje[udaje$Year == 2025 & udaje$Industry_aggregation_NZSIOC == "Level 3", ]

Prevediem dáta do širokého formátu, kde premenné sú stĺpce

Code
udaje.wide <- udaje.2025 |>
  pivot_wider(
    id_cols = c(Industry_code_NZSIOC, Industry_name_NZSIOC),
    names_from = Variable_code,
    values_from = Value
  )

Premenujem vybrané kľúčové premenné pre jednoduchšiu prácu

Code
analyticke_udaje <- data.frame(
  Industry = udaje.wide$Industry_name_NZSIOC,
  Income = udaje.wide$H01,
  Expenditure = udaje.wide$H08,
  Salaries = udaje.wide$H12,
  Assets = udaje.wide$H24
)

head(analyticke_udaje) |>
  kable(format = "html", digits = 2, row.names = FALSE,
        caption = "Prvých šesť odvetví vo vybraných finančných údajoch (v mil. USD)") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Prvých šesť odvetví vo vybraných finančných údajoch (v mil. USD)
Industry Income Expenditure Salaries Assets
Horticulture and Fruit Growing 6344 5794 1104 23062
Sheep, Beef Cattle and Grain Farming 13758 12284 1267 72323
Dairy Cattle Farming 21624 16780 2259 79119
Poultry, Deer and Other Livestock Farming 2590 2363 338 8561
Forestry and Logging 6647 6695 450 35095
Fishing and Aquaculture 1853 1694 304 3069

Chýbajúce hodnoty

Zistím počty chýbajúcich hodnôt:

Code
chybajuce <- data.frame(
  Premenna = names(analyticke_udaje),
  Pocet_NA = colSums(is.na(analyticke_udaje))
)

chybajuce |>
  kable(format = "html", col.names = c("Premenná", "Počet chýbajúcich hodnôt"),
        row.names = FALSE, caption = "Chýbajúce hodnoty pred doplnením") |>
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Chýbajúce hodnoty pred doplnením
Premenná Počet chýbajúcich hodnôt
Industry 0
Income 0
Expenditure 0
Salaries 0
Assets 0

Chýbajúce hodnoty vysvetľujúcich premenných doplním mediánom:

Code
analyticke_udaje.povodne <- analyticke_udaje
analyticke_udaje <- analyticke_udaje[!is.na(analyticke_udaje$Income), ]

for (premenna in c("Expenditure", "Salaries", "Assets")) {
  median_premennej <- median(analyticke_udaje[[premenna]], na.rm = TRUE)
  if (!is.finite(median_premennej)) stop("Premennú nemožno doplniť mediánom.")
  chyba <- is.na(analyticke_udaje[[premenna]])
  analyticke_udaje[[premenna]][chyba] <- median_premennej
}

premenne <- c("Income", "Expenditure", "Salaries", "Assets")
opis <- data.frame(
  Premenna = premenne,
  Minimum = sapply(analyticke_udaje[premenne], min),
  Median = sapply(analyticke_udaje[premenne], median),
  Priemer = sapply(analyticke_udaje[premenne], mean),
  Maximum = sapply(analyticke_udaje[premenne], max)
)

opis |>
  kable(format = "html", digits = 2, row.names = FALSE,
        col.names = c("Premenná", "Minimum", "Medián", "Priemer", "Maximum"),
        caption = "Opisná štatistika po doplnení chýbajúcich hodnôt") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Opisná štatistika po doplnení chýbajúcich hodnôt
Premenná Minimum Medián Priemer Maximum
Income 106 10505 16820.74 92621
Expenditure 97 8828 14709.96 61897
Salaries 13 1617 2865.57 22648
Assets 106 12715 62782.72 1511311

Graf

Zistím vzťah medzi celkovými výdavkami (Expenditure) a celkovými príjmami (Income):

Code
graf_financie <- ggplot(analyticke_udaje, aes(x = Expenditure, y = Income)) +
  geom_point(color = "lightblue4", size = 2, alpha = 0.75) +
  labs(x = "Celkové výdavky (mil. USD)", y = "Celkové príjmy (mil. USD)") +
  theme_minimal(base_size = 13)

graf_financie

Jednoduchá lineárna regresia

Odhadnem jednoduchý model, kde vysvetľujem príjmy pomocou výdavkov:

Code
model1 <- lm(Income ~ Expenditure, data = analyticke_udaje)
vysledky1 <- tidy(model1)

vysledky1[c("term", "estimate")] |>
  kable(format = "html", digits = 3, row.names = FALSE,
        col.names = c("Člen modelu", "Odhad koeficienta"),
        caption = "Jednoduchá regresia: Príjmy a Výdavky") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Jednoduchá regresia: Príjmy a Výdavky
Člen modelu Odhad koeficienta
(Intercept) -831.114
Expenditure 1.200

Regresná priamka v grafe

Code
graf_financie +
  geom_abline(intercept = coef(model1)["(Intercept)"],
              slope = coef(model1)["Expenditure"],
              color = "red4", linewidth = 1)

Viacnásobná lineárna regresia

Rozšírim model o mzdové náklady (Salaries) a celkové aktíva (Assets):

Code
model <- lm(Income ~ Expenditure + Salaries + Assets, data = analyticke_udaje)
vysledky <- tidy(model)

vysledky[c("term", "estimate")] |>
  kable(format = "html", digits = 5, row.names = FALSE,
        col.names = c("Člen modelu", "Odhad koeficienta"),
        caption = "Viacnásobná regresia: Výdavky, Mzdy a Aktíva") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Viacnásobná regresia: Výdavky, Mzdy a Aktíva
Člen modelu Odhad koeficienta
(Intercept) 211.32988
Expenditure 1.01126
Salaries 0.14648
Assets 0.02093

Stručný súhrn modelu pomocou glance

Code
suhrn <- glance(model)
suhrn[c("nobs", "r.squared", "sigma")] |>
  kable(format = "html", digits = c(0, 3, 2), row.names = FALSE,
        col.names = c("Počet odvetví", "R²", "Odhad SD chyby"),
        caption = "Základné charakteristiky viacnásobného modelu") |>
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Základné charakteristiky viacnásobného modelu
Počet odvetví R² Odhad SD chyby
46 0.998 903.28

Skutočná hodnota, predikcia a rezíduum

Code
porovnanie <- data.frame(
  Odvetvie = analyticke_udaje$Industry,
  Skutocnost = analyticke_udaje$Income,
  Predikcia = fitted(model),
  Reziduum = residuals(model)
)

head(porovnanie, 8) |>
  kable(format = "html", digits = 2, row.names = FALSE,
        col.names = c("Odvetvie", "Skutočnosť", "Predikcia", "Rezíduum"),
        caption = "Skutočné a predikované hodnoty príjmov v mil. USD") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Skutočné a predikované hodnoty príjmov v mil. USD
Odvetvie Skutočnosť Predikcia Rezíduum
Horticulture and Fruit Growing 6344 6714.98 -370.98
Sheep, Beef Cattle and Grain Farming 13758 14333.01 -575.01
Dairy Cattle Farming 21624 19167.17 2456.83
Poultry, Deer and Other Livestock Farming 2590 2829.63 -239.63
Forestry and Logging 6647 7782.19 -1135.19
Fishing and Aquaculture 1853 2033.17 -180.17
Agriculture, Forestry and Fishing Support Services and Hunting 7372 7459.05 -87.05
Beverage and Tobacco Product Manufacturing 8063 8476.87 -413.87

Predikcia pre zadanú hodnotu

Vypočítam predikciu príjmov pre vybrané hodnoty výdavkov:

Code
nove_udaje <- data.frame(Expenditure = c(5000, 10000, 20000))
nove_udaje$Predikcia <- predict(model1, newdata = nove_udaje)

nove_udaje |>
  kable(format = "html", digits = 2, row.names = FALSE,
        col.names = c("Výdavky (mil. USD)", "Predikcia príjmov (mil. USD)"),
        caption = "Predikcie jednoduchého regresného modelu") |>
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Predikcie jednoduchého regresného modelu
Výdavky (mil. USD) Predikcia príjmov (mil. USD)
5000 5168.85
10000 11168.82
20000 23168.76

Malé cvičenia

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

Vysvetľovaná premenná: Income - celkové príjmy podnikov - kód H01.

Vysvetľujúce premenné: Expenditure - výdavky - H08, Salaries - mzdy - H12 a Assets - aktíva - H24.

2. Odhadnite jednoduchý model Life.expectancy ~ GDP. Pomocou tidy() získajte koeficienty, zobrazte ich pomocou kable() a kable_styling() a pomocou ggplot2 nakreslite bodový graf s regresnou priamkou.

Code
model_assets <- lm(Income ~ Assets, data = analyticke_udaje)
tidy(model_assets)[c("term", "estimate")] |>
  kable(format = "html", digits = 4, row.names = FALSE,
        caption = "Jednoduchá regresia: Príjmy a Aktíva") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Jednoduchá regresia: Príjmy a Aktíva
term estimate
(Intercept) 13213.9072
Assets 0.0574
Code
ggplot(analyticke_udaje, aes(x = Assets, y = Income)) +
  geom_point(color = "darkblue", size = 2, alpha = 0.75) +
  geom_smooth(method = "lm", color = "red4", se = FALSE) +
  labs(x = "Aktíva (mil. USD)", y = "Príjmy (mil. USD)") +
  theme_minimal(base_size = 13)
`geom_smooth()` using formula = 'y ~ x'

3. Vysvetlite koeficient Expenditure v jednoduchom aj viacnásobnom modeli

V jednoduchom modeli - vyjadruje celkový priemerný nárast príjmov spojený s rastom celkových výdavkov o 1 milión USD.

Vo viacnásobnom modeli - vyjadruje parciálny vplyv výdavkov na príjmy pri rovnakých ostatných premenných. V reálnom prostredí rastú výdavky často spoločne s majetkom a mzdami, a model takto izoluje čistý efekt samotných výdavkov.

4. Pomocou model1 vypočítajte predikciu pre Expenditure = 10000. Overte ju ručným dosadením do odhadnutej rovnice.

Code
pred_10000 <- predict(model1, newdata = data.frame(Expenditure = 10000))
print(pred_10000)
       1 
11168.82 
Code
coefs <- coef(model1)
manual_pred <- coefs["(Intercept)"] + coefs["Expenditure"] * 10000
print(manual_pred)
(Intercept) 
   11168.82 

5. Nájdite v tabuľke porovnanie jednu krajinu s kladným a jednu so záporným rezíduom. Vysvetlite význam znamienka.

Code
porovnanie <- data.frame(
  Odvetvie = analyticke_udaje$Industry,
  Skutocnost = analyticke_udaje$Income,
  Predikcia = fitted(model1),
  Reziduum = residuals(model1)
)

head(porovnanie, 6) |>
  kable(format = "html", digits = 2, row.names = FALSE,
        col.names = c("Odvetvie", "Skutočnosť", "Predikcia", "Rezíduum"),
        caption = "Skutočné a predikované príjmy s rezídiami") |>
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Skutočné a predikované príjmy s rezídiami
Odvetvie Skutočnosť Predikcia Rezíduum
Horticulture and Fruit Growing 6344 6121.65 222.35
Sheep, Beef Cattle and Grain Farming 13758 13909.61 -151.61
Dairy Cattle Farming 21624 19304.78 2319.22
Poultry, Deer and Other Livestock Farming 2590 2004.47 585.53
Forestry and Logging 6647 7202.84 -555.84
Fishing and Aquaculture 1853 1201.68 651.32

6. Vysvetlite, prečo z kladného koeficienta nemožno automaticky vyvodiť kauzálny účinok.

Kladný regresný koeficient poukazuje na silnú štatistickú závislosť - koreláciu, ale neznamená automaticky príčinnú súvislosť.

Môže existovať problém vynechaných premenných - existujú iné dôležité faktory, napr. trhová sila či dopyt, ktoré ovplyvňujú oboje.

Môže tu pôsobiť spätná väzba – vyššie príjmy umožňujú podnikom realizovať vyššie výdavky.