title: “Zhluková analýza – COVID Africa” author: “Auto-generated” date: “2025-11-22” output: html_document

library(readr)
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(ggplot2)
library(pheatmap)
library(cluster)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
covid <- read_csv("covid_africa.csv")
## Rows: 54 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Country/Other
## dbl (9): Total Cases, Total Deaths, Total Recovered, Active Cases, Tot Cases...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
summary(covid)
##  Country/Other       Total Cases       Total Deaths      Total Recovered  
##  Length:54          Min.   :   6597   Min.   :    38.0   Min.   :   4874  
##  Class :character   1st Qu.:  22886   1st Qu.:   291.2   1st Qu.:  19856  
##  Mode  :character   Median :  63854   Median :  1024.0   Median :  62471  
##                     Mean   : 227909   Mean   :  4772.6   Mean   : 206895  
##                     3rd Qu.: 171956   3rd Qu.:  3066.5   3rd Qu.: 168677  
##                     Max.   :4076463   Max.   :102595.0   Max.   :3912506  
##                                                          NA's   :3        
##   Active Cases   Tot Cases/ 1M pop Deaths/ 1M pop     Total Tests      
##  Min.   :    0   Min.   :   381    Min.   :   3.00   Min.   :   23693  
##  1st Qu.:   27   1st Qu.:  2452    1st Qu.:  33.25   1st Qu.:  346778  
##  Median :  309   Median :  4760    Median :  93.50   Median :  804909  
##  Mean   : 6351   Mean   : 27020    Mean   : 312.44   Mean   : 2142069  
##  3rd Qu.: 1752   3rd Qu.: 16997    3rd Qu.: 226.25   3rd Qu.: 2255373  
##  Max.   :81910   Max.   :512311    Max.   :2442.00   Max.   :26795090  
##  NA's   :3                                           NA's   :3         
##  Tests/ 1M pop      Population       
##  Min.   :  5093   Min.   :    99426  
##  1st Qu.: 29172   1st Qu.:  2890966  
##  Median : 60951   Median : 13733078  
##  Mean   :167376   Mean   : 26016706  
##  3rd Qu.:227793   3rd Qu.: 31591107  
##  Max.   :885119   Max.   :216746934  
##  NA's   :3
num_data <- covid %>% select(-`Country/Other`) %>% scale()
row.names(num_data) <- covid$`Country/Other`
dist_mat <- dist(num_data, method = "euclidean")
hclust_res <- hclust(dist_mat, method = "ward.D2")
plot(hclust_res, main = "Dendrogram – COVID Africa", cex = 0.6)

Južná Afrika tvorí úplne samostatný klaster, pretože má výrazne najvyššie hodnoty prípadov, úmrtí aj testovania a odlišuje sa od všetkých ostatných krajín. Malé ostrovné a bohatšie štáty ako Seychely, Cabo Verde či Botswana vytvárajú ďalšiu skupinu, pretože majú malé populácie a veľmi vysoké hodnoty na milión obyvateľov. Väčšina subsaharských krajín sa zhlukuje dohromady, keďže majú veľmi podobné a relatívne nízke počty prípadov, testov aj úmrtí. Napokon veľké krajiny ako Egypt, Nigeria, Etiópia či Alžírsko tvoria vlastnú skupinu, keďže sa od priemeru odlišujú veľkosťou populácie a štruktúrou šírenia pandémie.

clusters4 <- cutree(hclust_res, k = 4)
table(clusters4)
## clusters4
##  1  2  3  4 
##  7 35 11  1
pheatmap(num_data, show_rownames = TRUE, show_colnames = TRUE,
         main = "Heatmap – COVID Africa")

