data <- read.csv("covid_africa.csv")
names(data)
##  [1] "Country.Other"     "Total.Cases"       "Total.Deaths"     
##  [4] "Total.Recovered"   "Active.Cases"      "Tot.Cases..1M.pop"
##  [7] "Deaths..1M.pop"    "Total.Tests"       "Tests..1M.pop"    
## [10] "Population"
summary(data[, c("Total.Cases", "Total.Deaths")])  # skúška
##   Total.Cases       Total.Deaths     
##  Min.   :   6597   Min.   :    38.0  
##  1st Qu.:  22886   1st Qu.:   291.2  
##  Median :  63854   Median :  1024.0  
##  Mean   : 227909   Mean   :  4772.6  
##  3rd Qu.: 171956   3rd Qu.:  3066.5  
##  Max.   :4076463   Max.   :102595.0
model <- lm(Total.Deaths ~ Total.Cases, data = data)
summary(model)
## 
## Call:
## lm(formula = Total.Deaths ~ Total.Cases, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13962.9   -298.4    520.2    707.7  12835.3 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -7.687e+02  4.589e+02  -1.675   0.0999 .  
## Total.Cases  2.431e-02  7.327e-04  33.186   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3141 on 52 degrees of freedom
## Multiple R-squared:  0.9549, Adjusted R-squared:  0.954 
## F-statistic:  1101 on 1 and 52 DF,  p-value: < 2.2e-16
library(zoo)
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(lmtest)
library(sandwich)
library(car)
## Loading required package: carData
summary(data[, c("Total.Cases", 
                 "Total.Deaths", 
                 "Total.Recovered", 
                 "Active.Cases", 
                 "Population")])
##   Total.Cases       Total.Deaths      Total.Recovered    Active.Cases  
##  Min.   :   6597   Min.   :    38.0   Min.   :   4874   Min.   :    0  
##  1st Qu.:  22886   1st Qu.:   291.2   1st Qu.:  19856   1st Qu.:   27  
##  Median :  63854   Median :  1024.0   Median :  62471   Median :  309  
##  Mean   : 227909   Mean   :  4772.6   Mean   : 206895   Mean   : 6351  
##  3rd Qu.: 171956   3rd Qu.:  3066.5   3rd Qu.: 168677   3rd Qu.: 1752  
##  Max.   :4076463   Max.   :102595.0   Max.   :3912506   Max.   :81910  
##                                       NA's   :3         NA's   :3      
##    Population       
##  Min.   :    99426  
##  1st Qu.:  2890966  
##  Median : 13733078  
##  Mean   : 26016706  
##  3rd Qu.: 31591107  
##  Max.   :216746934  
## 
# Histogram počtu prípadov
hist(data$Total.Cases,
     main = "Rozdelenie počtu prípadov (Total Cases)",
     xlab = "Total Cases")

# Histogram počtu úmrtí
hist(data$Total.Deaths,
     main = "Rozdelenie počtu úmrtí (Total Deaths)",
     xlab = "Total Deaths")

# Scatterplot prípadov vs úmrtí
plot(data$Total.Cases, data$Total.Deaths,
     main = "Total Cases vs Total Deaths",
     xlab = "Total Cases",
     ylab = "Total Deaths")

model <- lm(Total.Deaths ~ Total.Cases, data = data)
# Diagnostické grafy k modelu
par(mfrow = c(2, 2))
plot(model)

par(mfrow = c(1, 1))  # vráti rozloženie grafov späť
resid <- residuals(model)
shapiro.test(resid)   # test normality
## 
##  Shapiro-Wilk normality test
## 
## data:  resid
## W = 0.69476, p-value = 2.648e-09

Test poskytol výsledok W = 0.69476 a p-hodnotu 2.648×10⁻⁹, čo je výrazne menej než bežná hladina významnosti 0.05. Na základe toho zamietame nulovú hypotézu o normalite reziduí a konštatujeme, že reziduá modelu nie sú normálne rozdelené.

library(lmtest)
library(sandwich)

# Breusch–Pagan test heteroskedasticity
bptest(model)
## 
##  studentized Breusch-Pagan test
## 
## data:  model
## BP = 5.2798, df = 1, p-value = 0.02157
# Newey–West robustné štandardné chyby
coeftest(model, vcov = NeweyWest(model))
## 
## t test of coefficients:
## 
##                Estimate  Std. Error t value Pr(>|t|)    
## (Intercept) -7.6873e+02  3.1572e+02 -2.4349  0.01836 *  
## Total.Cases  2.4314e-02  1.2174e-03 19.9711  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Tento test hodnotí, či je variancia reziduí konštantná. Pri p-hodnote menšej ako 0.05 by sme zamietli hypotézu homoskedasticity a usúdili, že model trpí heteroskedasticitou. (Výsledok testu je možné doplniť podľa konkrétnej p-hodnoty.)

model_log <- lm(log(Total.Deaths) ~ log(Total.Cases), data = data)
summary(model_log)
## 
## Call:
## lm(formula = log(Total.Deaths) ~ log(Total.Cases), data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -3.05640 -0.31913  0.05366  0.41184  1.66310 
## 
## Coefficients:
##                  Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      -4.46602    0.75860  -5.887  2.9e-07 ***
## log(Total.Cases)  1.02374    0.06764  15.135  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.7283 on 52 degrees of freedom
## Multiple R-squared:  0.815,  Adjusted R-squared:  0.8114 
## F-statistic: 229.1 on 1 and 52 DF,  p-value: < 2.2e-16
resid <- residuals(model)
acf(resid, main = "Autokorelačná funkcia reziduí")

Box.test(resid, lag = 10, type = "Ljung")
## 
##  Box-Ljung test
## 
## data:  resid
## X-squared = 2.1707, df = 10, p-value = 0.9949

Autokoreláciu sme vizuálne hodnotili aj pomocou ACF grafu. Ak stĺpce v ACF presahujú konfidenčné hranice, ukazuje to na možnú autokoreláciu v reziduách. Okrem toho bol použitý aj Ljung–Box test, ktorý testuje autokoreláciu viacerých rádov naraz. Rovnako ako pri predchádzajúcich testoch platí, že p-hodnota pod 0.05 naznačuje prítomnosť autokorelácie.

library(lmtest)
dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 1.8386, p-value = 0.2791
## alternative hypothesis: true autocorrelation is greater than 0

Autokoreláciu reziduí sme skúmali prostredníctvom viacerých metód. Durbin–Watsonov test umožňuje detegovať autokoreláciu prvého rádu. Hodnota testovej štatistiky blízka číslu 2 naznačuje absenciu autokorelácie, zatiaľ čo hodnoty výrazne menšie alebo väčšie ako 2 indikujú pozitívnu alebo negatívnu autokoreláciu. Podobne, Breusch–Godfreyov test (BG test) poskytuje všeobecnejší test autokorelácie rôznych rádov. Pri p-hodnote menšej ako 0.05 by sme usúdili, že autokorelácia v reziduách je prítomná.

library(lmtest)

# Breusch–Godfreyov test autokorelácie reziduí
bgtest(model, order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model
## LM test = 0.34319, df = 1, p-value = 0.558
bgtest(model, order = 5)
## 
##  Breusch-Godfrey test for serial correlation of order up to 5
## 
## data:  model
## LM test = 0.60225, df = 5, p-value = 0.9879