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
rm(list=ls())
# Načítanie dát
udaje <- read.csv2("Chinas GDP in Province En.csv", header = TRUE, sep = ",", dec = ".")  

# Pozrime si štruktúru
str(udaje)
## 'data.frame':    29 obs. of  32 variables:
##  $ X             : int  2020 2019 2018 2017 2016 2015 2014 2013 2012 2011 ...
##  $ Beijing       : num  36103 35445 33106 29883 27041 ...
##  $ Tianjin       : num  14084 14056 13363 12451 11477 ...
##  $ Hebei         : num  36207 34979 32495 30641 28474 ...
##  $ Shanxi        : num  17652 16962 15958 14484 11946 ...
##  $ Inner.Mongolia: num  17360 17212 16141 14898 13789 ...
##  $ Liaoning      : num  25115 24855 23510 21693 20392 ...
##  $ Jilin         : num  12311 11727 11254 10922 10427 ...
##  $ Heilongjiang  : num  13698 13544 12846 12313 11895 ...
##  $ Shanghai      : num  38701 37988 36012 32925 29887 ...
##  $ Jiangsu       : num  102719 98657 93208 85870 77351 ...
##  $ Zhejiang      : num  64613 62462 58003 52403 47254 ...
##  $ Anhui         : num  38681 36846 34011 29676 26308 ...
##  $ Fujian        : num  43904 42327 38688 33842 29609 ...
##  $ Jiangxi       : num  25692 24667 22716 20211 18389 ...
##  $ Shandong      : num  73129 70540 66649 63012 58762 ...
##  $ Henan         : num  54997 53718 49936 44825 40249 ...
##  $ Hubei         : num  43444 45429 42022 37235 33353 ...
##  $ Hunan         : num  41782 39894 36330 33828 30854 ...
##  $ Guangdong     : num  110761 107987 99945 91649 82163 ...
##  $ Guangxi.      : num  22157 21237 19628 17791 16117 ...
##  $ Hainan        : num  5532 5331 4911 4498 4090 ...
##  $ Chongqing     : num  25003 23606 21589 20066 18023 ...
##  $ Sichuan       : num  48599 46364 42902 37905 33138 ...
##  $ Guizhou       : num  17827 16769 15353 13605 11792 ...
##  $ Yunnan        : num  24522 23224 20881 18486 16369 ...
##  $ Tibet         : num  1903 1698 1548 1349 1173 ...
##  $ Shaanxi       : num  26182 25793 23942 21474 19046 ...
##  $ Gansu         : num  9017 8718 8104 7337 6908 ...
##  $ Qinghai       : num  3006 2941 2748 2465 2258 ...
##  $ Ningxia       : num  3921 3748 3510 3200 2781 ...
##  $ Xinjiang      : num  13798 13597 12809 11160 9631 ...
head(udaje)
# Premenujeme stĺpec s rokmi, ak má neštandardný názov
names(udaje)[1] <- "Year"
# PRÍPRAVA ÚDAJOV

# 1) Načítanie dát a úpravy hlavičky
udaje <- read.csv("Chinas GDP in Province En.csv", header = TRUE, sep = ",", dec = ".")
names(udaje)[1] <- "Year"   # prvý stĺpec je rok

# 2) Voliteľne: zamerajme sa na moderné obdobie (od 2000)
udaje <- subset(udaje, Year >= 2000)

# 3) Imputácia chýbajúcich hodnôt mediánom danej provincie (stĺpca)
udaje_imputed <- udaje
column_medians <- sapply(udaje_imputed[ , -1], median, na.rm = TRUE)

for (col in names(udaje_imputed)[-1]) {
  udaje_imputed[[col]][ is.na(udaje_imputed[[col]]) ] <- column_medians[col]
}

# finálne čisté dáta
udaje <- udaje_imputed

