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 Portugalsku 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
## -2.5723 -1.2202 -0.1011 1.5526 2.3725
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 84.8549214 19.0000120 4.466 0.000533 ***
## GDP_per_capita -0.0003183 0.0009894 -0.322 0.752422
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.631 on 14 degrees of freedom
## Multiple R-squared: 0.007339, Adjusted R-squared: -0.06357
## F-statistic: 0.1035 on 1 and 14 DF, p-value: 0.7524
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.36350 -0.20863 -0.02277 0.11641 0.75718
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 72.3841773 15.5312374 4.661 0.00055 ***
## GDP_per_capita -0.0002448 0.0002351 -1.041 0.31832
## Schooling 1.7429833 0.9135844 1.908 0.08062 .
## Adult_mortality -0.0282354 0.0558206 -0.506 0.62214
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2982 on 12 degrees of freedom
## Multiple R-squared: 0.9716, Adjusted R-squared: 0.9645
## F-statistic: 136.7 on 3 and 12 DF, p-value: 1.529e-09
model_2 <- lm(Life_expectancy ~ GDP_per_capita + Schooling, data = data_at)
summary(model_2)
##
## Call:
## lm(formula = Life_expectancy ~ GDP_per_capita + Schooling, data = data_at)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.42862 -0.18258 -0.03486 0.10896 0.75223
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 64.7436704 3.5083083 18.454 1.05e-10 ***
## GDP_per_capita -0.0001689 0.0001757 -0.961 0.354
## Schooling 2.2017844 0.1059983 20.772 2.35e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2895 on 13 degrees of freedom
## Multiple R-squared: 0.971, Adjusted R-squared: 0.9665
## F-statistic: 217.4 on 2 and 13 DF, p-value: 1.021e-10
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.35233 -0.09727 -0.01434 0.02771 0.69624
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.876e+02 5.045e+02 -0.768 0.462
## GDP_per_capita -4.203e-04 3.107e-04 -1.353 0.209
## Schooling 1.855e+00 1.315e+00 1.410 0.192
## BMI 1.504e+00 1.532e+00 0.982 0.352
## Adult_mortality 1.629e-03 1.092e-01 0.015 0.988
## Incidents_HIV 2.516e+01 3.743e+01 0.672 0.518
## Year 2.076e-01 2.551e-01 0.814 0.437
##
## Residual standard error: 0.308 on 9 degrees of freedom
## Multiple R-squared: 0.9773, Adjusted R-squared: 0.9621
## F-statistic: 64.47 on 6 and 9 DF, p-value: 6.941e-07
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 64.93301
## model_2 4 10.42203
## model_many 8 14.51222
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 ~ GDP_per_capita + Schooling + BMI,
## data = data_at)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.30891 -0.15888 -0.03066 0.13987 0.71638
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 31.2901667 26.3595189 1.187 0.258
## GDP_per_capita -0.0003483 0.0002216 -1.572 0.142
## Schooling 2.1078117 0.1268853 16.612 1.2e-09 ***
## BMI 1.4629225 1.1429292 1.280 0.225
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2827 on 12 degrees of freedom
## Multiple R-squared: 0.9745, Adjusted R-squared: 0.9681
## F-statistic: 152.6 on 3 and 12 DF, p-value: 8.061e-10
AIC(model_start, model_aic)
## df AIC
## model_start 8 14.51222
## model_aic 5 10.37437
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
## -2.5723 -1.2202 -0.1011 1.5526 2.3725
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 84.8549214 19.0000120 4.466 0.000533 ***
## GDP_per_capita -0.0003183 0.0009894 -0.322 0.752422
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.631 on 14 degrees of freedom
## Multiple R-squared: 0.007339, Adjusted R-squared: -0.06357
## F-statistic: 0.1035 on 1 and 14 DF, p-value: 0.7524
summary(model_log)
##
## Call:
## lm(formula = Life_expectancy ~ log(GDP_per_capita), data = data_at)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.57543 -1.22037 -0.09856 1.54687 2.37436
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 140.502 188.108 0.747 0.467
## log(GDP_per_capita) -6.262 19.073 -0.328 0.748
##
## Residual standard error: 1.631 on 14 degrees of freedom
## Multiple R-squared: 0.00764, Adjusted R-squared: -0.06324
## F-statistic: 0.1078 on 1 and 14 DF, p-value: 0.7475
AIC(model_linear, model_log)
## df AIC
## model_linear 3 64.93301
## model_log 3 64.92814
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 = 2.0894, df1 = 2, df2 = 12, p-value = 0.1665
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.36347 -0.20839 -0.02415 0.11637 0.75812
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 113.64271 53.16552 2.138 0.0538 .
## log(GDP_per_capita) -4.67281 4.51840 -1.034 0.3214
## Schooling 1.75225 0.91070 1.924 0.0784 .
## Adult_mortality -0.02765 0.05563 -0.497 0.6282
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2984 on 12 degrees of freedom
## Multiple R-squared: 0.9715, Adjusted R-squared: 0.9644
## F-statistic: 136.6 on 3 and 12 DF, p-value: 1.539e-09
resettest(model_preferred, power = 2:3, type = "fitted")
##
## RESET test
##
## data: model_preferred
## RESET = 2.5805, df1 = 2, df2 = 10, p-value = 0.1248
AIC(model_preferred)
## [1] 12.10226
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.36350 -0.20863 -0.02277 0.11641 0.75718
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 72.3841773 15.5312374 4.661 0.00055 ***
## GDP_per_capita -0.0002448 0.0002351 -1.041 0.31832
## Schooling 1.7429833 0.9135844 1.908 0.08062 .
## Adult_mortality -0.0282354 0.0558206 -0.506 0.62214
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2982 on 12 degrees of freedom
## Multiple R-squared: 0.9716, Adjusted R-squared: 0.9645
## F-statistic: 136.7 on 3 and 12 DF, p-value: 1.529e-09
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,
data = data_at)
summary(model_fix_2)
##
## Call:
## lm(formula = Life_expectancy ~ log(GDP_per_capita) + Schooling,
## data = data_at)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.42764 -0.18208 -0.03647 0.10826 0.75298
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 93.533 33.473 2.794 0.0152 *
## log(GDP_per_capita) -3.248 3.389 -0.958 0.3554
## Schooling 2.202 0.106 20.764 2.36e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2896 on 13 degrees of freedom
## Multiple R-squared: 0.971, Adjusted R-squared: 0.9665
## F-statistic: 217.3 on 2 and 13 DF, p-value: 1.023e-10
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 12.08447
## model_fix_2 4 10.42826
## model_many 8 14.51222
resettest(model_fix_1, power = 2:3, type = "fitted")
##
## RESET test
##
## data: model_fix_1
## RESET = 2.5743, df1 = 2, df2 = 10, p-value = 0.1254
resettest(model_fix_2, power = 2:3, type = "fitted")
##
## RESET test
##
## data: model_fix_2
## RESET = 2.0428, df1 = 2, df2 = 11, p-value = 0.176
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 Portugalsku 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.