Econometrics in R - cvičenie 5

Základná diagnostika modelu

Author

Chiara Púčeková

Práca s pracovnou pamäťou

Na začiatok cvičenia si načítame pracovnú pamäť, ktorú sme si uložili v predchádzajúcom cvičení. Obnovíme tým vytvorené objekty, ktoré môžeme využiť aj pri ďalšej analýze.

Code
load("pamat.Rdata")

ls()
  [1] "a"                   "A"                   "A_eig"              
  [4] "b"                   "B"                   "B_eig"              
  [7] "body"                "body_bonus"          "c"                  
 [10] "C"                   "ceil_b"              "ceil_d"             
 [13] "cesta"               "cesta_who"           "chybajuce"          
 [16] "d"                   "D"                   "diff_ab"            
 [19] "E"                   "eig_A"               "eig_B"              
 [22] "eig_E"               "faktory_vek"         "first"              
 [25] "floor_b"             "floor_c"             "full"               
 [28] "full_nospace"        "graf_data"           "graf_gdp"           
 [31] "graf_odmenovanie"    "hodnoty"             "int_div_ab"         
 [34] "kladne"              "koeficient"          "konstanta"          
 [37] "lambda_1"            "lambda_A"            "last"               
 [40] "lava_strana"         "m"                   "M"                  
 [43] "m_byrow"             "median_gdp"          "mod_ab"             
 [46] "mod_c"               "model"               "model_gdp"          
 [49] "model_who"           "model1"              "model1_who"         
 [52] "moja_matica"         "nove_udaje"          "nove_udaje_who"     
 [55] "opis"                "p"                   "podiel_cd"          
 [58] "popis"               "porovnanie"          "porovnanie_who"     
 [61] "power_ab"            "power_c"             "power_cd"           
 [64] "prava_strana"        "predikcia_13"        "premenna"           
 [67] "premenne"            "prod_ab"             "q"                  
 [70] "quot_ab"             "round_b"             "round_c"            
 [73] "rozdiel_cd"          "s"                   "school"             
 [76] "sucet_cd"            "sucin_cd"            "suhrn"              
 [79] "sum_ab"              "tabulka_vek"         "test"               
 [82] "text"                "toi_vek"             "udaje"              
 [85] "udaje_skola"         "udaje_who"           "udaje_who_2015"     
 [88] "udaje.reg"           "v"                   "v_1"                
 [91] "V_A"                 "v1"                  "v2"                 
 [94] "v3"                  "v4"                  "v5"                 
 [97] "v6"                  "vek"                 "vybrane_krajiny"    
[100] "vysledky"            "vysledky_gdp"        "vysledky_porovnanie"
[103] "vysledky1"           "vysledok_rucne"      "x"                  
[106] "x1"                  "x2"                  "y"                  
[109] "z"                   "zaporne"            

Vytvorenie a odstránenie objektov

Teraz si vytvoríme dva pomocné objekty, ktoré potom z pracovnej pamäte odstránime. Príkazom Is() skontrolujeme, ktoré objekty v pamäti zostali po ich odstránení.

Code
aaa <- 6
bbb <- "text"

rm(list = c("aaa", "bbb"))

ls()
  [1] "a"                   "A"                   "A_eig"              
  [4] "b"                   "B"                   "B_eig"              
  [7] "body"                "body_bonus"          "c"                  
 [10] "C"                   "ceil_b"              "ceil_d"             
 [13] "cesta"               "cesta_who"           "chybajuce"          
 [16] "d"                   "D"                   "diff_ab"            
 [19] "E"                   "eig_A"               "eig_B"              
 [22] "eig_E"               "faktory_vek"         "first"              
 [25] "floor_b"             "floor_c"             "full"               
 [28] "full_nospace"        "graf_data"           "graf_gdp"           
 [31] "graf_odmenovanie"    "hodnoty"             "int_div_ab"         
 [34] "kladne"              "koeficient"          "konstanta"          
 [37] "lambda_1"            "lambda_A"            "last"               
 [40] "lava_strana"         "m"                   "M"                  
 [43] "m_byrow"             "median_gdp"          "mod_ab"             
 [46] "mod_c"               "model"               "model_gdp"          
 [49] "model_who"           "model1"              "model1_who"         
 [52] "moja_matica"         "nove_udaje"          "nove_udaje_who"     
 [55] "opis"                "p"                   "podiel_cd"          
 [58] "popis"               "porovnanie"          "porovnanie_who"     
 [61] "power_ab"            "power_c"             "power_cd"           
 [64] "prava_strana"        "predikcia_13"        "premenna"           
 [67] "premenne"            "prod_ab"             "q"                  
 [70] "quot_ab"             "round_b"             "round_c"            
 [73] "rozdiel_cd"          "s"                   "school"             
 [76] "sucet_cd"            "sucin_cd"            "suhrn"              
 [79] "sum_ab"              "tabulka_vek"         "test"               
 [82] "text"                "toi_vek"             "udaje"              
 [85] "udaje_skola"         "udaje_who"           "udaje_who_2015"     
 [88] "udaje.reg"           "v"                   "v_1"                
 [91] "V_A"                 "v1"                  "v2"                 
 [94] "v3"                  "v4"                  "v5"                 
 [97] "v6"                  "vek"                 "vybrane_krajiny"    