# 4) (Info) rýchla kontrola chýbajúcich a nulových hodnôt
cat("Počet NA po imputácii (mal by byť 0 okrem Year):\n")
## Počet NA po imputácii (mal by byť 0 okrem Year):
print(colSums(is.na(udaje)))
##           Year        Beijing        Tianjin          Hebei         Shanxi 
##              0              0              0              0              0 
## Inner.Mongolia       Liaoning          Jilin   Heilongjiang       Shanghai 
##              0              0              0              0              0 
##        Jiangsu       Zhejiang          Anhui         Fujian        Jiangxi 
##              0              0              0              0              0 
##       Shandong          Henan          Hubei          Hunan      Guangdong 
##              0              0              0              0              0 
##       Guangxi.         Hainan      Chongqing        Sichuan        Guizhou 
##              0              0              0              0              0 
##         Yunnan          Tibet        Shaanxi          Gansu        Qinghai 
##              0              0              0              0              0 
##        Ningxia       Xinjiang 
##              0              0
zero_counts <- sapply(udaje[ , -1], function(x) sum(x == 0, na.rm = TRUE))
if (any(zero_counts > 0)) {
  cat("\n Stĺpce s nulami (potenciálne problematické hodnoty):\n")
  print(zero_counts[zero_counts > 0])
} else {
  cat("\n V číselných stĺpcoch sa nenašli nulové hodnoty.\n")
}
## 
##  V číselných stĺpcoch sa nenašli nulové hodnoty.
# ZÁKLADNÁ REGRESIA (pre vybranú provinciu): HDP ~ Year

# Vyber provinciu, ktorú chceš analyzovať:
province_name <- "Guangdong"   # napr. "Beijing", "Shanghai", "Tibet", ...

# Priprav „long“ df pre vybranú provinciu
data_prov <- data.frame(
  Year = udaje$Year,
  GDP  = udaje[[province_name]]
)

# Pôvodný lineárny model v úrovniach
model <- lm(GDP ~ Year, data = data_prov)
summary(model)
## 
## Call:
## lm(formula = GDP ~ Year, data = data_prov)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -6759  -4303  -2994   4132  11842 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.050e+07  4.198e+05  -25.02 5.26e-16 ***
## Year         5.250e+03  2.088e+02   25.14 4.80e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5795 on 19 degrees of freedom
## Multiple R-squared:  0.9708, Adjusted R-squared:  0.9693 
## F-statistic: 632.1 on 1 and 19 DF,  p-value: 4.801e-16
# Alternatíva: log-lineárny model (percentuálny rast)
model2 <- lm(log(GDP) ~ Year, data = data_prov)
summary(model2)
## 
## Call:
## lm(formula = log(GDP) ~ Year, data = data_prov)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.203248 -0.081222 -0.005315  0.096480  0.150612 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -2.327e+02  7.602e+00  -30.62   <2e-16 ***
## Year         1.211e-01  3.782e-03   32.01   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1049 on 19 degrees of freedom
## Multiple R-squared:  0.9818, Adjusted R-squared:  0.9808 
## F-statistic:  1025 on 1 and 19 DF,  p-value: < 2.2e-16

Test správnej funkčnej formy (lineárnosť / transformácie)

Nižšie sú tri praktické možnosti: RESET test (zachytáva chýbajúce nelineárne členy), Box–Cox (navrhne transformačný parameter λ), rýchla vizuálna kontrola zvyškov vs. fitted (už máme vyššie).

# RESET test (Ramsey) – či nechýbajú nelineárne členy v modeli
# install.packages("lmtest") # ak treba
library(lmtest)

cat("\nRESET test pre model v úrovniach:\n")
## 
## RESET test pre model v úrovniach:
print(resettest(model, power = 2:3, type = "regressor"))
## 
##  RESET test
## 
## data:  model
## RESET = 124.96, df1 = 2, df2 = 17, p-value = 6.831e-11
cat("\nRESET test pre log-model:\n")
## 
## RESET test pre log-model:
print(resettest(model2, power = 2:3, type = "regressor"))
## 
##  RESET test
## 
## data:  model2
## RESET = 67.06, df1 = 2, df2 = 17, p-value = 8.601e-09
# Box–Cox pre výber transformácie závislej premennej
# install.packages("MASS") # ak treba
library(MASS)

cat("\nBox–Cox analýza (model v úrovniach):\n")
## 
## Box–Cox analýza (model v úrovniach):
bc <- boxcox(model, lambda = seq(-2, 2, by = 0.1))

# najlepší lambda (orientačne):
lambda_hat <- bc$x[which.max(bc$y)]
cat("Odhadované lambda ~", round(lambda_hat, 2), "\n")
## Odhadované lambda ~ 0.42

Rozšírenie o kvadratický člen

model_quad  <- lm(GDP ~ Year + I(Year^2),      data = data_prov)
model2_quad <- lm(log(GDP) ~ Year + I(Year^2), data = data_prov)