Heatmapa ukazuje, že Južná Afrika má výrazne vyššie hodnoty takmer vo všetkých ukazovateľoch, čo ju zreteľne oddeľuje od ostatných krajín. Malé ostrovné štáty ako Seychely, Cabo Verde či Botswana majú vysoké hodnoty na milión obyvateľov, a preto sa farebne výrazne odlišujú od priemeru. Väčšina afrických krajín má podobné nízke až stredné hodnoty, čo spôsobuje, že väčšina políčok je zafarbená jednotne v modrých odtieňoch. Krajiny s veľkou populáciou, ako Egypt, Nigéria či Etiópia, sa farebne odlišujú najmä v stĺpci populácie a v prepočtoch na milión obyvateľov, no inak sú menej extrémne ako Južná Afrika.

library(dplyr)

num_raw <- covid %>%
  select(-`Country/Other`) %>%
  mutate(across(everything(), as.numeric))

cc_idx <- complete.cases(num_raw)

num_data <- scale(num_raw[cc_idx, ])
row.names(num_data) <- covid$`Country/Other`[cc_idx]
dist_mat <- dist(num_data)
hclust_res <- hclust(dist_mat, method="ward.D2")

pca_res <- prcomp(num_data, scale. = FALSE) 
fviz_pca_ind(pca_res, geom = "point", repel = TRUE,
             title = "PCA – COVID Africa")

PCA ukazuje, že väčšina afrických krajín sa nachádza v jednej zhustenej skupine vpravo dole, čo znamená, že ich COVID profily sú si veľmi podobné. Niekoľko štátov, najmä malé ostrovné krajiny, sa nachádza vyššie na osi druhého komponentu, čo naznačuje vyššie hodnoty v ukazovateľoch na milión obyvateľov. Naopak, Južná Afrika je umiestnená ďaleko od všetkých ostatných na osi prvého komponentu, čo potvrdzuje, že je extrémne odlišná od zvyšku kontinentu svojimi vysokými hodnotami celkových prípadov, úmrtí aj testov. PCA teda jasne oddeľuje tri skupiny: Južnú Afriku ako extrém, malé ostrovné štáty s vysokými prepočtami na populáciu a väčšinu afrických krajín, ktoré majú podobný a mierny priebeh pandémie.

set.seed(123)
k3 <- kmeans(num_data, centers = 3, nstart = 20)
k4 <- kmeans(num_data, centers = 4, nstart = 20)
fviz_cluster(k3, data = num_data,
             main = "K-means (3 klastre) – COVID Africa")

K-means rozdelil krajiny do troch skupín tak, že Južná Afrika tvorí samostatný klaster, keďže svojimi hodnotami extrémne vyčnieva od všetkých ostatných. Druhý klaster tvoria malé ostrovné štáty ako Botswana, Seychely, Cabo Verde či Namíbia, ktoré majú vysoké hodnoty na milión obyvateľov a preto sa výrazne odlišujú od kontinentálneho priemeru. Tretí klaster obsahuje väčšinu afrických krajín, ktoré majú podobný priebeh pandémie a podobné hodnoty vo všetkých sledovaných ukazovateľoch, a preto sa zhlukujú dohromady v jednej veľkej skupine.

fviz_cluster(k4, data = num_data,
             main = "K-means (4 klastre) – COVID Africa")

Pri štyroch klastroch zostáva Južná Afrika opäť úplne samostatná, pretože svojimi extrémne vysokými hodnotami výrazne vyčnieva nad ostatné krajiny. Druhý klaster tvoria veľké africké populácie ako Egypt, Nigéria, Uganda či Etiópia, ktoré majú odlišnú kombináciu celkových prípadov, úmrtí a testov než väčšina kontinentu. Tretí klaster obsahuje malé ostrovné a bohatšie štáty ako Botswana, Cabo Verde, Seychely, Namíbia alebo Líbya, ktoré majú vysoké hodnoty na milión obyvateľov a preto sa zoskupujú spolu. Štvrtý klaster zahŕňa najväčšiu časť afrických krajín, ktoré majú podobný priebeh pandémie a vytvárajú kompaktnú skupinu s podobnými a skôr miernymi hodnotami vo všetkých sledovaných ukazovateľoch.