[100] "vysledky"            "vysledky_gdp"        "vysledky_porovnanie"
[103] "vysledky1"           "vysledok_rucne"      "x"                  
[106] "x1"                  "x2"                  "y"                  
[109] "z"                   "zaporne"            

Vyčistenie pracovnej pamäte

Teraz odstránime všetky objekty, ktoré sú v pracovnej pamäti. Pomocou príkazu Is() potom skontrolujeme, či bola pamäť vyčistená.

Code
rm(list = ls())

ls()
character(0)

Obnovenie pracovnej pamäte

Po vyčistení pamäte znova načítame objekty, ktoré sme si uložili na konci minulého cvičenia a pomocou Is() potom overíme, či sa objekty úspešne obnovili.

Code
load("pamat.Rdata")

ls()
  [1] "a"                   "A"                   "A_eig"              
  [4] "b"                   "B"                   "B_eig"              
  [7] "body"                "body_bonus"          "c"                  
 [10] "C"                   "ceil_b"              "ceil_d"             
 [13] "cesta"               "cesta_who"           "chybajuce"          
 [16] "d"                   "D"                   "diff_ab"            
 [19] "E"                   "eig_A"               "eig_B"              
 [22] "eig_E"               "faktory_vek"         "first"              
 [25] "floor_b"             "floor_c"             "full"               
 [28] "full_nospace"        "graf_data"           "graf_gdp"           
 [31] "graf_odmenovanie"    "hodnoty"             "int_div_ab"         
 [34] "kladne"              "koeficient"          "konstanta"          
 [37] "lambda_1"            "lambda_A"            "last"               
 [40] "lava_strana"         "m"                   "M"                  
 [43] "m_byrow"             "median_gdp"          "mod_ab"             
 [46] "mod_c"               "model"               "model_gdp"          
 [49] "model_who"           "model1"              "model1_who"         
 [52] "moja_matica"         "nove_udaje"          "nove_udaje_who"     
 [55] "opis"                "p"                   "podiel_cd"          
 [58] "popis"               "porovnanie"          "porovnanie_who"     
 [61] "power_ab"            "power_c"             "power_cd"           
 [64] "prava_strana"        "predikcia_13"        "premenna"           
 [67] "premenne"            "prod_ab"             "q"                  
 [70] "quot_ab"             "round_b"             "round_c"            
 [73] "rozdiel_cd"          "s"                   "school"             
 [76] "sucet_cd"            "sucin_cd"            "suhrn"              
 [79] "sum_ab"              "tabulka_vek"         "test"               
 [82] "text"                "toi_vek"             "udaje"              
 [85] "udaje_skola"         "udaje_who"           "udaje_who_2015"     
 [88] "udaje.reg"           "v"                   "v_1"                
 [91] "V_A"                 "v1"                  "v2"                 
 [94] "v3"                  "v4"                  "v5"                 
 [97] "v6"                  "vek"                 "vybrane_krajiny"    
[100] "vysledky"            "vysledky_gdp"        "vysledky_porovnanie"
[103] "vysledky1"           "vysledok_rucne"      "x"                  
[106] "x1"                  "x2"                  "y"                  
[109] "z"                   "zaporne"            

Príprava databázy

V tejto časti pripravíme údaje, ktoré budeme potrebovať na regresnú analýzu. Pracovať budeme s databázou zamestnancov, s ktorou sme pracovali aj na predchádzajúcom cvičení. Z tejto databázy vyberieme tie premenné, ktoré sa týkajú motivácie a spokojnosti zamestnancov. Potom skontrolujeme či sú niekde chýbajúce hodnoty, aby sme overili, či sú tieto údaje vhodné na ďalšie analyzovanie.

Code
library(readxl)
library(broom)
library(knitr)
library(kableExtra)
library(ggplot2)
library(dplyr)