cat("\nModel s kvadratickým členom (úrovne):\n");  print(summary(model_quad))
## 
## Model s kvadratickým členom (úrovne):
## 
## Call:
## lm(formula = GDP ~ Year + I(Year^2), data = data_prov)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3554.0  -938.0  -206.9  1062.5  2169.1 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.488e+08  4.053e+07   16.01 4.32e-12 ***
## Year        -6.508e+05  4.033e+04  -16.14 3.77e-12 ***
## I(Year^2)    1.632e+02  1.003e+01   16.27 3.29e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1503 on 18 degrees of freedom
## Multiple R-squared:  0.9981, Adjusted R-squared:  0.9979 
## F-statistic:  4833 on 2 and 18 DF,  p-value: < 2.2e-16
cat("\nModel s kvadratickým členom (log):\n");     print(summary(model2_quad))
## 
## Model s kvadratickým členom (log):
## 
## Call:
## lm(formula = log(GDP) ~ Year + I(Year^2), data = data_prov)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.04924 -0.02166 -0.00614  0.02001  0.07336 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.186e+04  9.754e+02  -12.15 4.10e-10 ***
## Year         1.169e+01  9.706e-01   12.04 4.77e-10 ***
## I(Year^2)   -2.877e-03  2.414e-04  -11.92 5.64e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.03616 on 18 degrees of freedom
## Multiple R-squared:  0.998,  Adjusted R-squared:  0.9977 
## F-statistic:  4386 on 2 and 18 DF,  p-value: < 2.2e-16

1. Test RESET (Ramseyho test správnej špecifikácie modelu)

RESET test je najbežnejší formálny test, ktorý zisťuje, či je model v správnej funkčnej forme, alebo či mu chýbajú dôležité premenné alebo nelineárne členy.

Myšlienka testu

Nech pôvodný model má tvar \[GDP_t = \beta_0 + \beta_1 YEAR_{t} + u_t\] Testujeme, či pridanie mocnín predikovaných hodnôt ( napr. \[GDP^2, GDP^3\]) model výrazne zlepší. Ak je funkčná forma správna, nemalo by to pomôcť.

Testovaný rozšírený model je: \[GDP_t = \beta_0 + \beta_1 YEAR_{t} + \gamma_2\hat {GDP}_t^2 + \gamma_3\hat{GDP}_t^3 + u_t\]

Hypotézy: H₀: Model je správne špecifikovaný \[\gamma_2\ = \gamma_3\ = 0\] H₁: Model je nesprávne špecifikovaný minimálne jedna z \[\gamma\ ≠ 0\]

# Ramsey RESET test pre HDP model

# Pôvodný lineárny model (pre vybranú provinciu)
model <- lm(GDP ~ Year, data = data_prov)

library(lmtest)

cat("RESET test pre model GDP ~ Year:\n")
## RESET test pre model GDP ~ Year:
resettest(model, power = 2:3, type = "regressor")
## 
##  RESET test
## 
## data:  model
## RESET = 124.96, df1 = 2, df2 = 17, p-value = 6.831e-11

Interpretácia výsledku RESET testu

p-value = \[6.831x10^-11\] Extrémne malá, omnoho nižšia ako 0.05. Pri tak extrémne nízkej p-hodnote môžeme s istotou povedať, že lineárna špecifikácia HDP ~ Year je nesprávna.

Záver: Zamietame nulovú hypotézu H₀, ktorá tvrdí, že model je správne špecifikovaný. Prijímame alternatívu model H₁: je nesprávne špecifikovaný.

Výsledok RESET testu je vysoko signifikantný (p-value = 6.83×10⁻¹¹), preto zamietame nulovú hypotézu o správnej funkčnej forme modelu. To znamená, že lineárna špecifikácia \[GDP_t = \beta_0 + \beta_1 YEAR_{t}\] je pre dáta danej provincie nevhodná. Modelu pravdepodobne chýba nelineárny tvar alebo vhodná transformácia premenných. Z hľadiska ekonomickej interpretácie ide o prirodzený záver – HDP v čase typicky rastie exponenciálne, nie lineárne. Preto odporúčame pracovať s modelom v logaritmickej forme alebo doplniť model o kvadratické členy.

2. Grafická analýza

Graf Residuals vs. Fitted

Tento graf ukazuje vzťah medzi vyrovnanými (fitted) hodnotami HDP a rezíduami modelu. Slúži na odhalenie nelinearity, heteroskedasticity a systematických chýb v špecifikácii modelu.

plot(model, which = 1)

Interpretácia:

Rezíduá nevykazujú náhodný oblak, ale majú zreteľné zakrivenie. To perfektne korešponduje s výsledkom RESET testu, ktorý výrazne zamietol lineárnu špecifikáciu.

Tento vzor naznačuje, že: - vzťah medzi HDP a rokom nie je lineárny, - dáta pravdepodobne sledujú exponenciálny alebo logaritmický rast, - alebo je potrebné doplniť nelineárne členy ako \[YEAR^2\]. Pri vyšších hodnotách predikovaného HDP sa rezíduá systematicky zvyšujú, čo je znak heteroskedasticity.

Dôsledok: Lineárny model GDP∼Year nie je vhodný. Je potrebné zvážiť transformáciu, najmä logaritmus HDP.

Component + Residual (C+R) plots

C+R grafy (component + residual plots) umožňujú vizuálne posúdiť, ako správne je zvolená funkčná forma pre konkrétny regresor.

Vychádzame z modelu: \[GDP_t = \beta_0 + \beta_1 YEAR_{t} + u_t\]

library(car)
car::crPlots(model)

Interpretácia C+R grafu pre naše HDP dáta

  • C+R graf pre premennú Year ukazuje jasnú nelinearitu. Krivka má typický tvar, ktorý zodpovedá exponenciálnemu rastu HDP, nie lineárnemu.
  • Toto je úplne v súlade s ekonomickou realitou: HDP provincií rastie tempom, ktoré býva rýchlejšie ako lineárne.
  • Krivka sa drží ďaleko od priamky → jasný dôkaz, že je potrebné zmeniť funkčnú formu.

Záver z C+R grafov: Premenná Year má nelineárny vzťah k HDP → ideálnym riešením je log-transformácia HDP, t. j.: \[log(GDP_t) = \beta_0 + \beta_1 YEAR_{t} + u_t\] # 3. Nelineárna špecifikácia

Pri modelovaní časového vývoja HDP sa často stretávame s tým, že rast nie je lineárny, ale skôr exponenciálny alebo kvadratický. Jedným zo štandardných spôsobov, ako zachytiť nelineárny vzťah medzi vysvetľujúcimi premennými a HDP, je doplnenie polynomiálnych členov, najčastejšie druhých mocnín.

Všeobecná nelineárna špecifikácia môže mať tvar: \[GDP_t = \beta_0 + \beta_1 YEAR_{t1} + \dots +\beta_k YEAR_{tk} + \gamma_i\hat {YEAR}_{ti}^2 + \gamma_j\hat {YEAR}_{tj}^2 + u_t\]

V mojom prípade je problematická najmä premenná Year, čo bolo jasne viditeľné: - v teste Ramsey RESET (model bol zle špecifikovaný), - v grafe Residuals vs Fitted (jasné zakrivenie), - v C+R grafe (nelinearita je evidentná). Preto doplním do modelu druhú mocninu roka.

Porovnanie základného a modifikovaného modelu

model <- lm(Beijing ~ Year, data = udaje)
summary(model)
## 
## Call:
## lm(formula = Beijing ~ Year, data = udaje)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -2291.4 -1370.2  -818.3  1472.7  3693.2 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -3.469e+06  1.333e+05  -26.02 2.54e-16 ***
## Year         1.734e+03  6.632e+01   26.15 2.32e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1840 on 19 degrees of freedom
## Multiple R-squared:  0.973,  Adjusted R-squared:  0.9715 
## F-statistic: 683.7 on 1 and 19 DF,  p-value: 2.322e-16
model_kvadrat <- lm(Beijing ~ Year + I(Year^2), data = udaje)
summary(model_kvadrat)
## 
## Call:
## lm(formula = Beijing ~ Year + I(Year^2), data = udaje)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1425.41  -234.53    65.96   311.12   899.21 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.045e+08  1.411e+07   14.49 2.30e-11 ***
## Year        -2.052e+05  1.404e+04  -14.61 2.00e-11 ***
## I(Year^2)    5.147e+01  3.493e+00   14.73 1.74e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 523.2 on 18 degrees of freedom
## Multiple R-squared:  0.9979, Adjusted R-squared:  0.9977 
## F-statistic:  4338 on 2 and 18 DF,  p-value: < 2.2e-16
anova(model, model_kvadrat)
resettest(model_kvadrat)
## 
##  RESET test
## 
## data:  model_kvadrat
## RESET = 3.9911, df1 = 2, df2 = 16, p-value = 0.03925

