Code
library(broom)
library(knitr)
library(kableExtra)
library(ggplot2)
library(tidyr)V rámci zadania som si pre spracovanie zvolila databázu annual-enterprise-survey-2025-financial-year-provisional.
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:
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)udaje$Value <- as.numeric(gsub(",", "", udaje$Value))Warning: NAs introduced by coercion
udaje.2025 <- udaje[udaje$Year == 2025 & udaje$Industry_aggregation_NZSIOC == "Level 3", ]udaje.wide <- udaje.2025 |>
pivot_wider(
id_cols = c(Industry_code_NZSIOC, Industry_name_NZSIOC),
names_from = Variable_code,
values_from = Value
)Zistím počty chýbajúcich hodnôt:
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)| 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:
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)| 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 |
Zistím vzťah medzi celkovými výdavkami (Expenditure) a celkovými príjmami (Income):
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_financieOdhadnem jednoduchý model, kde vysvetľujem príjmy pomocou výdavkov:
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)| Člen modelu | Odhad koeficienta |
|---|---|
| (Intercept) | -831.114 |
| Expenditure | 1.200 |
graf_financie +
geom_abline(intercept = coef(model1)["(Intercept)"],
slope = coef(model1)["Expenditure"],
color = "red4", linewidth = 1)Rozšírim model o mzdové náklady (Salaries) a celkové aktíva (Assets):
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)| Člen modelu | Odhad koeficienta |
|---|---|
| (Intercept) | 211.32988 |
| Expenditure | 1.01126 |
| Salaries | 0.14648 |
| Assets | 0.02093 |
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)| Počet odvetví | R² | Odhad SD chyby |
|---|---|---|
| 46 | 0.998 | 903.28 |
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)| 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 |
Vypočítam predikciu príjmov pre vybrané hodnoty výdavkov:
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)| Výdavky (mil. USD) | Predikcia príjmov (mil. USD) |
|---|---|
| 5000 | 5168.85 |
| 10000 | 11168.82 |
| 20000 | 23168.76 |
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.
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)| term | estimate |
|---|---|
| (Intercept) | 13213.9072 |
| Assets | 0.0574 |
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'
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.
pred_10000 <- predict(model1, newdata = data.frame(Expenditure = 10000))
print(pred_10000) 1
11168.82
coefs <- coef(model1)
manual_pred <- coefs["(Intercept)"] + coefs["Expenditure"] * 10000
print(manual_pred)(Intercept)
11168.82
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)| 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 |
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.