Heteroskedasticita
Je to nekonštantnosť rozptylu náhodných porúch, a teda aj rezíduí. S týmto javom sa stretávame vtedy, keď dochádza k veľkým zmenám v hodnotách vysvetľujúcich premenných, ale aj v prípade, ak bola vynechaná podstatná premenná modelu. Opačný jav, konštantnosť rozptylu náhodných porúch, a teda aj rezíduí, sa nazýva homoskedasticita. Na testovanie homoskedasticity sa najčastejšie používa Goldfeldov-Quandtov test (ďalej už len: GQ test). Z iných testov spomeňme: Breuschov-Paganov, Bartlettov, Parkov, Gleicherov, Whiteov, Koenkerov test. Na príklade si ukážeme testovanie homoskedasticity pomocou prvých troch spomenutých testov v R-ku a ďalšie z nich budeme testovať v Gretli.
Postup GQ test
- Usporiadame hodnoty vysvetľujúcej premennej X vzostupne.
- Vynecháme prostredných M pozorovaní.
- Zostatok rozdelíme do dvoch skupín po pozorovaní (nepárne zaokrúhlime nadol).
- Pre každú skupinu odhadneme parametre modelu JMNŠ a vypočítame rezíduá. Označíme S1 a S2 súčet štvorcov rezíduí v dolnej a hornej skupine.
- Vypočítame GQ test podľa vzorca.
Formulujeme tieto hypotézy:
- H0: homoskedasticita
- H1: heteroskedasticita
Odstraňovanie heteroskedasticity
- Pomocu transformácie modelu (dát)
Transformácie
- σ2 sú známe, pričom neplatí:
σ21= σ2=….= σ2n
yt = b0+b1Xt1+….+bkXtk+ut
yt/ σ2 = b0.1/ σ2+b1.Xt1/ σ2+….+bk.Xtk /σ2+ut/ σ2
- v maticovom vyjadrení modelu: y = Xb + ub^ = (X’X)-1 X’Y
- transformácia: Wy = WXb + Wub^ = (X’W”WX)-1 X’W‘Wy
- σ2 sú neznáme, ale možno ich odhadnúť z výberu.
- H1: σ2 = c.X2th…… zodpovedá Goldfeld-Quandtov-mu testu
Yt/Xht=b0.1/Xth+b1.Xt1/Xth+….bk.Xtk/Xth+ut/Xth
cov(ut*)=cov(u/Xth)=(1/X2th).cov(u)=eXS2th/X2th=e -> homoskedasticita
Spätná transformácia dát b^ = (b’b)-1 X’y je výdatná a už neobsahuje heteroskedasticitu.
Niekedy sa odstránenie nepodarí po prvom kroku, ale až po niekoľkých krokoch.
Príklad
Vzorový príklad s metódami na testovanie prítomnosti heteroskedasticity a jej odstranenie:
#NACITANIE DAT
Yt <- c(6.1, 7.3, 9.6, 10.2, 10.1, 11.3, 12.2, 12.5, 13.2)
Pt <- c(103, 102, 100, 94, 98, 97, 98, 97, 96)
It <- c(110, 114, 130, 135, 141, 152, 160, 165, 170)
#príprava matíc
mat=cbind(Yt,Pt,It)
model<-(Yt ~ Pt + It)
regresia<-lm(model)
#Goldfield-Quandt Test
gqtest(regresia, order.by = Pt, fraction=1, data = mat)
#Breusch-Pagan Test
bptest(regresia)
#Bartlett test
data<-list(Yt,Pt,It)
bartlett.test(data)
Yt1<-1
for (i in 1:9)
{
Yt1[i]<-(Yt[i]/It[i])
}
Xt1<-1
for (i in 1:9)
{
Xt1[i]<-(Pt[i]/It[i])
}
mat1 = cbind(Yt1, Xt1, It)
model1<-(Yt1 ~ Xt1 + It)
regresia1<-lm(model1)
gqtest(regresia1, order.by = It, fraction=2, data = mat1)
#VLASTNA FUNKCIA
Het = function (mat, x, m,rem)
{
nr = nrow(mat)
nc = ncol(mat)
mat1 = mat
matt=mat
mat1 = mat1[order(mat1[,x+1]),]
if (nr%%2==1){
if (m%%2==1){
k=m
}
else{
k=m+1
}
}
else {
if (m%%2==1){
k=m+1
}
else{
k=m
}
}
l=0
l=(nr-k)/2
mt1 = mat1[1:l,1:nc]
cat(mt1,"\n")
mt2 = mat1[(l+k+1):nr,1:nc]
cat(mt2,"\n")
y1=mt1[1:l,1]
cat(y1,"\n")
y2=mt2[1:l,1]
cat(y2,"\n")
reg = function (Yt, mm)
{
regr = lm (Yt~mm)
nr = nrow(mm)
nc = ncol(mm)
y = c()
b = c()
for (i in 1:(nc+1))
{
b[i]=regr$coef[i]
}
for (i in 1:nr)
{
ypom = 0;
for (j in 2:(nc+1))
{
ypom = ypom + b[j]*mm[i,(j-1)]
}
y[i]=b[1]+ypom
}
y
}
yt1 = reg(y1,mt1[1:l,2:nc])
yt2 = reg(y2,mt2[1:l,2:nc])
sum1 = 0
sum2 = 0
et1=c()
et2=c()
for (i in 1:l){
et1[i]=y1[i]-yt1[i]
et1[i]=et1[i]*et1[i]
sum1 =sum1 + et1[i]
}
for (i in 1:l){
et2[i]=y2[i]-yt2[i]
et2[i]=et2[i]*et2[i]
sum2 = sum2 + et2[i]
}
if (sum1>sum2){
Fv=sum1/sum2
}
else {
Fv=sum2/sum1
}
sv = l-(nc-1)-1
Ftab = qf(0.95,sv,sv)
if (Fv>Ftab){
H1='true'
cat(
" =======================================","\n",
" Results:","\n\n",
"---------------------------------------","\n",
" F stats. calculated: ",Fv,"\n",
" F stats. tabulated: ",Ftab,"\n",
" Presence of heteroscedasticity","\n",
"=======================================","\n\n"
)
}
else {
H1='false'
cat(
" =======================================","\n",
" Results:","\n\n",
"---------------------------------------","\n",
" F stats. calculated: ",Fv,"\n",
" F stats. tabulated: ",Ftab,"\n",
" The absence of heteroskedasticity","\n",
"=======================================","\n\n"
)
}
if (H1=='true' & rem=='true'){
cat(
" +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+","\n",
" Removing heteroscedasticity","\n",
"+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+","\n\n"
)
xx=matt[1:nr,x+1]
for (i in 1:nc){
if (i==x+1){
for (j in 1:nr){
matt[j,i]=1/xx[j]
}
}
else{
for (j in 1:nr){
matt[j,i]=matt[j,i]/xx[j]
}
}
}
Het(matt,1,1,'false')
}
if (rem=='true'){
cat(
" =======================================","\n",
" New values:","\n\n",
"---------------------------------------","\n",
"yt=c("
)
for (j in 1:nr){
if(j
Máme dané premenné: Yt, Xt, Pt. Na dátach modelu otestujte homoskedasticitu, v prípade prítomnosti heteroskedasticity sa pokúste o jej odstránenie. Predpokladajte, že heteroskedasticitu spôsobuje premenná Pt.
Riešenie
Príprava programu a dát
- K úspešnému vyriešeniu potrebujete mať v R naimportované potrebné knižnice.
Ako pridám knižnice?
library(sem)
library(zoo)
library(lmtest)library(xlsReadWrite) (zadávame, ak používame načítanie dát z Excelu)
xls.getshlib() (zadávame, ak používame načítanie dát z Excelu) - Načítanie dát.
- Zo vstupných údajov urobíte maticu.
mat=cbind(Yt,Xt,Pt)
- Zadefinujete model.
model<-(Yt ~ Xt + Pt)
- Regeresia- výpočet b0, b1, b2.
regresia<-lm(model)
Testovanie homoskedasticity
Na otestovanie homoskedasticity môžeme v R použiť jeden z nasledujúcich spôsobov:
- Goldfield-Quandt Test
- Breusch-Pagan Test
- Bartlett Test
- Vlastná funkcia
Marček, D., Marček, M., Pančíková, L.: Ekonometria a soft computing. Žilina: EDIS, 2008 ISBN 978-80-8070-746-0
Marček, D. : Ekonometria: Základy. Postupy. Aplikačné príklady. Žilina: EDIS 1999 ISBN 80-7100-557-6