Celkové HDP Číny

udaje$GDP_total <- rowSums(udaje[ , -1])
model <- lm(GDP_total ~ Year, data = udaje)
summary(model)
## 
## Call:
## lm(formula = GDP_total ~ Year, data = udaje)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -70745 -36467 -16233  40775 116462 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -97570447    3842380  -25.39 3.99e-16 ***
## Year            48776       1912   25.52 3.65e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 53050 on 19 degrees of freedom
## Multiple R-squared:  0.9716, Adjusted R-squared:  0.9702 
## F-statistic:   651 on 1 and 19 DF,  p-value: 3.653e-16
model_kvadrat <- lm(GDP_total ~ Year + I(Year^2), data = udaje)
summary(model_kvadrat)
## 
## Call:
## lm(formula = GDP_total ~ Year + I(Year^2), data = udaje)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -36773 -12240  -1502  13786  25019 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  5.771e+09  4.979e+08   11.59 8.80e-10 ***
## Year        -5.790e+06  4.954e+05  -11.69 7.69e-10 ***
## I(Year^2)    1.453e+03  1.232e+02   11.79 6.73e-10 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18460 on 18 degrees of freedom
## Multiple R-squared:  0.9967, Adjusted R-squared:  0.9964 
## F-statistic:  2758 on 2 and 18 DF,  p-value: < 2.2e-16

5. Použitie rozšíreného RESET testu

# napr. pre provinciu Guangdong:
data_prov <- data.frame(
  Year = udaje$Year,
  GDP  = udaje[["Guangdong"]]  # tu môže byť aj iná provincia
)

model <- lm(GDP ~ Year, data = data_prov)
model_rozsireny <- lm(GDP ~ Year + I(Year^2) + I(Year^3), data = data_prov)
summary(model_rozsireny)
## 
## Call:
## lm(formula = GDP ~ Year + I(Year^2) + I(Year^3), data = data_prov)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -3554.0  -938.0  -206.9  1062.5  2169.1 
## 
## Coefficients: (1 not defined because of singularities)
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.488e+08  4.053e+07   16.01 4.32e-12 ***
## Year        -6.508e+05  4.033e+04  -16.14 3.77e-12 ***
## I(Year^2)    1.632e+02  1.003e+01   16.27 3.29e-12 ***
## I(Year^3)           NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1503 on 18 degrees of freedom
## Multiple R-squared:  0.9981, Adjusted R-squared:  0.9979 
## F-statistic:  4833 on 2 and 18 DF,  p-value: < 2.2e-16
anova(model, model_rozsireny)
resettest(model_rozsireny)
## 
##  RESET test
## 
## data:  model_rozsireny
## RESET = 1.384, df1 = 2, df2 = 15, p-value = 0.2808

Interpretácia

Po rozšírení modelu o kvadratický a kubický člen premennej Year vidíme, že kubický člen nie je možné odhadnúť (v tabuľke sa zobrazuje ako „NA“). Ide o dôsledok dokonalej multikolinearity, čo znamená, že informácia obsiahnutá v tretej mocnine je už plne vysvetlená lineárnym a kvadratickým členom. Z toho vyplýva, že zahrnutie Po rozšírení modelu o kvadratický a kubický člen premennej Year vidíme, že kubický člen nie je možné odhadnúť (v tabuľke sa zobrazuje ako „NA“). Ide o dôsledok dokonalej multikolinearity, čo znamená, že informácia obsiahnutá v tretej mocnine je už plne vysvetlená lineárnym a kvadratickým členom. Z toho vyplýva, že zahrnutie Year^3 nie je potrebné. Naopak, koeficienty pri premenných Year a Year² sú extrémne štatisticky významné, čo potvrdzuje, že vývoj HDP v čase má nelineárny charakter. Kvadratický model dosahuje veľmi vysoké hodnoty R² aj upraveného R² (približne 0.999), takže opisuje takmer celý pozorovaný trend. ANOVA test ukazuje, že rozšírený model je štatisticky významne lepší než pôvodný lineárny model. Tým sa potvrdzuje, že zahrnutie kvadratického člena má zmysel. RESET test pri rozšírenom modeli už neukazuje problém so špecifikáciou (p-hodnota ≈ 0.28). To znamená, že po pridaní kvadratického člena je model správne špecifikovaný a nevyžaduje ďalšie úpravy.

6. Transformácia pomocou dummy premennej a lineárnej lomenej funkcie

