data<- read.csv("index.csv",check.names=FALSE)

Stiahnutie knižníc:

# Balíčky

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(stringr)
library(forcats)
library(ggplot2)
library(broom)
library(gt)

# Funkcia pick_col

pick_col <- function(df, choices) intersect(choices, names(df))[1]
#Správny výber stĺpca
fg_col <- pick_col(data, c("IndexFG", "Index finančnej gramotnosti"))
prijem_col <- pick_col(data, c("AkýjeVášmesačnýpríjem", "Aký je Váš mesačný príjem?"))
# čo sa vybralo?
fg_col; prijem_col
## [1] "IndexFG"
## [1] "AkýjeVášmesačnýpríjem"
# skuska
str(data[[fg_col]])
##  num [1:392] 10 9 10 4 1 9 9 6 9 8 ...
head(unique(data[[prijem_col]]), 10)
## [1] "1600€ a viac" "401 - 800€"   "0 - 400€"     "801 - 1000€"  "1001 - 1200€"
## [6] "1201 - 1600€"

Stredné hodnoty

Keďže v dotazníku respondenti neuvádzali presnú sumu, ale intervaly (napr. „401 – 800 €“), tak sme pomocou funkcie income_mid() premenili na stredy pásiem:

income_mid <- function(x) {
  x <- as.character(x)
  x <- stringr::str_squish(x)
  x <- stringr::str_replace_all(x, "[–—]", "-")
  x <- stringr::str_replace_all(x, "€", "")

  dplyr::case_when(
    x %in% c("0-400", "0 - 400")               ~ 200,
    x %in% c("401-800", "401 - 800")           ~ 600.5,
    x %in% c("801-1200", "801 - 1200")         ~ 1000.5,
    x %in% c("1201-1600", "1201 - 1600")       ~ 1400.5,
    stringr::str_detect(x, "^1600")            ~ 1800,  # "1600 a viac", "1600+"
    TRUE ~ NA_real_
  )
}
library(readr)

reg_df <- data %>%
  mutate(
    FG_index = parse_number(as.character(.data[[fg_col]])),
    Prijem_mid = income_mid(.data[[prijem_col]])
  ) %>%
  filter(!is.na(FG_index), !is.na(Prijem_mid))

nrow(data); nrow(reg_df)
## [1] 392
## [1] 339
summary(reg_df[, c("FG_index","Prijem_mid")])
##     FG_index        Prijem_mid    
##  Min.   : 1.000   Min.   : 200.0  
##  1st Qu.: 6.000   1st Qu.: 200.0  
##  Median : 8.000   Median : 600.5  
##  Mean   : 7.422   Mean   : 686.3  
##  3rd Qu.: 9.000   3rd Qu.:1400.5  
##  Max.   :10.000   Max.   :1800.0
var(reg_df$FG_index, na.rm = TRUE); var(reg_df$Prijem_mid, na.rm = TRUE)
## [1] 4.197274
## [1] 347172.1

Hypotézy

Definujeme hypotézy:

H0: Neexistuje štatisticky významná závislosť medzi úrovňou finančnej gramotnosti a mesačným príjmom.
H1: Existuje štatisticky významná závislosť medzi úrovňou finančnej gramotnosti a mesačným príjmom.

Regresný model

Na analýzu vzťahu medzi úrovňou finančnej gramotnosti a výškou mesačného príjmu sme použili lineárnu regresiu. Ako nezávislá premenná bol zaradený index finančnej gramotnosti, zatiaľ čo závislou premennou bol mesačný príjem

stopifnot(nrow(reg_df) > 1)
model_fg_prijem <- lm(Prijem_mid ~ FG_index, data = reg_df)
summary(model_fg_prijem)
## 
## Call:
## lm(formula = Prijem_mid ~ FG_index, data = reg_df)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -540.3 -477.5 -118.8  681.1 1248.0 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   531.10     120.29   4.415 1.36e-05 ***
## FG_index       20.92      15.63   1.339    0.182    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 588.5 on 337 degrees of freedom
## Multiple R-squared:  0.005289,   Adjusted R-squared:  0.002338 
## F-statistic: 1.792 on 1 and 337 DF,  p-value: 0.1816
confint(model_fg_prijem)
##                  2.5 %    97.5 %
## (Intercept) 294.485856 767.71836
## FG_index     -9.818684  51.65126
anova(model_fg_prijem)
## Analysis of Variance Table
## 
## Response: Prijem_mid
##            Df    Sum Sq Mean Sq F value Pr(>F)
## FG_index    1    620659  620659  1.7919 0.1816
## Residuals 337 116723512  346361