Prvým krokom je načítanie databázy z excelu. Následne upravíme názvy stĺpcov a vytvoríme dátový rámec s premennými, ktoré využijeme pri regresnej analýze.

Code
cesta <- "HR_Attrition_R_ready_final.xlsx"

udaje <- read_excel(cesta)
udaje <- as.data.frame(udaje)

names(udaje) <- make.names(trimws(names(udaje)), unique = TRUE)

udaje.reg <- data.frame(
  Respondent = seq_len(nrow(udaje)),
  Vek = udaje[[1]],
  LowMotivation = udaje[[19]],
  Compensation = udaje[[8]],
  WorkLifeBalance = udaje[[13]],
  JobSatisfaction = udaje[[11]]
)

colSums(is.na(udaje.reg))
     Respondent             Vek   LowMotivation    Compensation WorkLifeBalance 
              0               0               0               0               0 
JobSatisfaction 
              0 

Kontrola chýbajúcich hodnôt ukázala, že naše premenné obsahujú všetky údaje a preto nie je potrebné ich nahrádzať.

Lineárna regresia

Tu nadviažeme na predošlé cvičenie a odhadneme viacnásobný lineárny regresný model. Našim cieľom je preskúmať vzťah medzi nízkou pracovnou motiváciou zamestnancov a ich spokojnosťou s finančným ohodnotením, rovnováhou medzi pracovným a súkromným životom a spokojnosťou s vykonávanou prácou. Vysvetľovanou premennou pritom bude LowMotivation a vysvetľujúcicmi premennými budú Compensation, WorkLifeBalance a JobSatisfaction.

Odhad regresného modelu

Funkciou lm() odhadneme viacnásobný lineárny regresný model, vďaka ktorému budeme môcť preskúmať vzťahy medzi vybranými premennými.

Odhadujeme viacnásobný lineárny regresný model v tvare:

\[ LowMotivation_i = \beta_0 + \beta_1 Compensation_i + \beta_2 WorkLifeBalance_i + \beta_3 JobSatisfaction_i + u_i \]

Code
model <- lm(
  LowMotivation ~ Compensation + WorkLifeBalance + JobSatisfaction,
  data = udaje.reg
)

Odhad regresných koeficientov

Po tom ako odhadneme regresný model, tak jeho výsledky zobrazíme v tabuľke. Táto tabuľka bude obsahovať odhadnuté regresné koeficienty, ich štandardné chyby, hodnoty t-štatistík a p-hodnoty. Na zákalde p-hodnôt potom posúdime či sú jednotlivé vysvetľujúce premenné štatisticky významné.

Code
tabulka_model <- broom::tidy(model) |>
  dplyr::mutate(
    Significance = dplyr::case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01  ~ "**",
      p.value < 0.05  ~ "*",
      TRUE ~ ""
    ),
    p.value = ifelse(
      p.value < 0.001,
      "< 0.001",
      sprintf("%.3f", p.value)
    )
  )

tabulka_model |>
  knitr::kable(
    digits = 3,
    col.names = c(
      "Premenná",
      "Koeficient",
      "Štandardná chyba",
      "t-hodnota",
      "p-hodnota",
      "Významnosť"
    ),
    caption = "Odhad regresných koeficientov",
    align = "c"
  ) |>
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  ) |>
  kableExtra::row_spec(
    0,
    background = "#d94f8a",
    color = "white",
    bold = TRUE
  ) |>
  kableExtra::column_spec(
    1,
    bold = TRUE,
    color = "#77345f"
  )
Odhad regresných koeficientov
Premenná Koeficient Štandardná chyba t-hodnota p-hodnota Významnosť
(Intercept) 5.312 0.144 36.941 < 0.001 ***
Compensation -0.337 0.050 -6.766 < 0.001 ***
WorkLifeBalance -0.145 0.059 -2.450 0.015 *
JobSatisfaction -0.264 0.055 -4.761 < 0.001 ***

Na základe odhadnutých regresných koeficientov má náš model nasledujúci tvar:

\[ \widehat{LowMotivation}_i = 5{,}312 - 0{,}337 \cdot Compensation_i - 0{,}145 \cdot WorkLifeBalance_i - 0{,}264 \cdot JobSatisfaction_i \]

Interpretácia výsledkov