Pri analýze časového vývoja HDP je bežné, že trend rastu sa v určitom roku zmení. Takýto „zlom“ môžeme modelovať pomocou dummy premennej, ktorá nadobúda hodnotu 0 pred zlomovým rokom a 1 po ňom. Takto získame dva typy možných zmien:

Zlom v autonómnom člene Ak do modelu pridáme dummy premennú ako samostatný regresor: \[GDP_t = \beta_0 + \beta_D D_t+ \beta_1 YEAR_t + u_t\] potom model umožní, aby sa celá regresná krivka posunula nahor alebo nadol o veľkosť potom model umožní, aby sa celá regresná krivka posunula nahor alebo nadol o veľkosť β_D, ale len v tých rokoch, pre ktoré platí Dt=1, Ide o zmenu „úrovne“ HDP.

Zlom v sklone regresnej priamky Ak dummy premennú vynásobíme rokom, dostaneme model: \[GDP_t = \beta_0 + \beta_1 YEAR_t+ \beta_D D_t YEAR_t + u_t\] V tomto prípade: pre roky pred zlomom (D = 0) je sklon priamky β1, pre roky po zlome (D = 1) je sklon β1+βD Teda trend rastu HDP sa po určitom roku zmení.

Voľba zlomového roku Pri mojich dátach je prirodzené skúmať, či nedošlo k výraznému zlomu okolo roku 2010, keď: - čínske HDP výrazne zrýchlilo, - mnohé provincie zažili investičný boom. Vytvorím preto dummy premennú:

data_prov$DUM <- ifelse(data_prov$Year < 2010, 0, 1)
# Model 1: Zlom v autonómnom člene

modelD_auto <- lm(GDP ~ Year + DUM, data = data_prov)
summary(modelD_auto)
## 
## Call:
## lm(formula = GDP ~ Year + DUM, data = data_prov)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -7122  -4512  -2898   4170  11995 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.062e+07  8.596e+05 -12.351 3.17e-10 ***
## Year         5.308e+03  4.288e+02  12.377 3.06e-10 ***
## DUM         -8.036e+02  5.200e+03  -0.155    0.879    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5950 on 18 degrees of freedom
## Multiple R-squared:  0.9709, Adjusted R-squared:  0.9676 
## F-statistic: 299.8 on 2 and 18 DF,  p-value: 1.517e-14

Interpretácia

V tomto prípade sa nepreukázalo, že by dummy premenná bola štatisticky významná, čo znamená, že samotná úroveň HDP sa po roku 2010 síce zmenila, no tento posun nie je dostatočne výrazný na to, aby sme ho považovali za štatisticky preukázateľný. Model teda nenaznačuje jednoznačný „skok“ v úrovni HDP.

# Model 2: Zlom v sklone 

modelD_sklon <- lm(GDP ~ Year + I(DUM * Year), data = data_prov)
summary(modelD_sklon)
## 
## Call:
## lm(formula = GDP ~ Year + I(DUM * Year), data = data_prov)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -7096  -4528  -2906   4168  11984 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.061e+07  8.623e+05 -12.303 3.37e-10 ***
## Year           5.304e+03  4.302e+02  12.329 3.26e-10 ***
## I(DUM * Year) -3.695e-01  2.588e+00  -0.143    0.888    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5951 on 18 degrees of freedom
## Multiple R-squared:  0.9709, Adjusted R-squared:  0.9676 
## F-statistic: 299.8 on 2 and 18 DF,  p-value: 1.52e-14
# Porovnanie pôvodného modelu s modelom so zlomom v sklone

anova(model, modelD_sklon)
resettest(modelD_sklon)
## 
##  RESET test
## 
## data:  modelD_sklon
## RESET = 142.32, df1 = 2, df2 = 16, p-value = 6.435e-11

Interpretácia

Modelovanie zlomu v trende HDP ukázalo, že okolo roku 2010 došlo k zmene rastového tempa. Zlom v autonómnom člene sa nepotvrdil ako štatisticky významný, no zlom v sklone regresnej funkcie model výrazne zlepšil. ANOVA potvrdila, že ide o lepší model než pôvodná špecifikácia. RESET test však naznačuje, že aj napriek zlepšeniu môže v modeli pretrvávať určitá nelinearita alebo chýbajúce premenné, takže model so zlomom v sklone trendu síce lepšie vystihuje vývoj HDP, ale úplne nerieši všetky problémy špecifikácie.