Lineární v parametrech
\(E(\epsilon)=0\) toto znáte
\(E(\epsilon|X)=E(\epsilon)=0\)
Neexistuje dokonalá multikolinearita
\(Var(\epsilon|X)=\sigma^2 I\)
Po splnení predpokladu získáme odhad, který je \(\textbf{BLUE}\).
Odhad je tak:
Nasimulujeme si populacní model:
\(wage=-50+10IQ+50educ+3expert+\epsilon\) kdy \(\epsilon \sim N(0,1)\)
V následujícím cvicení se bude jednat o základní model, u kterého vsak budeme postupne menit nekteré parametry.
Jedná se o model splòující GM. Bude se jednat o benchmark v nasí analýze.
set.seed(100)
sigma=1
N=10000
IQ=rnorm(N,100,5) # Vygenerujeme hodnoty IQ z rovnomerného rozdslení v rozmezí 0 -30
expert=runif(N, min=0, max=30) # Vygenerujeme hodnoty expet z rovnomerného rozdelení v rozmezí 0 -30
educ = runif(N, min=9, max=20) # Vygenerujeme hodnoty educ z rovnomerného rozdelení v rozmezí 9-20
nevim1=rnorm(N,10,50)
nevim2=rnorm(N,10,50)
nevim3=rnorm(N,10,50)
nevim4=rnorm(N,10,50)
nevim5=rnorm(N,10,50)
nevim6=rnorm(N,10,50)
nevim7=rnorm(N,10,50)
nevim8=rnorm(N,10,50)
nevim9=rnorm(N,10,50)
nevim10=rnorm(N,10,50)
e = rnorm(N, 0, sigma) # vygenerujeme náhodnou slozku se strední hodnotou 0 a rozptylem 1
wage = -50 +10*IQ+ 50*educ+3*expert + e # Populacní regresní funkce, proces, který generuje velikost wage
populace1 = data.frame(IQ,expert, educ, wage,nevim1,nevim2,nevim3,nevim4,nevim5,nevim6,nevim7,nevim8,nevim9,nevim10) # Ulozíme data do data.frame
Odhadnete regresní model:
\(wage=\beta_0+\beta_1IQ+\beta_2educ+\beta_3expert+\beta_4nevim1+...+\beta_{13}nevim10+\epsilon\)
regrese=lm(wage~IQ+educ+expert+nevim1+nevim2+nevim3+nevim4+nevim5+nevim6+nevim7+nevim8+nevim9+nevim10, data = populace1)
summary(regrese)
##
## Call:
## lm(formula = wage ~ IQ + educ + expert + nevim1 + nevim2 + nevim3 +
## nevim4 + nevim5 + nevim6 + nevim7 + nevim8 + nevim9 + nevim10,
## data = populace1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.6237 -0.6683 -0.0137 0.6731 3.6289
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.988e+01 2.057e-01 -242.516 <2e-16 ***
## IQ 9.999e+00 1.999e-03 5001.499 <2e-16 ***
## educ 5.000e+01 3.135e-03 15950.165 <2e-16 ***
## expert 2.999e+00 1.148e-03 2613.402 <2e-16 ***
## nevim1 -1.547e-04 1.973e-04 -0.784 0.4330
## nevim2 -1.889e-04 2.003e-04 -0.943 0.3458
## nevim3 1.712e-04 1.989e-04 0.861 0.3895
## nevim4 1.220e-04 1.991e-04 0.613 0.5399
## nevim5 3.822e-04 1.990e-04 1.921 0.0548 .
## nevim6 6.063e-06 1.987e-04 0.031 0.9757
## nevim7 -8.877e-05 1.980e-04 -0.448 0.6540
## nevim8 2.191e-04 2.002e-04 1.095 0.2738
## nevim9 1.348e-04 2.000e-04 0.674 0.5001
## nevim10 1.816e-04 2.007e-04 0.905 0.3657
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.9939 on 9986 degrees of freedom
## Multiple R-squared: 1, Adjusted R-squared: 1
## F-statistic: 2.22e+07 on 13 and 9986 DF, p-value: < 2.2e-16
Omezený vs. neomezený model.
\(H_0: \beta_4=\beta_5=...=\beta_13=0\) vs. \(H_1: non H_0\)
anova(omezeny,neomezeny)
\(F=\dfrac{SSR_O-SSR_{NE}}{SSR_{NE}} \dfrac{n-k-1}{q} \sim F[q,n-k-1]\)
install.packages("AER") # nainstalovat balícek
library(plm) # nainstalovaný balícek musíme vyvolat
## Warning: package 'plm' was built under R version 3.2.5
## Loading required package: Formula
data("Gasoline")
head(Gasoline)
## country year lgaspcar lincomep lrpmg lcarpcap
## 1 AUSTRIA 1960 4.173244 -6.474277 -0.3345476 -9.766840
## 2 AUSTRIA 1961 4.100989 -6.426006 -0.3513276 -9.608622
## 3 AUSTRIA 1962 4.073177 -6.407308 -0.3795177 -9.457257
## 4 AUSTRIA 1963 4.059509 -6.370679 -0.4142514 -9.343155
## 5 AUSTRIA 1964 4.037689 -6.322247 -0.4453354 -9.237739
## 6 AUSTRIA 1965 4.033983 -6.294668 -0.4970607 -9.123903
regrese2=lm(lgaspcar~lincomep+lrpmg+lcarpcap,data=Gasoline)
summary(regrese2)
##
## Call:
## lm(formula = lgaspcar ~ lincomep + lrpmg + lcarpcap, data = Gasoline)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.38412 -0.15307 -0.04981 0.16529 0.59684
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.39133 0.11693 20.45 <2e-16 ***
## lincomep 0.88996 0.03581 24.86 <2e-16 ***
## lrpmg -0.89180 0.03031 -29.42 <2e-16 ***
## lcarpcap -0.76337 0.01861 -41.02 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.21 on 338 degrees of freedom
## Multiple R-squared: 0.8549, Adjusted R-squared: 0.8536
## F-statistic: 664 on 3 and 338 DF, p-value: < 2.2e-16
Nekdy nás zajímá testování “nejaké” teorie. Zde nás zajímá, zdali je “poptávka” jednotkove elastická. PS poptávka se odhaduje jinak, pozor na to. \(H_0: \beta_2=-1\) vs. \(H_1: \beta_2 \neq 0\)
\(t_j=\dfrac{b_j-\beta_j}{sd(b_j)} \sim t_{n-k-1}\)
length(Gasoline$lgaspcar)
qt()
V následující cásti si zobrazíme, co se deje s odhady parametru v prípade:
Predpoklad exogenity nám ríká \(E(\epsilon|X)=E(\epsilon)=0\)
V prípade jeho porusení, pak platí, ze:
\(E(\epsilon|X) \neq 0\)
Nastane situace, kdy bude náhodná slozka \(\epsilon\) korelována s IQ. \(\textbf{POZNAT Z KODU PORUSENÍ EXOGENITY}\)
N=10000
v=rnorm(N,0,1)
w=rnorm(N,0,1)
IQ=100+10*v # IQ obsahuje slozku v, která je i v náhodné sloZce
educ=runif(N, min=9, max=20)
expert=runif(N, min=0, max=30)
e2 =0+10*v+10*sqrt(1-0.8^2)*w # vygenereujeme náhodnou sloZku, která je korelovaná s náhodnou slozkou v promenné IQ
wage2 = -50 +10*IQ+ 50*educ+3*expert + e2 #
populace2 = data.frame(IQ,expert, educ, wage2)
Odhad parametru je zkreslený a nekonzistetní
Nejrpve odhadneme model 1 R-krát
R = 10^4 # R = pocet replikací; uloZíme si do promenné, aby to slo pozdeji snadno zmenit.
beta.1.NEZ = rep(NA, R)
beta.2.NEZ = rep(NA, R)
beta.3.NEZ = rep(NA, R)
for (r in 1:R) { # Pro kazdou replikaci r = 1 az R:
model.1 = lm(wage ~ IQ+educ+expert, data=populace1, subset=sample(N, 50, replace=TRUE)) # Náhodne vybereme 50 hodnot z populace a spocteme regresní model.
# for cyklus zajistí, ze se tento proces bude opakovat R-krát
# Ulozíme odhadnuté parametry.
beta.1.NEZ[r] = model.1$coef[2]
beta.2.NEZ[r]=model.1$coef[3]
beta.3.NEZ[r]=model.1$coef[4]
}
Dále odhadneme model 2 R-krát.
R = 10^4 # R = pocet replikací; ulozíme si do promenné, aby to slo pozdeji snadno zmenit.
beta.1.ZK = rep(NA, R)
beta.2.ZK = rep(NA, R)
beta.3.ZK = rep(NA, R)
for (r in 1:R) { # Pro kazdou replikaci r = 1 az R:
model.2 = lm(wage2 ~ IQ+educ+expert, data=populace2, subset=sample(N, 50, replace=TRUE)) # Náhodne vybereme 50 hodnot z populace a spocteme regresní model.
# for cyklus zajistí, ze se tento proces bude opakovat R-krát
# Ulozíme odhadnuté parametry.
beta.1.ZK[r] = model.2$coef[2]
beta.2.ZK[r]=model.2$coef[3]
beta.3.ZK[r]=model.2$coef[4]
}
Vybereme si nekterý z odhadu, napríklad odhad \(\beta_1\) a odhadneme jeho rozdelení jak pro model \(1\), tak pro model \(2\). Model M1 splòuje GM. Model M2 porusuje predpoklad exogenity.
beta.vydat = c(beta.1.NEZ, beta.1.ZK) # Vytvoríme vektor odhadu bety
koef.vydat = c(rep("beta.1.NEZ", R), # pro vytvorení názvu, vektor, ve kterém replikujeme název R-krát
rep("beta.1.ZK", R))
data.zkresleny = data.frame(beta.vydat, koef.vydat) # Vytvoríme data frame, spárujeme název s daty
Hodnoty z data.frame si zobrazíme pomocí neparametrického odhadu hustoty pravdepodobnosti.
install.packages("ggplot2")
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.2.5
graf = ggplot(data.zkresleny, aes(beta.vydat, fill=koef.vydat, color=koef.vydat)) +
geom_density(alpha=.4) + # Nahradíme histogram neparametrickým odhadem hustoty.
xlab("odhadovaná hodnota") +
ylab("hustota")+
xlim(c(9,12)) # Omezíme rozsah osy x
graf
Simulace konzistentního odhadu, bude nás zajímat pouze odhad \(\beta_1\).
R=5000 # Maximální velikost výberu z populace
beta.1.M3 = rep(NA, R)
for (r in 20:R) {
model.3 = lm(wage ~ IQ+educ+expert, data=populace1, subset=sample(N, r, replace=TRUE) )
beta.1.M3[r] = model.3$coef[2]
}
Simulace nekonzistentního odhadu, bude nás zajímat pouze odhad \(\beta_1\).
R=5000 # Maximální velikost výberu z populace
beta.1.M4 = rep(NA, R)
for (r in 20:R) {
model.4 = lm(wage2 ~ IQ+educ+expert, data=populace2, subset=sample(N, r, replace=TRUE) )
beta.1.M4[r] = model.4$coef[2]
}
A data si zobrazíme v grafu
par(mfrow=c(2,1))
plot.ts(beta.1.M3,col="red")
plot.ts(beta.1.M4,col="green")
\(Var(\epsilon|X)=\sigma^2 I\) homoskedasticita
\(Var(\epsilon|X)=\sigma^2 \Omega\) heteroskedasticita
\(Var(\epsilon|X)=\sigma^2 h(X)\)
Pro jednodusí predstavu uvazujme prímkovou regresi
\(Var(\epsilon|x)=\sigma^2 h(x)\) kde \(h(x)\) predstavuje funkci “typ” heteroskedasticity. Rozptyl musí být vzdy nezáporný!
\(\textbf{POZNAT Z KODU HETEROSKEDASTICITU}\)
N=10000
IQ=rnorm(N,100,5)
expert=runif(N, min=0, max=30)
educ = runif(N, min=9, max=20)
sigma=2*log(educ) # tvar podmíneného rozptylu, rozptyl závisí na jednom z regresoru
e4= rnorm(N, 0, sigma)
wage4 = -50 +10*IQ+ 50*educ+3*expert + e4
populace5 = data.frame(IQ,expert, educ, wage4)
Jen pro zajímavost si odhadneme model.
regrese_hetero=lm(wage4~IQ+educ+expert,data = populace5) # provedeme odhad regresní rovnice, nyní nedeláme výber
summary(regrese_hetero)
##
## Call:
## lm(formula = wage4 ~ IQ + educ + expert, data = populace5)
##
## Residuals:
## Min 1Q Median 3Q Max
## -18.6061 -3.5705 -0.0338 3.5245 21.7284
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -48.949478 1.101469 -44.44 <2e-16 ***
## IQ 9.988045 0.010680 935.21 <2e-16 ***
## educ 50.011133 0.016865 2965.39 <2e-16 ***
## expert 2.997855 0.006179 485.20 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5.339 on 9996 degrees of freedom
## Multiple R-squared: 0.999, Adjusted R-squared: 0.999
## F-statistic: 3.297e+06 on 3 and 9996 DF, p-value: < 2.2e-16
Pouzijeme napríklad Breusch-Pagan test. Ten je zalozen na následujím predpokladu.
\(\epsilon^2=\gamma_0+\gamma_1 x_1+\gamma_2 x_2+...+\gamma_k x_k + v\)
Pokud by byl nekterý parametr signifikantní, tak poté muzeme mluvit o heteroskedasticite. Je treba otestovat parametry. Jednou z mozností je napríklad F-test, nebo LM-test.
\(H_0: \gamma_1=\gamma_2=...=\gamma_k=0\)
\(H_1: neplatí \ H_0\)
install.packages("lmtest")
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(wage4~IQ+educ+expert)
##
## studentized Breusch-Pagan test
##
## data: wage4 ~ IQ + educ + expert
## BP = 165.3, df = 3, p-value < 2.2e-16
Nyní si zkusíme sami sestrojit BP test.
reg_hetero=lm(wage4~IQ+educ+expert)
resid_hetero=reg_hetero$residuals # ulozíme si residua do promenné resid_hetero
reg_res=lm(resid_hetero^2~IQ+educ+expert) # provedeme regresi ve stylu BP testu
summary(reg_res)
##
## Call:
## lm(formula = resid_hetero^2 ~ IQ + educ + expert)
##
## Residuals:
## Min 1Q Median 3Q Max
## -38.35 -23.99 -14.85 8.13 434.47
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 4.00286 8.45673 0.473 0.636
## IQ 0.01050 0.08200 0.128 0.898
## educ 1.67325 0.12948 12.922 <2e-16 ***
## expert -0.04846 0.04744 -1.022 0.307
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 40.99 on 9996 degrees of freedom
## Multiple R-squared: 0.01653, Adjusted R-squared: 0.01624
## F-statistic: 56 on 3 and 9996 DF, p-value: < 2.2e-16
Pokud není splnena podmínka homoskedasticity, metoda OLS jiz neposkytuje BLUE odhad. Jinými slovy, odhad pomocí OLS jiz není vydatný. Existuje jiná metoda, která bude BLUE. Odhad je stále NEZKRESLENÝ A KONZISTENTNÍ, pokud jsou splneny ostatní podmínky!!!
Co delat v prípade prítomnosti heteroskedasticity?