Výsledky viacnásobnej regresie ukazujú, že medzi všetkými tromi vysvetľujúcimi premennými a nízkou pracovnou motiváciou je štatisticky významný negatívny vzťah. Najvýraznejší záporný koeficient pritom dosiahla spokojnosť s finančným ohodnotením (- 0,337). Znamená to, že pri zvýšení tejto premennej o jeden bod sa predpokladaná hodnota pracovnej motivácie znižuje v priemereo 0,337 bodu, za predpokladu, že ostatné premenné sa nemenia. Podobný vzťah vidíme aj pri spokojnosti s vykonávanou prácou (- 0,264) a rovnováhe medzi pracovným a osobným životom (- 0,145). Všetky tri premenné sú štatisticky významné na hladine 5%, pričom ale spokojnosť s finančným ohodnotením a vykonávanou prácou majú p-hodnoty nižšie ako 0,001. Tieto výsledky naznačujú, že vyššia spokojnosť zamestnancov v týchto oblastiach súvisí s nižšou mierou pracovnej motivácie.

Kvalita vyrovnania modelu

Teraz pomocou vybraných štatistických ukazovateľov posúdime, akú kvalitu má náš odhadnutý regresný model. Zameriame sa hlavne na koeficient determinácie R^2, upravený koeficient determinácie a F-test, ktorým vieme posúdiť celkovú štatistickú významnosť modelu. Potom zobrazíme ďalšie charakteristiky, ktoré môžeme pri následnom porovnávaní regresných modelov použiť.

Code
kvalita <- broom::glance(model) |>
  dplyr::select(-deviance)

hodnoty <- unlist(kvalita, use.names = FALSE)
nazvy <- names(kvalita)

tabulka_kvality <- data.frame(
  Ukazovatel = nazvy,
  Hodnota = ifelse(
    nazvy == "p.value" & hodnoty < 0.001,
    "< 0.001",
    ifelse(
      nazvy %in% c("df", "df.residual", "nobs"),
      sprintf("%.0f", hodnoty),
      sprintf("%.3f", hodnoty)
    )
  )
)

tabulka_kvality |>
  knitr::kable(
    col.names = c("Ukazovateľ", "Hodnota"),
    caption = "Kvalita vyrovnania regresného modelu",
    align = c("l", "c")
  ) |>
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  ) |>
  kableExtra::row_spec(
    0,
    background = "#d94f8a",
    color = "white",
    bold = TRUE
  ) |>
  kableExtra::column_spec(
    1,
    bold = TRUE,
    color = "#77345f"
  )
Kvalita vyrovnania regresného modelu
Ukazovateľ Hodnota
r.squared 0.397
adj.r.squared 0.394
sigma 0.757
statistic 114.650
p.value < 0.001
df 3
logLik -597.995
AIC 1205.990
BIC 1227.317
df.residual 522
nobs 526

Interpretácia výsledkov

Koeficient determinácie (R^2 = 0,397) ukazuje, že náš model vysvetľuje cca 39,7 % variability nízkej pracovnej motivácie zamestnancov. Upravený koeficient determinácie má hodnotu 0,394, čo je len mierny pokles po zohľadnení počtu viacerých premenných. Na zákalde F-testu (114,650) a p-hodnoty, ktorá je nižšia ako 0,001 môžeme povedať, že ako celok je regresný model štatisticky významný, čo znamená že aspoň jedna z vysvetľujúcich premenných má štatisticky významný vzťah s nízkou pracovnou motiváciou. Pomocou t-testov sme posúdili, či sú jednotlivé regresné koeficienty štatisticky významné. V pôvodnom modeli sú všetky tri vysvetľujúce premenné štatisticky významné pretože ich p-hodnoty sú nižšie ako 0,05.

Grafická analýza kvality modelu

V tomto kroku spravíme grafickú diagnostiku regresného modelu. Pomocou štyroch diagnostických grafov preskúmame ako sa správajú reziduá, aké je ich rozdelenie, rozptyl a prípradný výskyt vplyvných pozorovaní. Táto analýza nám umožní nájsť možné nedostatky modelu a poprípade posúdiť potrebu jeho úpravy.

Pri diagnostike modelu budeme skúmať rezíduá, ktoré predstavujú rozdiel medzi skutočnými a modelom predpokladanými hodnotami vysvetľovanej premennej:

\[ e_i = y_i - \hat{y}_i \]

Code
par(mfrow = c(2, 2))

plot(model)

Code
par(mfrow = c(1, 1))

Interpretácia diagnostických grafov

Grafická diagnostika regresného modelu poukazuje na niekoľko možných nedostatkov. V grafe Reziduals vs Fitted vidíme, že krivka je mierne zakrivená, čo môže naznačovať, že model úplne nezachytáva vzťahy medzi premennými. Graf Q-Q Residuals ukazuje, že v strednej časti sa rezíduá približujú normálnemu rozdeleniu, ale na okrajoch grafu sú viditeľné odchýlky. V grafe Scale-Location vidíme že rozpytl rezíduí sa mení a nie je rovnomerný. Tieto grafy naznačujú, že regresný model môže mať určité nedostatky, ktoré budeme musieť preveriť ďalšími diagnostickými testami.

Test normality rezíduí

Na základe grafickej analýzy, ktorú sme robili v predchádzajúcom kroku sme zistili, že pri rozdelení rezíduí sú nejaké odchýlky od normálneho rozdelenia. V tomto kroku preto spravíme Jarqueov-Berov test, ktorým zistíme či sú tie odchýlky štatisticky významné.

Code
res <- residuals(model)

jb_test <- tseries::jarque.bera.test(res)

broom::tidy(jb_test) |>
  dplyr::select(statistic, p.value, method) |>
  dplyr::mutate(
    statistic = round(statistic, 3),
    p.value = ifelse(
      p.value < 0.001,
      "< 0.001",
      sprintf("%.3f", p.value)
    )
  ) |>
  knitr::kable(
    col.names = c("Testovacia štatistika", "p-hodnota", "Test"),
    caption = "Výsledky Jarqueovho-Berovho testu normality rezíduí",
    align = "c"
  ) |>
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  ) |>
  kableExtra::row_spec(
    0,
    background = "#d94f8a",
    color = "white",
    bold = TRUE
  )
Výsledky Jarqueovho-Berovho testu normality rezíduí
Testovacia štatistika p-hodnota Test
18.606 < 0.001 Jarque Bera Test

Interpretácia výsledkov

Testovacia štatistika, ktorú sme pomocou Jarqueovho-Berovho testu zisťovali má hodnotu 18,06 a jej p-hodnota je nižšia ako 0,001. Keďže je p-hodnota nižšia ako hladina význmanosti 0,05, tak predpoklad normálneho rozdelenia rezíduí zamietame. Výsledok nám potvrdil, že rezíduá regresného modelu sa od normálneho rozdelenia odlišujú a teda sú štatisticky významné.

Test odľahlých pozorovaní

V tomto kroku preskúmame, či sú v našej databáze pozorovania, ktoré sa od hodnôt predpokladaných regresných modelov výrazne odlišujú. Použijeme funkciu outlierTest(), pomocou ktorej zistíme štatistickú významnosť prípadných odľahlých pozorovaní.

Code
outlier_test <- car::outlierTest(model)

tabulka_odlahlych <- data.frame(
 Pozorovanie = which.max(abs(rstudent(model))),
  rstudent = round(outlier_test[[1]], 3),
  p_hodnota = ifelse(
    outlier_test[[2]] < 0.001,
    "< 0.001",
    sprintf("%.3f", outlier_test[[2]])
  ),
  Bonferroni_p = sprintf("%.3f", outlier_test[[3]])
)

tabulka_odlahlych |>
  knitr::kable(
    col.names = c(
      "Pozorovanie",
      "Studentizované rezíduum",
      "p-hodnota",
      "Bonferroniho p-hodnota"
    ),
    caption = "Výsledky testu odľahlých pozorovaní",
    align = "c"
  ) |>
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  ) |>
  kableExtra::row_spec(
    0,
    background = "#d94f8a",
    color = "white",
    bold = TRUE
  ) |>
  kableExtra::column_spec(
    1,
    bold = TRUE,
    color = "#77345f"
  )
Výsledky testu odľahlých pozorovaní
Pozorovanie Studentizované rezíduum p-hodnota Bonferroniho p-hodnota
63 63 3.491 < 0.001 0.274

Interpretácia výsledkov

Test odľahlých pozorovaní identifikoval pozorovanie č. 63, pri ktorom je hodnota rezídua 3,491. Pôvodná hodnota bola nižšia ako 0,001 ale po Bonferroniho úprave sa zmenila na hodnotu 0,274. Keďže po Bonferroniho úprave je hodnota 0,274, je vyššia ako hladina významnosti 0,05, tak toto pozorovanie nebudeme považovať za štatisticky významne odľahlé a teda nie je to dôvod na jeho odstránenie z regresného modelu.

Úprava regresného modelu

Na základe predchádzajúcej diagnostiky teraz upravíme pôvodný regresný model. Vytvoríme jednoduchší model kde ponecháme spokojnosť s finančným ohodnotením a spokojnosť s vykonávanou prácou a premennú Compensation upravíme pomocou prirodzeného logaritmu. Premennú WorkLifeBalance vynecháme, pretože z pomedzi všetkých vysvetľujúcich dosiahla v našom pôvodnom modeli najvyššiu p-hodnotu. Cieľom tejto úpravy je, že porovnáme pôvodný a upravený model aby sme zistili, či je možné aby dosiahli porovnateľné výsledky aj pri menšom počte vysvetľujúcich premenných.

V upravenom regresnom modeli vynecháme premennú WorkLifeBalance a premennú Compensation nahradíme jej prirodzeným logaritmom. Upravený model má tvar:

\[ LowMotivation_i = \beta_0 + \beta_1 \ln(Compensation_i) + \beta_2 JobSatisfaction_i + u_i \]

Code
model2 <- lm(
  LowMotivation ~ log(Compensation) + JobSatisfaction,
  data = udaje.reg
)

Odhad regresných koeficientov upraveného modelu

Po tom, čo sme upravili regresný model tak zobrazíme jeho jeho regresné koeficienty v tabuľke. Budeme sa zameriavať na ich hodnoty a či sú štatisticky významné. Na základe toho potom posúdime, ako sa zmenili výsledky keď sme z modelu vynechali premennú WorkLifeBalance.

Code
tabulka_model2 <- broom::tidy(model2) |>
  dplyr::mutate(
    Significance = dplyr::case_when(
      p.value < 0.001 ~ "***",
      p.value < 0.01  ~ "**",
      p.value < 0.05  ~ "*",
      TRUE ~ ""
    ),
    p.value = ifelse(
      p.value < 0.001,
      "< 0.001",
      sprintf("%.3f", p.value)
    )
  )

tabulka_model2 |>
  knitr::kable(
    digits = 3,
    col.names = c(
      "Premenná",
      "Koeficient",
      "Štandardná chyba",
      "t-hodnota",
      "p-hodnota",
      "Významnosť"
    ),
    caption = "Odhad regresných koeficientov upraveného modelu",
    align = "c"
  ) |>
  kableExtra::kable_styling(
    bootstrap_options = c("striped", "hover"),
    full_width = FALSE,
    position = "center"
  ) |>
  kableExtra::row_spec(
    0,
    background = "#d94f8a",
    color = "white",
    bold = TRUE
  ) |>
  kableExtra::column_spec(
    1,
    bold = TRUE,
    color = "#77345f"
  )
Odhad regresných koeficientov upraveného modelu
Premenná Koeficient Štandardná chyba t-hodnota p-hodnota Významnosť
(Intercept) 5.350 0.142 37.671 < 0.001 ***
log(Compensation) -1.259 0.132 -9.509 < 0.001 ***
JobSatisfaction -0.324 0.046 -7.092 < 0.001 ***

Na základe odhadnutých regresných koeficientov má upravený model nasledujúci tvar:

\[ \widehat{LowMotivation}_i = 5{,}350 - 1{,}259 \cdot \ln(Compensation_i) - 0{,}324 \cdot JobSatisfaction_i \]

Interpretácia výsledkov

Výsledky nášho upraveného regresného modelu ukazujú, že premenné spokojnosť s finančným ohodnotením a spokojnosť s vykonávanou prácou majú s nízkou pracovnou negatívny a štatisticky významný vzťah. Regresný koeficient logaritmicky upravenej premennej Compensation je - 1,259. Znamená to, že vyššia spokojnosť s finančným ohodnotením má súvis s nižšou mierou pracovnej demotivácie, pričom tento vzťah už nie je vyjadrený jednoduchou lineárnou závislosťou. Teda napríklad ak sa spokojnosť s finančným ohodnotením zvýši z 2 na 3 body, tak potom sa predpokladaná hodnota nízkej pracovnej motivácie zníži približne o 0,510 bodu, pri nezmenenej pracovnej spokojnosti. Premenná JobSatisfaction má koeficient - 0,324, čo znamená, že aj vyššia spokojnosť s vykonávanou prácou súvisí s nižšou mierou pracovnej demotivácie. Obidve vysvetľujúce premenné sú štatisticky významné na úrovni 5% pretože ich hodnoty sú nižšie ako 0,001. Zatiaľ ale nevieme jednoznačne povedať, či upravený model dosahuje lepšie výsledky ako ten pôvodný.

Grafická diagnostika upraveného modelu

Po úprave regresného modelu spravíme znova grafickú diagnostiku. Pomocou diagnostických grafov sa pozrieme na rozloženie rezíduí, na to či sa približujú k normálnemu rozdeleniu, na rovnomernosť ich rozptylu a či sa vyskytujú nejaké vplyvné pozorovania. Výsledky potom porovnáme s pôvodným modelom, aby sme zistili či úpravy, ktoré sme spravili prispeli k tomu, že sa zlepšili jeho vlastnosti.

Interpretácia výsledkov

Grafická diagnostika upraveného modelu ukázala, že niektoré nedostatky, ktoré sa objavili aj v pôvodnom modeli stále pretrvávajú. V grafe Residual vs Fitted vidíme, že čierna krivky je trocha zakrivená, čo naznačuje, že model nie úplne musí zachytávať vzťahy medzi skúmanými premennými. Graf Q-Q Residuals ukazuje že rezíduá sa odchyľujú od normálneho rozdelenia, hlavne na okrajoch grafu. Graf Scale-Location zobrazuje, že rozpyl rezíduí nie je rovnomerný a pri rôznych hodnotách sa mení. Keď to porovnáme s pôvodným modelom tak nevidíme nejaké jednoznačné zlepšenie vlastností. Aj keď sme vykonali nejaké úpravy tak zostali určité odchýlky, ktoré znova musíme preveriť ďalšími testami.

Test normality rezíduí upraveného modelu

Na základe diagnostických grafov sme zistili, že aj v prípade rezíduí upraveného modelu sú od normálneho rozdelenia vykázané určité odchýlky. Znova preto použijeme Jarqueov-Berov test, ktorým overíme či sú tieto odchýlky štatisticky významné a výsledky potom porovnáme s pôvodným modelom.

Test normality rezíduí upraveného modelu
Testovacia štatistika p-hodnota Test
17.092 < 0.001 Jarque Bera Test

Interpretácia výsledkov

Hodnota testovacej štatistiky upraveného modelu je na základe Jaquerovho-Berovho testu 17,092 a p-hodnota je nižšia ako 0,001, čo znemená, že zamietame predpoklad normálneho rozdelenia rezíduí, pretože táto hodnota je nižšia ako hladina významnosti 0,05. Keď to porovnáme s pôvodným modelom, ktorého testovacia štatistika mala hodnotu 18,606, tak došlo k jej miernemu zníženiu. Aj napriek tomu ale zostáva výsledok štatisticky významný a teda úpravou regresného modelu sa nám nepodarilo odstrániť odchýlky rezíduí od normálneho rozdelenia.

Test odľahlých pozorovaní upraveného modelu

V tomto kroku preveríme či sa v upravenom regresnom modeli vyskytujú nejaké odľahlé pozorovania. Ako aj pri prvom modeli, aj teraz použijeme funkciu outlierTest(), ktorou identifikujeme pozorovania, ktoré majú výraznejšie odchýlky od predpokladaných hodnôt. Výsledky potom porovnáme s pôvodným modelom, aby sme zistili, či sa nejak zmenil výskyt štatisticky významných odľahlých pozorovaní po tom, čo sme model upravili.

Test odľahlých pozorovaní upraveného modelu
Pozorovanie Studentizované rezíduum p-hodnota Bonferroniho p-hodnota
63 63 3.595 < 0.001 0.187

Interpretácia výsledkov

Pri upravenom regresnom modeli ukázal test odľahlých pozorovaní pozorovanie č. 63, ktorého rezíduum dosiahlo hodnotu 3,595. Po Bonferroniho úprave sa pôvodná p-hodnota zvýšila na hodnotu 0,187 a keďže táto hodnota je vyššia ako 0,05 tak toto pozorovanie nepovažujeme za štatisticky významne odľahlé. Oproti pôvodnému modelu sa p-hodnota mierne znížila, ale ani v jednom prípade nebolo identifikované štatisticky významné odľahlé pozorovanie.

Malé úlohy

Úloha 1 - porovnanie regresných modelov pomocou AIC

Porovnanie regresných modelov podľa AIC
Regresný model AIC
Pôvodný model 1205.990
Upravený model 1195.686

Interpretácia výsledkov

Na základe AIC môžeme povedať, že upravený regresný model dosahuje lepšie výsledky ako pôvodný model. Pôvodný model dosiahol hodnotu AIC 1205,990, zatiaľ čo hodnota upraveného modelu sa znížila na 1195,686. Rozdiel medzi modelmi je 10,304 bodu v prospech upraveného modelu. Pri porovnávaní pomocou AIC uprednostňujeme nižšie hodnoty a preto bude podľa tohto kritéria vhodnejší upravený model s logaritmicky transformovanou premennou Compensation. Aj keď má tento model nižšiu hodnotu AIC, tak stále vykazuje určité nedostatky, a to hlavne odchýlky od normálneho rozdelenia, ktoré potvrdil Jarqueov-Berov test.

Úloha 2

Tretí regresný model má tento tvar:

\[ \begin{aligned} LowMotivation_i ={}& \beta_0 + \beta_1 Compensation_i + \beta_2 Compensation_i^2 \\ &+ \beta_3 WorkLifeBalance_i + \beta_4 JobSatisfaction_i + u_i \end{aligned} \]

Odhad regresných koeficientov tretieho modelu

Odhad regresných koeficientov tretieho modelu
Premenná Koeficient Štandardná chyba t-hodnota p-hodnota Významnosť
(Intercept) 6.941 0.364 19.086 < 0.001 ***
Compensation -1.470 0.238 -6.171 < 0.001 ***
I(Compensation^2) 0.170 0.035 4.859 < 0.001 ***
WorkLifeBalance -0.101 0.059 -1.726 0.085
JobSatisfaction -0.279 0.054 -5.126 < 0.001 ***

Na základe odhadnutých regresných koeficientov má tretí model nasledujúci tvar:

\[ \begin{aligned} \widehat{LowMotivation}_i ={}& 6{,}941 - 1{,}470 \cdot Compensation_i \\ &+ 0{,}170 \cdot Compensation_i^2 \\ &- 0{,}101 \cdot WorkLifeBalance_i - 0{,}279 \cdot JobSatisfaction_i \end{aligned} \] Interpretácia výsledkov

Výsledky tretieho modelu ukazujú, že že vzťah medzi spokojnosťou s finančným ohodnotením a nízkou pracovnou motiváciou nemusí byť lineárny. Kvadratický člen premennej Compensation má kladný koeficient 0,170 a je štatisticky významný (p < 0,001). To naznačuje, že predpokladaná miera pracovnej demotivácie sa s rastúcou spokojnosťou s finančným ohodnotením znižuje, a tento pokles sa zároveň postupne spomaľuje. Koeficient premennej JobSatisfaction je - 0,279 a teda premenná zostáva štatisticky významná. S nižšou mierou pracovnej demotivácie súvisí teda aj vyššia spokojnosť s vykonávanou prácou. Naopak, p-hodnota premennej WorkLifeBalance je 0,085 a preto ju pri hladine významnosti 0,05 v tomto modeli nie je štatisticky významnou. Z výsledkov vyplýva, že pri vysvetľovaní nízkej pracovnej motivácie môže byť kvadratická úprava premennej Compensation užitočná.

Porovnanie výsledkov regresných modelov

Porovnanie troch regresných modelov
Regresný model AIC BIC Upravené R²
Pôvodný model 1205.990 1227.317 0.394
Logaritmický model 1195.686 1212.748 0.404
Kvadratický model 1184.682 1210.274 0.419

Interpretácia výsledkov

Pri porovnaní všetkých troch modelov sme zistili, že najlepšie výsledky dosiahol kvadratický model. Jeho AIC hodnota je 1184,682, čo je menej ako hodnota pôvodného aj logaritmicky upraveného modelu. Tento model dosiahol zároveň aj najnižšiu BIC hodnotu a najvyšší upravený koeficient determinácie. To naznačuje, že zo skúmaných modelov najlepšie vysvetľuje rozdiely v nízkej pracovnej motivácii zamestnancov pri zohľadnení počtu vysvetľujúcich premenných.

Záver

V rámci tohto cvičenia sme sa zamerali hlavne na odhad a základnú diagnostiku regresného modelu, ktorým sme skúmali vzťah medzi spokojnosťou zamestnancov a nízkou pracovnou motiváciou. Výsledky pôvodného modelu ukázali, že spokojnosť s finančným ohodnotením, rovnováha medzi pracovným a súkromným životom a spokojnosť s vykonávanou prácou majú s pracovnou demotiváciou štatisticky významný negatívny vzťah. Pomocou diagnostických modelov a testov sme zistili nejaké nedostatky modelov, hlavne odchýlenie sa od normálneho rozdelenia. Tento problém sme nevyriešili ani logaritmickou úpravou modelu, aj keď dosiahol lepšiu hodnotu AIC ako pôvodný model. V rámci malých úloh sme vytvorili tretí model, kvadratický, ktorý mal najnižšie hodnoty AIC (1184,682) a BIC (1210,274) a rovnako aj najvyšší upravený koeficient determinácie (0,419). Zo všetkých skúmaných modelov ho preto na základe spomínaných ukazovateľov môžeme považovať za najvhodnejší. Pri treťom modeli sme ale nevykonali diagnostiku rezíduí, preto nemôžeme jednoznačne potvrdiť jeho vhodnosť.