Úvod

V tomto seminári sa budeme venovať problému správnej špecifikácie regresného modelu.
Vysvetľovanou premennou je:

\[ Y_t = Life\_expectancy_t \]

teda očakávaná dĺžka života v Rakúsku v roku \(t\).

Cieľom je ukázať, že nestačí „spustiť regresiu“. Aby boli odhady zmysluplné, model musí byť rozumne špecifikovaný. Nesprávna špecifikácia môže viesť ku skresleným koeficientom, nespoľahlivým testom a zlej interpretácii výsledkov.


1. Čo znamená nesprávna špecifikácia modelu?

Model je nesprávne špecifikovaný, ak jeho tvar nezodpovedá skutočnému vzťahu medzi premennými.
To môže nastať najmä v týchto situáciách:

  1. v modeli chýba dôležitá premenná,
  2. v modeli je príliš veľa premenných,
  3. model má nesprávny funkčný tvar.

Budeme uvažovať všeobecný model:

\[ Life\_expectancy_t = \beta_0 + \beta_1 X_{1t} + \beta_2 X_{2t} + \dots + u_t \]

kde \(u_t\) zachytáva všetky nepozorované faktory.


2. Vynechaná premenná

Teória

K chybe vynechanej premennej dochádza vtedy, keď do modelu nezahrnieme premennú, ktorá:

  • ovplyvňuje \(Life\_expectancy\),
  • a zároveň koreluje s niektorou zahrnutou vysvetľujúcou premennou.

V takom prípade sa časť vplyvu vynechanej premennej „presunie“ do odhadu iného koeficientu. Výsledkom je skreslenie odhadov.

Napríklad, ak by sme vysvetľovali očakávanú dĺžku života iba pomocou GDP_per_capita, ale vynechali Schooling alebo Adult_mortality, koeficient pri HDP môže zachytiť aj ich vplyv.

Jednoduchý príklad

model_1 <- lm(Life_expectancy ~ GDP_per_capita, data = data_at)
summary(model_1)
## 
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita, data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.58632 -0.13891  0.03792  0.18415  0.60923 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    5.921e+01  1.595e+00   37.13 2.18e-15 ***
## GDP_per_capita 4.900e-04  3.759e-05   13.04 3.21e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3103 on 14 degrees of freedom
## Multiple R-squared:  0.9239, Adjusted R-squared:  0.9185 
## F-statistic:   170 on 1 and 14 DF,  p-value: 3.207e-09

Tento model je veľmi jednoduchý, ale pravdepodobne neúplný. Očakávanú dĺžku života neovplyvňuje len HDP na obyvateľa.

Rozšírený model

model_2 <- lm(Life_expectancy ~ GDP_per_capita + Schooling + Adult_mortality, data = data_at)
summary(model_2)
## 
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita + Schooling + Adult_mortality, 
##     data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25061 -0.07280 -0.01344  0.07504  0.20734 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      8.059e+01  3.145e+00  25.622 7.61e-12 ***
## GDP_per_capita   6.910e-05  6.458e-05   1.070 0.305691    
## Schooling        2.080e-01  1.145e-01   1.817 0.094256 .  
## Adult_mortality -7.400e-02  1.319e-02  -5.612 0.000114 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1437 on 12 degrees of freedom
## Multiple R-squared:  0.986,  Adjusted R-squared:  0.9825 
## F-statistic: 281.8 on 3 and 12 DF,  p-value: 2.191e-11

Ak sa koeficient pri GDP_per_capita po pridaní ďalších relevantných premenných výrazne zmení, je to signál, že pôvodný model mohol trpieť chybou vynechanej premennej.


3. Príliš veľa premenných

Teória

Aj opačný problém je dôležitý: do modelu môžeme zaradiť príliš veľa premenných.

To môže viesť k tomu, že:

  • model je zbytočne komplikovaný,
  • koeficienty sú nestabilné,
  • rastie multikolinearita,
  • pri malej vzorke strácame presnosť odhadov.

V našom prípade máme iba niekoľko rokov údajov pre jednu krajinu, preto treba byť mimoriadne opatrný. Pri malej vzorke nie je dobré „preplniť“ model mnohými premennými.

