Lineárna regresia a diagnostika modelu – udržateľná energetika
1 Úvod
V tomto cvičení nadväzujem na predchádzajúcu analýzu udržateľnej energetiky. Používam databázu Global Data on Sustainable Energy, ktorá obsahuje ekonomické a energetické ukazovatele krajín sveta.
Cieľom je vytvoriť lineárny regresný model, interpretovať jeho výsledky a vykonať základnú diagnostiku.
Výskumná otázka: Ako súvisia ekonomická úroveň krajiny a spotreba energie s podielom nízkouhlíkovej elektriny?
Analýza sa zameriava na rok 2019. Ide o prierezovú analýzu, kde jedno pozorovanie predstavuje jednu krajinu.
2 1. Príprava údajov
2.1 Načítanie databázy
Používam základné funkcie programu R bez potreby inštalácie ďalších balíkov.
subor <-"global-data-on-sustainable-energy (1).csv"moznosti <-c( subor,file.path("udaje", subor),file.path("data", subor),"global-data-on-sustainable-energy.csv")existujuce <- moznosti[file.exists(moznosti)]if (length(existujuce) ==0) {stop("CSV súbor sa nenašiel. Ulož ho do rovnakého priečinka ako Cvicenie5.qmd." )}udaje <-read.csv( existujuce[1],check.names =FALSE,stringsAsFactors =FALSE)cat("Počet riadkov:", nrow(udaje), "\n")
Počet riadkov: 3649
cat("Počet premenných:", ncol(udaje), "\n")
Počet premenných: 21
2.2 Výber premenných
Vysvetľovanou premennou je podiel nízkouhlíkovej elektriny. Medzi vysvetľujúce premenné patria HDP na obyvateľa, spotreba primárnej energie na obyvateľa a energetická intenzita.
d <- udaje[udaje$Year ==2019, ]reg_data <-data.frame(krajina = d[["Entity"]],low_carbon =as.numeric( d[["Low-carbon electricity (% electricity)"]] ),gdp_pc =as.numeric( d[["gdp_per_capita"]] ),energy_pc =as.numeric( d[["Primary energy consumption per capita (kWh/person)"]] ),intensity =as.numeric( d[["Energy intensity level of primary energy (MJ/$2017 PPP GDP)"]] ))pocet_pred <-nrow(reg_data)reg_data <- reg_data[complete.cases(reg_data) & reg_data$gdp_pc >0& reg_data$energy_pc >0& reg_data$intensity >0& reg_data$low_carbon >=0& reg_data$low_carbon <=100,]reg_data$gdp_tisic <- reg_data$gdp_pc /1000reg_data$energy_tisic <- reg_data$energy_pc /1000reg_data$log_gdp <-log(reg_data$gdp_pc)reg_data$log_energy <-log(reg_data$energy_pc)rownames(reg_data) <-make.unique(reg_data$krajina)cat("Počet krajín pred čistením:", pocet_pred, "\n")
Počet krajín pred čistením: 175
cat("Počet krajín po čistení:", nrow(reg_data), "\n")
Chýbajúce hodnoty boli z pracovnej vzorky odstránené. Nenahrádzam ich nulami, pretože by to mohlo skresliť regresnú analýzu.
2.3 Opisná štatistika
opis <-data.frame(Ukazovatel =c("Počet krajín","Priemerný podiel nízkouhlíkovej elektriny (%)","Medián podielu nízkouhlíkovej elektriny (%)","Priemerné HDP na obyvateľa (USD)","Priemerná spotreba energie (kWh/os.)" ),Hodnota =c(nrow(reg_data),mean(reg_data$low_carbon),median(reg_data$low_carbon),mean(reg_data$gdp_pc),mean(reg_data$energy_pc) ))knitr::kable( opis,digits =2,caption ="Základné opisné štatistiky")
Základné opisné štatistiky
Ukazovatel
Hodnota
Počet krajín
158.00
Priemerný podiel nízkouhlíkovej elektriny (%)
40.67
Medián podielu nízkouhlíkovej elektriny (%)
35.82
Priemerné HDP na obyvateľa (USD)
15496.82
Priemerná spotreba energie (kWh/os.)
26329.69
3 2. Ukladanie a obnovenie workspace
Workspace predstavuje pracovné prostredie programu R, v ktorom sú uložené všetky vytvorené objekty.
Funkcia save.image() uloží pracovné prostredie do súboru. Funkcia load() ho dokáže obnoviť.
save.image("pamat_cvicenie5.RData")pomocny_objekt <-123rm(pomocny_objekt)load("pamat_cvicenie5.RData")cat("Údaje boli úspešne obnovené:",exists("reg_data"),"\n")
Údaje boli úspešne obnovené: TRUE
Na odstránenie všetkých objektov možno použiť rm(list = ls()). V dokumente tento príkaz nespúšťam, pretože by odstránil objekty potrebné na ďalšie výpočty.
Zvýšenie tejto premennej o 1 000 pôvodných jednotiek je spojené so zmenou podielu nízkouhlíkovej elektriny o 0.5023 percentuálneho bodu pri nezmenenej druhej premennej.
Zvýšenie tejto premennej o 1 000 pôvodných jednotiek je spojené so zmenou podielu nízkouhlíkovej elektriny o -0.3094 percentuálneho bodu pri nezmenenej druhej premennej.
Výsledky predstavujú štatistické súvislosti, nie dôkaz príčinného vzťahu.
if (p_f <0.05) {cat("Na hladine 5 % zamietam nulovú hypotézu. ","Regresný model je ako celok štatisticky významný." )} else {cat("Na hladine 5 % nulovú hypotézu nezamietam. ","Spoločná štatistická významnosť sa nepreukázala." )}
Na hladine 5 % zamietam nulovú hypotézu. Regresný model je ako celok štatisticky významný.
8 7. Grafická diagnostika regresného modelu
Na diagnostiku používam štyri štandardné grafy funkcie plot(model1).
par(mfrow =c(2, 2))plot(model1)
Diagnostické grafy prvého modelu
par(mfrow =c(1, 1))
8.1 Residuals vs Fitted
Prvý graf zobrazuje rezíduá voči odhadnutým hodnotám.
Pri vhodne špecifikovanom modeli by mali byť rezíduá náhodne rozptýlené okolo nuly. Systematické zakrivenie môže signalizovať nelinearitu a lievikovitý tvar môže naznačovať heteroskedasticitu.
8.2 Normal Q-Q
Druhý graf slúži na vizuálne posúdenie normality rezíduí.
Ak sú rezíduá približne normálne rozdelené, body by mali sledovať referenčnú priamku. Výrazné odchýlky môžu naznačovať problém s normalitou.
8.3 Scale-Location
Tretí graf slúži na posúdenie konštantnosti rozptylu rezíduí.
Rovnomerné rozptýlenie bodov podporuje predpoklad homoskedasticity. Výrazný rastúci alebo klesajúci trend môže signalizovať heteroskedasticitu.
8.4 Residuals vs Leverage
Štvrtý graf pomáha identifikovať pozorovania, ktoré môžu výrazne ovplyvňovať regresný model.
Leverage vyjadruje neobvyklosť pozorovania vzhľadom na vysvetľujúce premenné. Cookova vzdialenosť pomáha hodnotiť jeho vplyv na odhadnutý model.
9 8. Jarqueov–Berov test normality
Jarqueov–Berov test overuje, či majú rezíduá normálne rozdelenie.
Hypotézy:
\[
H_0: \text{rezíduá majú normálne rozdelenie}
\]
\[
H_1: \text{rezíduá nemajú normálne rozdelenie}
\]
Call:
lm(formula = low_carbon ~ log_gdp + log_energy, data = reg_data)
Residuals:
Min 1Q Median 3Q Max
-49.276 -27.861 -6.459 27.091 72.184
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57.220 16.656 3.435 0.000759 ***
log_gdp 7.603 4.560 1.667 0.097448 .
log_energy -8.915 4.329 -2.059 0.041139 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 32.95 on 155 degrees of freedom
Multiple R-squared: 0.02845, Adjusted R-squared: 0.01592
F-statistic: 2.27 on 2 and 155 DF, p-value: 0.1068
12.1 Regresné koeficienty
knitr::kable(as.data.frame(summary(model2)$coefficients),digits =4,caption ="Regresné koeficienty druhého modelu")
Regresné koeficienty druhého modelu
Estimate
Std. Error
t value
Pr(>|t|)
(Intercept)
57.2203
16.6561
3.4354
0.0008
log_gdp
7.6027
4.5595
1.6674
0.0974
log_energy
-8.9154
4.3293
-2.0593
0.0411
Pri zvýšení vysvetľujúcej premennej približne o 1 % sa očakávaný podiel nízkouhlíkovej elektriny zmení približne o \(\beta_j/100\) percentuálneho bodu pri nezmenenej druhej premennej.
12.2 Diagnostické grafy druhého modelu
par(mfrow =c(2, 2))plot(model2)
par(mfrow =c(1, 1))
12.3 Test normality druhého modelu
jb2 <-jb_test(model2)knitr::kable( jb2,digits =4,caption ="Jarqueov–Berov test – model 2")
naj <-which.min(porovnanie$AIC)cat("**Najnižšiu hodnotu AIC dosiahol ", porovnanie$Model[naj]," s hodnotou ",round(porovnanie$AIC[naj], 4),".**\n\n",sep ="")
Najnižšiu hodnotu AIC dosiahol Model 1 – lineárny s hodnotou 1551.646.
cat("Podľa informačného kritéria AIC je tento ","model spomedzi porovnávaných špecifikácií ","preferovaný. Pri konečnom hodnotení je však ","potrebné zohľadniť aj diagnostiku rezíduí.")
Podľa informačného kritéria AIC je tento model spomedzi porovnávaných špecifikácií preferovaný. Pri konečnom hodnotení je však potrebné zohľadniť aj diagnostiku rezíduí.
14.2 Porovnanie normality rezíduí
for (i inseq_len(nrow(porovnanie))) {cat("\n\n**", porovnanie$Model[i],":** ",sep ="" )if (porovnanie$JB_p[i] <0.05) {cat("Jarqueov–Berov test zamieta normalitu ","rezíduí na hladine 5 %." ) } else {cat("Jarqueov–Berov test nezamieta normalitu ","rezíduí na hladine 5 %." ) }}
Model 1 – lineárny: Jarqueov–Berov test zamieta normalitu rezíduí na hladine 5 %.
Model 2 – logaritmický: Jarqueov–Berov test zamieta normalitu rezíduí na hladine 5 %.
Model 3 – rozšírený: Jarqueov–Berov test zamieta normalitu rezíduí na hladine 5 %.
15 14. Záverečné zhodnotenie
V tomto cvičení som analyzoval súvislosť medzi ekonomickou úrovňou, spotrebou energie a podielom nízkouhlíkovej elektriny v krajinách sveta.
Pomocou t-testov som overil štatistickú významnosť jednotlivých regresných koeficientov.
F-testom som posúdil celkovú významnosť modelu a pomocou koeficientu determinácie jeho vysvetľovaciu schopnosť.
Následne som vykonal diagnostiku rezíduí pomocou štyroch štandardných grafov, Jarqueovho–Berovho testu a identifikácie odľahlých pozorovaní.
Vytvoril som tri regresné modely a porovnal ich pomocou informačného kritéria AIC.
cat("Najnižšiu hodnotu AIC dosiahol **", porovnanie$Model[naj],"**.\n\n",sep ="")
Najnižšiu hodnotu AIC dosiahol Model 1 – lineárny.
cat("Výsledky predstavujú štatistické súvislosti, ","nie dôkaz príčinných vzťahov. ","Energetická štruktúra krajín závisí aj od ","energetickej politiky, prírodných podmienok ","a historického vývoja, ktoré regresný model ","nemusí dostatočne zachytávať.")
Výsledky predstavujú štatistické súvislosti, nie dôkaz príčinných vzťahov. Energetická štruktúra krajín závisí aj od energetickej politiky, prírodných podmienok a historického vývoja, ktoré regresný model nemusí dostatočne zachytávať.
16 15. Uloženie výsledkov
Na konci cvičenia ukladám celé pracovné prostredie vrátane pripravených údajov a regresných modelov.
save.image("pamat_cvicenie5.RData")cat("Pracovné prostredie bolo úspešne uložené.")
Pracovné prostredie bolo úspešne uložené.
17 Použité zdroje
Gazda, V. Econometrics in R – cvičenie 5: Základná diagnostika modelu. https://rpubs.com/gazdavladimir/1472929
Gazda, V. Hat matica, leverage a diagnostika vplyvných pozorovaní. https://rpubs.com/gazdavladimir/1474655
Global Data on Sustainable Energy. Kaggle. https://www.kaggle.com/datasets/anshtanwar/global-data-on-sustainable-energy
R Core Team. R: A Language and Environment for Statistical Computing.