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.
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:
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.
K chybe vynechanej premennej dochádza vtedy, keď do modelu nezahrnieme premennú, ktorá:
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.
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.
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.
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:
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.
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.
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:
AIC teda trestá priveľký počet premenných.
Vo všeobecnosti platí:
AIC nám nepovie, či je model „pravdivý“, ale pomáha nájsť rozumný kompromis medzi kvalitou prispôsobenia a jednoduchosťou modelu.
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.
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.
Ď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.
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.
Ramsey RESET test je test všeobecnej správnosti funkčného tvaru modelu.
Myšlienka testu je jednoduchá:
Ak sú tieto nové členy štatisticky významné, znamená to, že pôvodný model pravdepodobne niečo zanedbal, napríklad:
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á.
resettest(model_linear, power = 2:3, type = "fitted")
##
## RESET test
##
## data: model_linear
## RESET = 0.043707, df1 = 2, df2 = 12, p-value = 0.9574
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.
Ak máme podozrenie, že model nie je správne špecifikovaný, môžeme postupovať takto:
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
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
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
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.
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:
Na diagnostiku sme použili:
Pri modelovaní Life_expectancy v Rakúsku by sme
mali: