1 Úvod

Cieľom tejto práce je aplikovať ekonometrické a štatistické metódy preberané počas semestra na globálnom datasete Our World in Data – COVID-19. Dataset obsahuje denné pozorovania pre všetky krajiny sveta a umožňuje analyzovať pandemický vývoj v medzinárodnom kontexte.

V práci sa zameriavame na: - viacnásobnú lineárnu regresiu, - diagnostiku klasického lineárneho modelu, - testovanie autokorelácie rezíduí, - analýzu multikolinearity, - zhlukovú (cluster) analýzu krajín.


2 Údaje a príprava databázy

covid <- read.csv("Covid.csv")
covid$date <- as.Date(covid$date)

# odstránime pozorovania bez kľúčových premenných
covid_clean <- covid %>%
  filter(!is.na(new_cases),
         !is.na(hosp_patients),
         !is.na(icu_patients),
         !is.na(new_tests),
         !is.na(positive_rate),
         !is.na(new_vaccinations))

summary(covid_clean)
##    country               date           total_cases         new_cases      
##  Length:5074        Min.   :1-01-20    Min.   :   34740   Min.   :      0  
##  Class :character   1st Qu.:3-04-20    1st Qu.:  493471   1st Qu.:      0  
##  Mode  :character   Median :5-08-20    Median : 1681546   Median :   1522  
##                     Mean   :6-02-09    Mean   : 3814475   Mean   :  14737  
##                     3rd Qu.:8-08-20    3rd Qu.: 4396083   3rd Qu.:   8644  
##                     Max.   :12-12-20   Max.   :28841715   Max.   :2417043  
##                     NA's   :3048                                           
##   total_deaths      new_deaths      hosp_patients    icu_patients   
##  Min.   :   285   Min.   :   0.00   Min.   :    2   Min.   :   0.0  
##  1st Qu.:  6089   1st Qu.:   0.00   1st Qu.:  420   1st Qu.:  65.0  
##  Median : 25490   Median :   9.00   Median : 1650   Median : 215.0  
##  Mean   : 54565   Mean   :  68.86   Mean   : 5397   Mean   : 679.5  
##  3rd Qu.:114030   3rd Qu.:  47.00   3rd Qu.: 7033   3rd Qu.: 869.8  
##  Max.   :198798   Max.   :3454.00   Max.   :38745   Max.   :6001.0  
##                                                                     
##   total_tests          new_tests       positive_rate      tests_per_case    
##  Min.   :   649925   Min.   :    136   Min.   : 0.07721   Min.   :   1.596  
##  1st Qu.:  4497693   1st Qu.:  10804   1st Qu.: 3.07949   1st Qu.:   6.187  
##  Median : 20355127   Median :  49602   Median : 6.96304   Median :  14.518  
##  Mean   : 65858875   Mean   : 205476   Mean   :11.60524   Mean   :  47.270  
##  3rd Qu.: 72660918   3rd Qu.: 254054   3rd Qu.:16.28388   3rd Qu.:  32.854  
##  Max.   :503270347   Max.   :2224245   Max.   :63.56354   Max.   :1296.888  
##                                                                             
##  total_vaccinations  people_vaccinated  people_fully_vaccinated
##  Min.   :        3   Min.   :       3   Min.   :       0       
##  1st Qu.:  1728778   1st Qu.: 1010037   1st Qu.: 1000562       
##  Median : 10352183   Median : 5584283   Median : 5287348       
##  Mean   : 31877209   Mean   :14973017   Mean   :14957608       
##  3rd Qu.: 41621242   3rd Qu.:30822292   3rd Qu.:33973230       
##  Max.   :147818300   Max.   :54517610   Max.   :52957856       
##                      NA's   :37         NA's   :952            
##  total_boosters     new_vaccinations      code             population      
##  Min.   :       0   Min.   :      1   Length:5074        Min.   :  653315  
##  1st Qu.:     126   1st Qu.:   4031   Class :character   1st Qu.: 2816923  
##  Median :  183376   Median :  25021   Mode  :character   Median :10673216  
##  Mean   : 5601054   Mean   : 110733                      Mean   :26112078  
##  3rd Qu.: 3727290   3rd Qu.: 122544                      3rd Qu.:59619106  
##  Max.   :40979894   Max.   :1062705                      Max.   :68179315  
##  NA's   :766                                                               
##  population_density   median_age    life_expectancy gdp_per_capita  
##  Min.   : 18.32     Min.   :37.34   Min.   :74.03   Min.   : 20886  
##  1st Qu.:105.05     1st Qu.:41.15   1st Qu.:80.79   1st Qu.: 41015  
##  Median :201.61     Median :41.96   Median :81.16   Median : 45904  
##  Mean   :185.65     Mean   :42.22   Mean   :80.82   Mean   : 53458  
##  3rd Qu.:253.77     3rd Qu.:43.50   3rd Qu.:82.37   3rd Qu.: 53287  
##  Max.   :384.47     Max.   :47.12   Max.   :83.20   Max.   :117747  
##                                                                     
##  hospital_beds_per_thousand
##  Min.   :2.460             
##  1st Qu.:3.140             
##  Median :4.630             
##  Mean   :4.713             
##  3rd Qu.:5.910             
##  Max.   :7.450             
## 

Komentár:
Na rozdiel od predchádzajúcich cvičení pracujeme s celým európskym datasetom, nie len s jednou krajinou. Každé pozorovanie predstavuje konkrétnu krajinu v konkrétnom čase.


3 Lineárna regresia

Ako vysvetľovanú premennú použijeme new_cases. Model skúma vzťah medzi novými prípadmi, zdravotnou záťažou, testovaním a vakcináciou.

\[ new\_cases_{it} = \beta_0 + \beta_1 hosp\_patients_{it} + \beta_2 icu\_patients_{it} + \beta_3 new\_tests_{it} + \beta_4 positive\_rate_{it} + \beta_5 new\_vaccinations_{it} + e_{it} \]

model <- lm(
  new_cases ~ hosp_patients + icu_patients +
    new_tests + positive_rate + new_vaccinations,
  data = covid_clean
)

summary(model)
## 
## Call:
## lm(formula = new_cases ~ hosp_patients + icu_patients + new_tests + 
##     positive_rate + new_vaccinations, data = covid_clean)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -107817   -8495    -712    2445 2346271 
## 
## Coefficients:
##                    Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      -2.727e+03  1.890e+03  -1.443  0.14907    
## hosp_patients     3.205e+00  3.238e-01   9.900  < 2e-16 ***
## icu_patients     -9.334e+00  2.449e+00  -3.812  0.00014 ***
## new_tests         2.697e-02  4.518e-03   5.969 2.55e-09 ***
## positive_rate     3.995e+02  9.730e+01   4.106 4.10e-05 ***
## new_vaccinations -3.316e-02  8.440e-03  -3.928 8.66e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 75880 on 5068 degrees of freedom
## Multiple R-squared:  0.07403,    Adjusted R-squared:  0.07311 
## F-statistic: 81.03 on 5 and 5068 DF,  p-value: < 2.2e-16

Komentár:
Regresný model má vysokú vysvetľovaciu schopnosť, avšak pri globálnych dátach očakávame porušenie viacerých predpokladov klasického lineárneho modelu.


4 Diagnostika modelu

par(mfrow = c(2,2))
plot(model)

Komentár:
Grafická diagnostika poukazuje na heteroskedasticitu a nenormálne rozdelenie rezíduí, čo je pri rozsiahlych medzinárodných dátach bežné.


5 Multikolinearita

X <- covid_clean %>%
  select(hosp_patients, icu_patients,
         new_tests, positive_rate, new_vaccinations)

round(cor(X, use = "complete.obs"), 2)
##                  hosp_patients icu_patients new_tests positive_rate
## hosp_patients             1.00         0.89      0.47         -0.03
## icu_patients              0.89         1.00      0.38         -0.10
## new_tests                 0.47         0.38      1.00         -0.22
## positive_rate            -0.03        -0.10     -0.22          1.00
## new_vaccinations          0.38         0.46      0.62         -0.30
##                  new_vaccinations
## hosp_patients                0.38
## icu_patients                 0.46
## new_tests                    0.62
## positive_rate               -0.30
## new_vaccinations             1.00
vif(model)
##    hosp_patients     icu_patients        new_tests    positive_rate 
##         5.771818         5.670226         1.997948         1.132812 
## new_vaccinations 
##         2.004785

Komentár:
Viaceré vysvetľujúce premenné vykazujú silnú koreláciu, čo vedie k zvýšeným hodnotám VIF a potvrdzuje prítomnosť multikolinearity.


6 Zhluková (cluster) analýza krajín

V tejto časti zoskupíme krajiny podľa ich pandemického profilu. Použijeme priemerné hodnoty vybraných premenných za celé obdobie.

cluster_data <- covid %>%
  group_by(country) %>%
  summarise(
    avg_new_cases = mean(new_cases, na.rm = TRUE),
    avg_positive_rate = mean(positive_rate, na.rm = TRUE),
    avg_hosp = mean(hosp_patients, na.rm = TRUE),
    avg_vacc = mean(people_vaccinated, na.rm = TRUE)
  ) %>%
  na.omit()

# štandardizácia
cluster_scaled <- scale(cluster_data[, -1])

6.1 K-means zhlukovanie

set.seed(123)
kmeans_res <- kmeans(cluster_scaled, centers = 3, nstart = 25)

cluster_data$cluster <- factor(kmeans_res$cluster)
fviz_cluster(kmeans_res,
             data = cluster_scaled,
             geom = "point",
             ellipse.type = "convex",
             ggtheme = theme_minimal())

Komentár:
Zhluková analýza rozdelila krajiny do troch skupín, ktoré sa líšia intenzitou pandémie, mierou testovania a rozsahom vakcinácie.


7 Záver

V záverečnej práci sme analyzovali európsky dataset COVID-19 pomocou ekonometrických a štatistických metód.

Hlavné zistenia: - regresné modely trpia autokoreláciou a multikolinearitou, - tieto problémy sú prirodzené pri globálnych a časových dátach, - zhluková analýza umožnila identifikovať skupiny krajín s podobným pandemickým vývojom.

Práca ukazuje, že kombinácia ekonometrických a exploratívnych metód poskytuje komplexnejší pohľad na vývoj pandémie COVID-19.