`

table(stringr::str_replace_all(stringr::str_squish(data[[prijem_col]]), "[–—]", "-"), useNA="ifany")
## 
##     0 - 400€ 1001 - 1200€ 1201 - 1600€ 1600€ a viac   401 - 800€  801 - 1000€ 
##          152           28           39           49           99           25
library(readr)

reg_df <- data %>%
  mutate(
    FG_index   = readr::parse_number(as.character(.data[[fg_col]])),
    raw_income = readr::parse_number(as.character(.data[[prijem_col]]))
  ) %>%
  mutate(
    Prijem_int = cut(raw_income,
                     breaks = c(-Inf, 400, 800, 1200, 1600, Inf),
                     labels = c("0 - 400€","401 - 800€","801 - 1200€","1201 - 1600€","1600€ a viac"),
                     include.lowest = TRUE, right = TRUE),
    Prijem_mid = dplyr::case_when(
      Prijem_int == "0 - 400€"     ~ 200,
      Prijem_int == "401 - 800€"   ~ 600.5,
      Prijem_int == "801 - 1200€"  ~ 1000.5,
      Prijem_int == "1201 - 1600€" ~ 1400.5,
      Prijem_int == "1600€ a viac" ~ 1800,
      TRUE ~ NA_real_
    )
  ) %>%
  filter(!is.na(FG_index), !is.na(Prijem_mid))
#kontrola
nrow(data); nrow(reg_df)
## [1] 392
## [1] 392
summary(reg_df[, c("FG_index","Prijem_mid")])
##     FG_index        Prijem_mid    
##  Min.   : 1.000   Min.   : 200.0  
##  1st Qu.: 6.000   1st Qu.: 200.0  
##  Median : 8.000   Median : 600.5  
##  Mean   : 7.352   Mean   : 678.9  
##  3rd Qu.: 9.000   3rd Qu.:1000.5  
##  Max.   :10.000   Max.   :1400.5
model_fg_prijem <- lm(Prijem_mid ~ FG_index, data = reg_df)

summary(model_fg_prijem)
## 
## Call:
## lm(formula = Prijem_mid ~ FG_index, data = reg_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -491.31 -477.22  -81.42  332.66  751.44 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  644.364     87.509   7.363 1.07e-12 ***
## FG_index       4.694     11.453   0.410    0.682    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 471.6 on 390 degrees of freedom
## Multiple R-squared:  0.0004306,  Adjusted R-squared:  -0.002132 
## F-statistic: 0.168 on 1 and 390 DF,  p-value: 0.6821
confint(model_fg_prijem)
##                 2.5 %    97.5 %
## (Intercept) 472.31696 816.41194
## FG_index    -17.82341  27.21213
anova(model_fg_prijem)
## Analysis of Variance Table
## 
## Response: Prijem_mid
##            Df   Sum Sq Mean Sq F value Pr(>F)
## FG_index    1    37362   37362   0.168 0.6821
## Residuals 390 86735404  222398
# GT tabuľka výsledkov
broom::tidy(model_fg_prijem, conf.int = TRUE) |>
  dplyr::mutate(term = dplyr::recode(term,
    "(Intercept)" = "Konštanta",
    "FG_index"    = "Index finančnej gramotnosti (1 bod)"
  )) |>
  gt::gt() |>
  gt::fmt_number(columns = c(estimate, std.error, statistic, p.value, conf.low, conf.high), decimals = 3) |>
  gt::cols_label(
    term = "Premenná",
    estimate = "Odhad",
    std.error = "Št. chyba",
    statistic = "t",
    p.value = "p-hodnota",
    conf.low = "95% CI – dol",
    conf.high= "95% CI – hor"
  ) |>
  gt::tab_header(title = gt::md("**Lineárna regresia: Mesačný príjem (stred pásma) ~ Index FG**")) |>
  gt::opt_row_striping()
Lineárna regresia: Mesačný príjem (stred pásma) ~ Index FG
Premenná Odhad Št. chyba t p-hodnota 95% CI – dol 95% CI – hor
Konštanta 644.364 87.509 7.363 0.000 472.317 816.412
Index finančnej gramotnosti (1 bod) 4.694 11.453 0.410 0.682 −17.823 27.212
# Graf
ggplot(reg_df, aes(FG_index, Prijem_mid)) +
  geom_point(alpha = 0.6) +
  geom_smooth(method = "lm", se = TRUE) +
  labs(
    title = "Mesačný príjem (stred pásma) ~ Index finančnej gramotnosti",
    x = "Index finančnej gramotnosti (0–100)",
    y = "Mesačný príjem (EUR)"
  ) +
  theme_minimal()
## `geom_smooth()` using formula = 'y ~ x'

summary(model_fg_prijem)
## 
## Call:
## lm(formula = Prijem_mid ~ FG_index, data = reg_df)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -491.31 -477.22  -81.42  332.66  751.44 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  644.364     87.509   7.363 1.07e-12 ***
## FG_index       4.694     11.453   0.410    0.682    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 471.6 on 390 degrees of freedom
## Multiple R-squared:  0.0004306,  Adjusted R-squared:  -0.002132 
## F-statistic: 0.168 on 1 and 390 DF,  p-value: 0.6821

Výsledky

Výsledky ukázali, že koeficient pri premennej Index finančnej gramotnosti má kladné znamienko (β₁ = 4.694), čo naznačuje, že s rastúcou úrovňou finančnej gramotnosti sa zvyšuje aj mesačný príjem. Tento vzťah však nie je štatisticky významný (p = 0.682), pričom 95 % interval spoľahlivosti (−17.82; 27.21) obsahuje nulovú hodnotu.

Koeficient determinácie R² = 0.0004 naznačuje, že úroveň finančnej gramotnosti vysvetľuje len zanedbateľnú časť variability mesačných príjmov.

Z uvedeného vyplýva, že v rámci analyzovanej vzorky študentov FMUK sa nepotvrdila štatisticky významná lineárna závislosť medzi finančnou gramotnosťou a výškou mesačného príjmu. Napriek tomu má koeficient pozitívne znamienko, čo naznačuje, že študenti s vyššou finančnou gramotnosťou majú tendenciu dosahovať mierne vyššie príjmy.

Aj keď má regresný koeficient pozitívne znamienko (β₁ = 4.694), čo naznačuje, že vyššia úroveň finančnej gramotnosti môže byť spojená s mierne vyšším príjmom, tento vzťah nie je štatisticky významný.

Inými slovami, v analyzovanej vzorke študentov FMUK sa nepreukázalo, že by úroveň finančnej gramotnosti významne ovplyvňovala výšku ich mesačného príjmu.

Preto hypotézu H0 nezamietame a alternatívnu hypotézu H1 nepotvrdzujeme.