population_data <- read.csv("population_data.csv")
head(population_data)
## id Country..or.dependency. Population.2025 Yearly.Change Net.Change
## 1 1 India 1463865525 0.89% 12929734
## 2 2 China 1416096094 −0.23% −3,225,184
## 3 3 United States 347275807 0.54% 1849236
## 4 4 Indonesia 285721236 0.79% 2233305
## 5 5 Pakistan 255219554 1.57% 3950390
## 6 6 Nigeria 237527782 2.08% 4848304
## Density..P.Km.. Land.Area..Km.. Migrants..net. Fert..Rate Median.Age
## 1 492 2973190 −495,753 1.94 28.8
## 2 151 9388211 −268,126 1.02 40.1
## 3 38 9147420 1230663 1.62 38.5
## 4 158 1811570 −39,509 2.10 30.4
## 5 331 770880 −1,235,336 3.50 20.6
## 6 261 910770 −15,258 4.30 18.1
## Urban.Pop.. World.Share
## 1 37.1% 17.78%
## 2 67.5% 17.20%
## 3 82.8% 4.22%
## 4 59.6% 3.47%
## 5 34.4% 3.10%
## 6 54.9% 2.89%
names(population_data)
## [1] "id" "Country..or.dependency."
## [3] "Population.2025" "Yearly.Change"
## [5] "Net.Change" "Density..P.Km.."
## [7] "Land.Area..Km.." "Migrants..net."
## [9] "Fert..Rate" "Median.Age"
## [11] "Urban.Pop.." "World.Share"
Po autokoreácii a heteroskedasticite rezíduí je multikolinearita tretím závažným porušením predpokladov použitia metódy najmenších štvorcov. Tu sa okrem iného predpokadá, že matica \(\mathbf X\) je tvorená lineárne nezávislými riadkami a tiež stĺpcami, čo zabezpečí regularitu matice \(\mathbf X^T\mathbf X\) a teda možnosť jej inverzie. Tá sa používa pri odhadoch regresných koeficientov. V praxi sa ale môže stať, že vzniká "takmer singulárna matica \(\mathbf X^T\mathbf X\) ", t.j. matica \(\mathbf X\) je tvorená "približne" lineárne závislými stĺpcami, t.j. existuje taká ich lineárna kombinácia, v ktorej
\[ x_{il} = \alpha_0 + \alpha_1 x_{i1} + \dots + \alpha_{l-1} x_{i,(l-1)} + \alpha_{l+1} x_{i,(l+1)} + \alpha_k x_{i,k} + \nu_i \]
Tu \(\nu_i\) sú rádovo menšie čísla , než regresory \(x_{.}\), t.j. \((\forall i)(\nu_i << x_{.,i})\). V tomto prípade je inverzná matica \((\mathbf X^T\mathbf X)^{-1}\) veľmi nestabilná a obsahuje na hlavnej diagonále veľmi veľké hodnoty. Táto matica sa používa pri výpočtoch \[\hat \beta = (\mathbf X^T\mathbf X)^{-1} \mathbf X^T \mathbf y\] a tiež \[\text{std}(\beta_i) = \sqrt{\sigma^2 (\mathbf X^T \mathbf X)^{-1}_{ii}}.\] To spôsobuje nestabilitu odhadovaných regresných koeficientov a ich nadhodnotené rozptyly.
Tento problém nazývame problémom multikolinearity.
Multikolinearita patrí medzi najčastejšie problémy viacnásobnej
lineárnej regresie.
Je dôležité jasne rozlišovať dva fakty:
Budeme pracovať s regresným modelom z minulých cvičení. \[ Population_{2025,i} = \beta_0 + \beta_1 Density_i + \beta_2 UrbanPop_i + \beta_3 MedianAge_i + u_i, \]
# načítanie dát – zachováme pôvodné názvy stĺpcov
udaje_raw <- read.csv("population_data.csv",
header = TRUE,
check.names = FALSE)
# vyberieme len premenné, s ktorými chceme pracovať
library(dplyr)
library(readr)
udaje <- udaje_raw %>%
select(
`Country (or dependency)`,
`Population 2025`,
`Density (P/Km²)`,
`Urban Pop %`,
`Median Age`
) %>%
# premenovanie na jednoduchšie názvy
rename(
Country = `Country (or dependency)`,
Population2025 = `Population 2025`,
Density = `Density (P/Km²)`,
UrbanPopPerc = `Urban Pop %`,
MedianAge = `Median Age`
) %>%
# UrbanPop prevedieme z percent (napr. 67.5 %) na podiel (0.675)
mutate(
UrbanPop = parse_number(UrbanPopPerc) / 100
) %>%
select(-UrbanPopPerc)
# ---- imputácia chýbajúcich hodnôt mediánom ----
cols_model <- c("Population2025", "Density", "UrbanPop", "MedianAge")
column_medians <- sapply(udaje[cols_model], median, na.rm = TRUE)
for (col in cols_model) {
udaje[[col]][is.na(udaje[[col]])] <- column_medians[col]
}
# ---- regresný model podľa textu ----
# Population_{2025,i} = beta_0 + beta_1 Density_i + beta_2 UrbanPop_i + beta_3 MedianAge_i + u_i
model <- lm(Population2025 ~ Density + UrbanPop + MedianAge, data = udaje)
summary(model)
##
## Call:
## lm(formula = Population2025 ~ Density + UrbanPop + MedianAge,
## data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -49081001 -34324675 -26453810 -10811593 1422918856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48193833 34734520 1.387 0.167
## Density -1339 3873 -0.346 0.730
## UrbanPop -24868470 47329102 -0.525 0.600
## MedianAge 91594 1041208 0.088 0.930
##
## Residual standard error: 1.4e+08 on 229 degrees of freedom
## Multiple R-squared: 0.001937, Adjusted R-squared: -0.01114
## F-statistic: 0.1482 on 3 and 229 DF, p-value: 0.9308
model <- lm(Population2025 ~ Density + UrbanPop + MedianAge,
data = udaje)
summary(model)
##
## Call:
## lm(formula = Population2025 ~ Density + UrbanPop + MedianAge,
## data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -49081001 -34324675 -26453810 -10811593 1422918856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48193833 34734520 1.387 0.167
## Density -1339 3873 -0.346 0.730
## UrbanPop -24868470 47329102 -0.525 0.600
## MedianAge 91594 1041208 0.088 0.930
##
## Residual standard error: 1.4e+08 on 229 degrees of freedom
## Multiple R-squared: 0.001937, Adjusted R-squared: -0.01114
## F-statistic: 0.1482 on 3 and 229 DF, p-value: 0.9308
Vo výsledkoch regresie pozorujeme, že odhady regresných koeficientov jednotlivých premenných sa síce líšia svojou veľkosťou, avšak ani jedna z nich nevykazuje štatistickú významnosť. Ide najmä o premenné Density, UrbanPop a MedianAge, pri ktorých sú p-hodnoty výrazne nad bežnou hladinou významnosti (0.730, 0.600 a 0.930). Z hľadiska veľkosti koeficientov vidíme, že odhadovaný vplyv UrbanPop má veľmi veľký absolútny koeficient (−24 868 470), zatiaľ čo koeficient pri Density je rádovo menší (−1339). Podobné rozdiely nachádzame aj medzi MedianAge a ostatnými premennými. Treba však zdôrazniť, že tieto rozdiely nie sú interpretable v kauzálnom zmysle, keďže koeficienty sú štatisticky nevýznamné a model ako celok nevysvetľuje variabilitu počtu obyvateľov. Hodnota R² = 0.0019 naznačuje, že model zachytáva menej než jedno promile variability závislej premennej. Z toho vyplýva, že hoci sa koeficienty líšia v rádoch veľkosti, ich informatívna hodnota je veľmi obmedzená. Tento výsledok je spôsobený tým, že zvolené vysvetľujúce premenné opisujú štruktúru populácie (podiel mestského obyvateľstva, mediánový vek či hustota), nie jej absolútnu veľkosť. Variabilita počtu obyvateľov krajín je preto modelom zachytená len minimálne.
Korelácia dokáže zachytiť párové vzťahy medzi premennými. Ak medzi niektorými vysvetľujúcimi premennými je vysoká korelácia (signalizujúca multikolinearitu), potom je najjednoduchšie ju zo zoznamu regresorov vylúčiť. Korelácie sa dajú aj testovať, alebo len vyčísliť a potom podľa intuitívneho pravidla vylúčiť jednu premennú, ktorá má koreláciu s inou premennou v absolútnej hodnote vyššiu ako 0.8, resp. 0.9.
xvars <- udaje[, c("Density", "UrbanPop", "MedianAge")]
round(cor(xvars), 3)
## Density UrbanPop MedianAge
## Density 1.000 0.088 0.182
## UrbanPop 0.088 1.000 0.422
## MedianAge 0.182 0.422 1.000
Korelácie medzi vysvetľujúcimi premennými sú nízke až stredné, čo znamená, že regresný model netrpí multikolinearitou. Korelácia medzi Density a UrbanPop je veľmi nízka (0.088). → Hustota obyvateľstva prakticky nesúvisí s podielom mestského obyvateľstva. Korelácia medzi Density a MedianAge je takisto nízka (0.182). → Hustejšie osídlené krajiny nemajú systematicky vyšší alebo nižší mediánový vek. Najvyššia korelácia je medzi UrbanPop a MedianAge (0.422), čo predstavuje približne stredne silný vzťah, avšak stále je výrazne pod hranicou indikujúcej multikolinearitu (0.8–0.9). → Krajiny s vyšším podielom mestského obyvateľstva majú tendenciu mať aj vyšší mediánový vek, no tento vzťah nie je problematický. Celkovo hodnoty korelácií nenaznačujú žiadne problémy, preto môžeme všetky tri premenné ponechať v regresnom modeli.
pairs(xvars,
main = "Scatterplotová matica – premenné Density, UrbanPop, MedianAge")
Indikátorom multikolinearity u premennej, ktorá multikolinearitu zapríčiňuje, je Variance Inflation Factor (VIF). Pre premennú \(x_j\) je potom
\[ VIF_j = \frac{1}{1 - R_j^2} \]
kde \(R_j^2\) pochádza z regresie:
\[ X_j = \gamma_0 + \gamma_1 X_1 + \cdots + \gamma_{j-1} X_{j-1} + \gamma_{j+1} X_{j+1} + u. \]
library(car)
vif(model)
## Density UrbanPop MedianAge
## 1.034267 1.216687 1.248446
Intuitívnym kritériom, ktoré signalizuje prítomnosť multikolinearity, je podmienka VIF > 5 (prísne kritérium), alebo VIF > 10 (menej prísne kritérium). V našom prípade to nespĺňa žiadna z vysvetľujúcich veličín.
Pri existencii multikolinearity sa model prejavuje tak, že koeficient determinácie je síce vysoký a zdá sa, že model je veľmi dobrý, ale regresné koeficienty nie sú štatisticky významné - t.j. štandardné odchýlky regresných koeficientov sú veľmi veľké. Uvedomíme si to, ak sa pozrieme, ako sa počítajú - t.j. \(\text{std}(\beta_i) = \sqrt{\sigma^2 (\mathbf X^T \mathbf X)^{-1}_{ii}}\), kde rozhodujúci je \(i\)ty prvok hlavnej diagonály matice \((\mathbf X^T \mathbf X)^{-1}\). Tie prvky sú ale v prípade podobnosti vysvetľujúcich premenných mimoriadne veľké. Túto situáciu zachytáva nasledovný ukazovateľ.
Pri výpočte Condition number \(\kappa\) sa používa vzorec
\[\kappa = \frac{\theta_{\text{max}}}{\theta_{\text{min}}}\]
kde \(\theta_.\) sú vlastné čísla matice (vysvetlené nižšie). Conditional number nie je test, je to len indikátor, ktorý posudzuje mieru multikolinearity medzi premennými. Používame intuitívne pravidlo. Ak Conditional number je
V našom prípade to vypočítame nasledovne
X <- model.matrix(model)[, -1]
XtX <- t(X) %*% X
eig <- eigen(XtX)
condition_number <- sqrt(max(eig$values) / min(eig$values))
condition_number
## [1] 11433.5
Hodnota kondičného čísla je približne 11 433, čo predstavuje veľmi vysokú hodnotu a naznačuje výrazné problémy s číselnou stabilitou matice X′X. V tomto prípade však vysoké kondičné číslo nie je spôsobené multikolinearitou medzi vysvetľujúcimi premennými, keďže korelačná matica aj hodnoty VIF ukázali iba nízke až stredné korelácie. Dôvodom zvýšeného kondičného čísla je výrazná rozdielnosť mierok jednotlivých premenných. Premenná Density nadobúda hodnoty až v desiatkach tisíc, zatiaľ čo UrbanPop je vyjadrený ako podiel v rozsahu 0–1 a MedianAge sa pohybuje približne medzi 15 a 50 rokmi. Takéto nerovnomerné škálovanie spôsobuje numerickú nestabilitu, no nepredstavuje problém z hľadiska multikolinearity. Z tohto dôvodu môžeme konštatovať, že vysoké kondičné číslo nereflektuje nevhodnú kombináciu regresorov, ale rozdielne jednotky merania, a teda nepredstavuje dôvod na vylúčenie premenných z modelu.
Vlastné číslo štvorcovej matice \(\mathbf X^T \mathbf X\) je číslo \(\theta_j\), pre ktoré platí \((\mathbf X^T \mathbf X)\mathbf h^j = \theta_i\mathbf h^j\). \(\mathbf h^j\) je tzv vlastný vektor tejto matice. Máme toľko vlastných čísel (teda aj vlastných vektorov), koľko obsahuje matica \(\mathbf X^T \mathbf X\) riadkov (stĺpcov).
Môže sa stať, že VIF faktor nesignalizuje multikolinearitu u žiadnej z vysvetľujúcich veličín, ale sú navzájom prepojené cyklickými lineárnymi závislosťami všetky premenné. To zachytáva práve Condition Number.
Pokúsme sa vynechať postupne dve premenné, ktoré majú najvyšší VIF a porovnajme následne upravené koeficienty determinácie oboch nových modelov
# Model bez premennnej s najvyšším VIF – MedianAge
model_noMedianAge <- lm(Population2025 ~ Density + UrbanPop, data = udaje)
summary(model_noMedianAge)
##
## Call:
## lm(formula = Population2025 ~ Density + UrbanPop, data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -47316076 -34214827 -26985966 -10518314 1423045310
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 50038440 27631321 1.811 0.0715 .
## Density -1285 3815 -0.337 0.7366
## UrbanPop -23143300 42981920 -0.538 0.5908
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 139700000 on 230 degrees of freedom
## Multiple R-squared: 0.001903, Adjusted R-squared: -0.006776
## F-statistic: 0.2193 on 2 and 230 DF, p-value: 0.8032
# Model bez premennej UrbanPop
model_noUrbanPop <- lm(Population2025 ~ Density + MedianAge, data = udaje)
summary(model_noUrbanPop)
##
## Call:
## lm(formula = Population2025 ~ Density + MedianAge, data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -37296327 -34319823 -29535849 -10240280 1428132245
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 40295626 31264182 1.289 0.199
## Density -1365 3866 -0.353 0.724
## MedianAge -135095 946127 -0.143 0.887
##
## Residual standard error: 139700000 on 230 degrees of freedom
## Multiple R-squared: 0.0007338, Adjusted R-squared: -0.007955
## F-statistic: 0.08445 on 2 and 230 DF, p-value: 0.919
Po vynechaní jednotlivých premenných sme odhadli dva zjednodušené regresné modely: (1) model so Density a UrbanPop, a (2) model so Density a MedianAge.
Výsledky ukazujú, že v oboch prípadoch ostávajú všetky koeficienty ne-signifikantné, pričom p-hodnoty sa pohybujú vysoko nad bežnými hladinami významnosti. Hodnoty R² sú v oboch modeloch veľmi nízke (okolo 0.001), dokonca nižšie než v pôvodnom modeli, a Adjusted R² zostáva záporné. F-test takisto nepotvrdzuje štatistickú významnosť ani jedného z redukovaných modelov. Z toho vyplýva, že odstránenie premenných nevedie k žiadnemu zlepšeniu kvality regresného modelu. Problémom teda nie je multikolinearita medzi vysvetľujúcimi premennými, ale skôr to, že premenné Density, UrbanPop a MedianAge nedokážu vysvetliť variabilitu počtu obyvateľov krajín v roku 2025.
Škálovanie môže byť veľmi efektívne, znižuje ale interpretovateľnosť modelu. Ide o úpravu premenných podľa nasledovného vzorca:
\[x^{scale} = \frac{x-M}{\sqrt{D}}\] kde \(M\) je stredná hodnota (priemer) a \(D\) je rozptyl premennej.
# centrovanie a škálovanie premenných
udaje$Density_c <- scale(udaje$Density, center = TRUE, scale = TRUE)
udaje$UrbanPop_c <- scale(udaje$UrbanPop, center = TRUE, scale = TRUE)
udaje$MedianAge_c <- scale(udaje$MedianAge, center = TRUE, scale = TRUE)
# centricky model
model_centered <- lm(Population2025 ~ Density_c + UrbanPop_c + MedianAge_c,
data = udaje)
summary(model_centered)
##
## Call:
## lm(formula = Population2025 ~ Density_c + UrbanPop_c + MedianAge_c,
## data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -49081001 -34324675 -26453810 -10811593 1422918856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 35320796 9169316 3.852 0.000152 ***
## Density_c -3231367 9345172 -0.346 0.729826
## UrbanPop_c -5325755 10135854 -0.525 0.599788
## MedianAge_c 903206 10267290 0.088 0.929978
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.4e+08 on 229 degrees of freedom
## Multiple R-squared: 0.001937, Adjusted R-squared: -0.01114
## F-statistic: 0.1482 on 3 and 229 DF, p-value: 0.9308
# VIF pre centricky model
vif(model_centered)
## Density_c UrbanPop_c MedianAge_c
## 1.034267 1.216687 1.248446
Conditional Number je
X <- model.matrix(model_centered)[, -1]
XtX <- t(X) %*% X
eig <- eigen(XtX)
condition_number <- sqrt(max(eig$values) / min(eig$values))
condition_number
## [1] 1.624357
Hodnota Condition number = 1.62 je veľmi nízka a nachádza sa hlboko pod hranicou, ktorá by naznačovala akýkoľvek problém s multikolinearitou alebo číselnou nestabilitou matice X′X. Za bežných okolností sa za problematické považujú hodnoty nad približne 30, pričom hodnoty nad 1000 signalizujú vážnu multikolinearitu. Výsledok 1.62 preto ukazuje, že po centrovaní a škálovaní premenných je model plne numericky stabilný a multikolinearita sa v ňom nevyskytuje. Tento výsledok je zároveň v súlade s veľmi nízkymi hodnotami VIF, ktoré taktiež potvrdili absenciu multikolinearity. Aj keď preškálovanie výrazne zlepšilo číselné vlastnosti modelu, nijako to nemení jeho celkovú vysvetľovaciu schopnosť, keďže zvolené premenné nedokážu zachytiť variabilitu počtu obyvateľov jednotlivých krajín.
Ak sa chceme vyhnúť strate interpretovateľnosti, môžeme sa pozrieť, v akých rádoch sa pohybuje vývoj jednotlivých vysvetľujúcich veličín a upraviť jednoduchým prevodom na iné jednotky tú premennú, ktorá sa výrazne odlišuje od ostatných. V našom prípade ide o premennú Density, ktorá meria hustotu obyvateľstva v počte obyvateľov na km². Hodnoty tejto premennej sú často v tisícoch až desaťtisícoch, zatiaľ čo premenné UrbanPop (podiel mestského obyvateľstva) a MedianAge (mediánový vek) majú hodnoty rádovo v jednotkách až desiatkach. Pre lepšiu porovnateľnosť preto prevedieme premennú Density delením 1000 na hustotu vyjadrenú v tisícoch obyvateľov na km². Tým získame premenné vyjadrené v rádovo porovnateľnejších jednotkách, ako je uvedené v nasledujúcej tabuľke.
udaje$Density1000 <- udaje$Density / 1000
head(udaje)
## Country Population2025 Density MedianAge UrbanPop Density_c
## 1 India 1463865525 492 28.8 0.371 0.00179291
## 2 China 1416096094 151 40.1 0.675 -0.13952860
## 3 United States 347275807 38 38.5 0.828 -0.18635949
## 4 Indonesia 285721236 158 30.4 0.596 -0.13662758
## 5 Pakistan 255219554 331 20.6 0.344 -0.06493074
## 6 Nigeria 237527782 261 18.1 0.549 -0.09394102
## UrbanPop_c MedianAge_c Density1000
## 1 -1.11070343 -0.3140671 0.492
## 2 0.30881654 0.8318688 0.151
## 3 1.02324600 0.6696124 0.038
## 4 -0.06007188 -0.1518107 0.158
## 5 -1.23677922 -1.1456312 0.331
## 6 -0.27953713 -1.3991569 0.261
Potom lineárny model dosiahne výsledky
# lineárny model so škálovanou premennou Density1000
model_Density1000 <- lm(Population2025 ~ Density1000 + UrbanPop + MedianAge,
data = udaje)
summary(model_Density1000)
##
## Call:
## lm(formula = Population2025 ~ Density1000 + UrbanPop + MedianAge,
## data = udaje)
##
## Residuals:
## Min 1Q Median 3Q Max
## -49081001 -34324675 -26453810 -10811593 1422918856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 48193833 34734520 1.387 0.167
## Density1000 -1339184 3872944 -0.346 0.730
## UrbanPop -24868470 47329102 -0.525 0.600
## MedianAge 91594 1041208 0.088 0.930
##
## Residual standard error: 1.4e+08 on 229 degrees of freedom
## Multiple R-squared: 0.001937, Adjusted R-squared: -0.01114
## F-statistic: 0.1482 on 3 and 229 DF, p-value: 0.9308
vif(model_Density1000)
## Density1000 UrbanPop MedianAge
## 1.034267 1.216687 1.248446
X <- model.matrix(model_Density1000)[, -1]
XtX <- t(X) %*% X
eig <- eigen(XtX)
condition_number <- sqrt(max(eig$values) / min(eig$values))
condition_number
## [1] 155.4059
Hodnota Condition number = 155.41 naznačuje mierne zvýšenú číselnú nestabilitu, pretože prekračuje hranicu približne 100, ktorá sa často uvádza ako orientačný limit pre dobre kondicionované modely. Napriek tomu však táto hodnota nepredstavuje problém multikolinearity, keďže ukazovatele VIF zostávajú nízke (okolo 1.0–1.25). To znamená, že vysvetľujúce premenné Density1000, UrbanPop a MedianAge si medzi sebou nezdieľajú výraznú lineárnu závislosť. Zvýšená hodnota condition number je spôsobená najmä rozdielmi v mierkach a rozptyloch jednotlivých premenných, nie ich vzájomnou koreláciou. Tento jav je v geografických a demografických dátach bežný a neovplyvňuje samotné štatistické závery modelu. Celkovo teda môžeme povedať, že aj keď je condition number relatívne vyšší, multikolinearita nie je v modeli prítomná a z hľadiska interpretácie regresie nevzniká žiadny problém.
V našom modeli nepredstavuje multikolinearita problém. Hodnoty VIF boli vo všetkých prípadoch nízke a ani po ďalších úpravách modelu sa nezvýšili, čo potvrdzuje, že vysvetľujúce premenné Density, UrbanPop a MedianAge medzi sebou nevykazujú silné lineárne vzťahy. Condition number v pôvodnom modeli bol vysoký najmä pre veľké rozdiely v mierkach premenných, nie z dôvodu multikolinearity. Po centrovaní a škálovaní sa jeho hodnota výrazne znížila, čo potvrdzuje, že problém bol numerický, nie štrukturálny. Vynechávanie premenných ani centrovanie nezlepšilo kvalitu regresného modelu. Hodnoty R² ostali veľmi nízke a žiadna z premenných nebola štatisticky významná. To znamená, že zvolené regresory nedokážu vysvetliť variabilitu populácie krajín v roku 2025. Aj keď multikolinearita nezavádza bias, môže zvyšovať štandardné chyby koeficientov. V našom prípade však nebola prítomná, takže nezhoršovala výsledky modelu. Hlavným dôvodom nízkej výpovednej hodnoty modelu je to, že vysvetľujúce premenné jednoducho nie sú vhodné na predikciu populácie krajín.