Príklad širšieho modelu

model_many <- lm(Life_expectancy ~ GDP_per_capita + Schooling + BMI +
                   Adult_mortality + Incidents_HIV + Year,
                 data = data_at)
summary(model_many)
## 
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita + Schooling + BMI + 
##     Adult_mortality + Incidents_HIV + Year, data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.24016 -0.06206 -0.02232  0.07199  0.21674 
## 
## Coefficients: (1 not defined because of singularities)
##                   Estimate Std. Error t value Pr(>|t|)
## (Intercept)      1.716e+01  2.536e+02   0.068    0.947
## GDP_per_capita   9.647e-05  1.308e-04   0.738    0.478
## Schooling        1.647e-01  2.047e-01   0.804    0.440
## BMI              2.012e-01  1.245e+00   0.162    0.875
## Adult_mortality -5.566e-02  6.962e-02  -0.800    0.443
## Incidents_HIV           NA         NA      NA       NA
## Year             2.800e-02  1.214e-01   0.231    0.822
## 
## Residual standard error: 0.1568 on 10 degrees of freedom
## Multiple R-squared:  0.9861, Adjusted R-squared:  0.9792 
## F-statistic:   142 on 5 and 10 DF,  p-value: 5.947e-09

Takýto model môže pôsobiť atraktívne, ale nemusí byť vhodný. Pri malom počte pozorovaní môže byť lepšie zvoliť jednoduchší model s ekonomicky odôvodnenými premennými.


4. Ako pri výbere premenných pomáha AIC

Základná myšlienka

Pri rozhodovaní, či niektoré premenné ponechať alebo vylúčiť, môžeme použiť AIC (Akaike Information Criterion).

AIC porovnáva modely podľa dvoch princípov:

  • model má dobre vysvetľovať dáta,
  • model nemá byť zbytočne zložitý.

AIC teda trestá priveľký počet premenných.
Vo všeobecnosti platí:

  • nižšia hodnota AIC je lepšia.

AIC nám nepovie, či je model „pravdivý“, ale pomáha nájsť rozumný kompromis medzi kvalitou prispôsobenia a jednoduchosťou modelu.

Porovnanie modelov pomocou AIC

AIC(model_1, model_2, model_many)
##            df       AIC
## model_1     3  11.82085
## model_2     5 -11.27353
## model_many  7  -7.40150

Ak má jednoduchší model nižšie AIC než veľmi rozsiahly model, je to argument v prospech jednoduchšej špecifikácie.

Automatický výber podľa AIC

model_start <- lm(Life_expectancy ~ GDP_per_capita + Schooling + BMI +
                    Adult_mortality + Incidents_HIV + Year,
                  data = data_at)

model_aic <- stepAIC(model_start, direction = "both", trace = FALSE)
summary(model_aic)
## 
## Call:
## lm(formula = Life_expectancy ~ Schooling + Adult_mortality, data = data_at)
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.281249 -0.054538 -0.004759  0.070767  0.236435 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     83.26380    1.91943  43.379 1.88e-15 ***
## Schooling        0.27794    0.09448   2.942   0.0114 *  
## Adult_mortality -0.08044    0.01180  -6.819 1.23e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1445 on 13 degrees of freedom
## Multiple R-squared:  0.9847, Adjusted R-squared:  0.9823 
## F-statistic: 417.5 on 2 and 13 DF,  p-value: 1.608e-12
AIC(model_start, model_aic)
##             df       AIC
## model_start  7  -7.40150
## model_aic    4 -11.81562

Poznámka: AIC je užitočné pomocné kritérium, ale nemalo by nahradiť ekonomickú logiku.
Premenná by sa nemala vyhadzovať iba mechanicky; vždy sa treba pýtať, či má teoretický význam.


5. Nesprávny funkčný tvar

Teória

Ďalším problémom je nesprávny funkčný tvar modelu.
To znamená, že vzťah medzi premennými nie je lineárny, hoci my ho ako lineárny modelujeme.

Napríklad účinok príjmu alebo HDP na očakávanú dĺžku života býva často nelineárny: pri nízkych úrovniach môže byť silný, ale pri vysokých úrovniach sa môže zoslabovať. Preto môže byť vhodné použiť logaritmus alebo kvadratický člen.

Porovnanie lineárneho a logaritmického tvaru

model_linear <- lm(Life_expectancy ~ GDP_per_capita, data = data_at)
model_log <- lm(Life_expectancy ~ log(GDP_per_capita), data = data_at)

summary(model_linear)
## 
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita, data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.58632 -0.13891  0.03792  0.18415  0.60923 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    5.921e+01  1.595e+00   37.13 2.18e-15 ***
## GDP_per_capita 4.900e-04  3.759e-05   13.04 3.21e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3103 on 14 degrees of freedom
## Multiple R-squared:  0.9239, Adjusted R-squared:  0.9185 
## F-statistic:   170 on 1 and 14 DF,  p-value: 3.207e-09
summary(model_log)
## 
## Call:
## lm(formula = Life_expectancy ~ log(GDP_per_capita), data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.57435 -0.13318  0.03626  0.17203  0.61577 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -138.342     16.736  -8.266 9.33e-07 ***
## log(GDP_per_capita)   20.493      1.571  13.045 3.18e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3101 on 14 degrees of freedom
## Multiple R-squared:  0.924,  Adjusted R-squared:  0.9186 
## F-statistic: 170.2 on 1 and 14 DF,  p-value: 3.179e-09
AIC(model_linear, model_log)
##              df      AIC
## model_linear  3 11.82085
## model_log     3 11.80128

Ak má logaritmický model lepšie výsledky a nižšie AIC, môže byť vhodnejší než čisto lineárna špecifikácia.


6. Ramsey RESET test

Základný princíp testu

Ramsey RESET test je test všeobecnej správnosti funkčného tvaru modelu.

Myšlienka testu je jednoduchá:

  • najprv odhadneme pôvodný model,
  • potom doň doplníme mocniny odhadnutých hodnôt (napr. druhú a tretiu mocninu fitted values),
  • a testujeme, či tieto dodatočné členy zlepšujú model.

Ak sú tieto nové členy štatisticky významné, znamená to, že pôvodný model pravdepodobne niečo zanedbal, napríklad:

  • nelinearitu,
  • interakcie,
  • alebo inú formu nesprávnej špecifikácie.

Hypotézy

  • H0: model je správne špecifikovaný
  • H1: model nie je správne špecifikovaný

Dôležité je, že RESET test nám zvyčajne nepovie presne, kde je chyba, ale upozorní nás, že špecifikácia modelu je pravdepodobne nedostatočná.

Aplikácia RESET testu

resettest(model_linear, power = 2:3, type = "fitted")
## 
##  RESET test
## 
## data:  model_linear
## RESET = 0.043707, df1 = 2, df2 = 12, p-value = 0.9574

Interpretácia

  • ak je p-hodnota vysoká, nulovú hypotézu nezamietame,
  • ak je p-hodnota nízka, nulovú hypotézu zamietame a model pravdepodobne nie je správne špecifikovaný.

RESET test pri lepšom modeli

model_preferred <- lm(Life_expectancy ~ log(GDP_per_capita) + Schooling + Adult_mortality,
                      data = data_at)

summary(model_preferred)
## 
## Call:
## lm(formula = Life_expectancy ~ log(GDP_per_capita) + Schooling + 
##     Adult_mortality, data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25084 -0.07286 -0.01356  0.07221  0.20844 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         52.69792   28.55799   1.845 0.089803 .  
## log(GDP_per_capita)  2.89201    2.69599   1.073 0.304502    
## Schooling            0.20844    0.11411   1.827 0.092718 .  
## Adult_mortality     -0.07393    0.01321  -5.598 0.000116 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1437 on 12 degrees of freedom
## Multiple R-squared:  0.986,  Adjusted R-squared:  0.9825 
## F-statistic: 281.9 on 3 and 12 DF,  p-value: 2.185e-11
resettest(model_preferred, power = 2:3, type = "fitted")
## 
##  RESET test
## 
## data:  model_preferred
## RESET = 0.3346, df1 = 2, df2 = 10, p-value = 0.7233
AIC(model_preferred)
## [1] -11.28072

Ak má tento model rozumnejšie koeficienty, nižšie AIC a lepší výsledok RESET testu, ide o silný argument v prospech tejto špecifikácie.


7. Ako riešiť problém nesprávnej špecifikácie

Ak máme podozrenie, že model nie je správne špecifikovaný, môžeme postupovať takto:

(a) Doplniť relevantné premenné

Ak model trpí chybou vynechanej premennej, treba pridať ekonomicky dôležité premenné.

model_fix_1 <- lm(Life_expectancy ~ GDP_per_capita + Schooling + Adult_mortality,
                  data = data_at)
summary(model_fix_1)
## 
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita + Schooling + Adult_mortality, 
##     data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25061 -0.07280 -0.01344  0.07504  0.20734 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      8.059e+01  3.145e+00  25.622 7.61e-12 ***
## GDP_per_capita   6.910e-05  6.458e-05   1.070 0.305691    
## Schooling        2.080e-01  1.145e-01   1.817 0.094256 .  
## Adult_mortality -7.400e-02  1.319e-02  -5.612 0.000114 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1437 on 12 degrees of freedom
## Multiple R-squared:  0.986,  Adjusted R-squared:  0.9825 
## F-statistic: 281.8 on 3 and 12 DF,  p-value: 2.191e-11

(b) Zmeniť funkčný tvar

Ak je vzťah nelineárny, môžeme použiť logaritmus alebo mocniny premenných.

model_fix_2 <- lm(Life_expectancy ~ log(GDP_per_capita) + Schooling + Adult_mortality,
                  data = data_at)
summary(model_fix_2)
## 
## Call:
## lm(formula = Life_expectancy ~ log(GDP_per_capita) + Schooling + 
##     Adult_mortality, data = data_at)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.25084 -0.07286 -0.01356  0.07221  0.20844 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         52.69792   28.55799   1.845 0.089803 .  
## log(GDP_per_capita)  2.89201    2.69599   1.073 0.304502    
## Schooling            0.20844    0.11411   1.827 0.092718 .  
## Adult_mortality     -0.07393    0.01321  -5.598 0.000116 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.1437 on 12 degrees of freedom
## Multiple R-squared:  0.986,  Adjusted R-squared:  0.9825 
## F-statistic: 281.9 on 3 and 12 DF,  p-value: 2.185e-11

(c) Porovnávať modely pomocou AIC

Pri rozhodovaní o tom, či niektoré premenné ponechať alebo vylúčiť, môžeme porovnať AIC.

AIC(model_fix_1, model_fix_2, model_many)
##             df       AIC
## model_fix_1  5 -11.27353
## model_fix_2  5 -11.28072
## model_many   7  -7.40150

(d) Testovať špecifikáciu pomocou RESET testu

resettest(model_fix_1, power = 2:3, type = "fitted")
## 
##  RESET test
## 
## data:  model_fix_1
## RESET = 0.33759, df1 = 2, df2 = 10, p-value = 0.7213
resettest(model_fix_2, power = 2:3, type = "fitted")
## 
##  RESET test
## 
## data:  model_fix_2
## RESET = 0.3346, df1 = 2, df2 = 10, p-value = 0.7233

Správny postup teda nie je len „odhadnúť jeden model“, ale porovnávať viacero rozumných špecifikácií a overovať ich.


8. Záver

Správna špecifikácia modelu je nevyhnutná, ak chceme robiť dôveryhodné ekonometrické závery.

V tomto seminári sme ukázali tri hlavné problémy:

  1. vynechaná premenná – vedie ku skresleným odhadom,
  2. príliš veľa premenných – môže zhoršiť presnosť a stabilitu modelu,
  3. nesprávny funkčný tvar – model nemusí zachytiť skutočný vzťah.

Na diagnostiku sme použili:

Praktické odporúčanie

Pri modelovaní Life_expectancy v Rakúsku by sme mali:

  • začať ekonomicky odôvodneným modelom,
  • nevkladať priveľa premenných naraz,
  • porovnávať alternatívne špecifikácie,
  • využiť AIC ako pomocné kritérium,
  • a kontrolovať správnosť špecifikácie pomocou RESET testu.