Multikolinearita
Je to porušenie jedného z predpokladov pre náhodnú zložku a vstupných premenných ekonometrického modelu – vzájomná lineárna nezávislosť vysvetľujúcich premenných.
Možné príčiny multikolinearity:
- Zlá špecifikácia premenných
- Malý rozsah výberového súboru
Spôsoby zisťovania multikolinearity:
- Farrar – Glauber test
- Variančné inflačné faktory
- Korelačná matica
- Vlastné čísla korelačnej matice
Vybrané spôsoby odstránenia multikolinearity:
- vynechanie premenných, ktoré ju spôsobujú, resp. ich nahradenie inými
- metóda hlavných komponentov
- transformácia premenných
- hrebeňová regresia
- využitie apriórnych informácií o hodnotách parametrov
Príklad
Vzorový príklad s metódami na testovanie prítomnosti multikolinearity a jej odstránenie
#Načítanie dát
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)
#Multikolinearita - Farrar-Glauber test
vys_mat=cbind(Pt,It) # matica vysvetľujúcich premenných
kor_mat=cor(vys_mat) # korelačná matica
#Funkcia testu - Farrar-Glauber
fgtest = function(vn,cor_mat)
{
dof_cor=dim(cor_mat)[1] #počet stupňov voľnosti
chi_sq_cal=((-1)*(length(vn)-1-(2*dof_cor+5)/6)*log(det(cor_mat))) #chi^2
chi_sq_tab=qchisq(0.95,1/2*dof_cor*(dof_cor-1)) #chi^2 tab hodnota
if(chi_sq_cal>chi_sq_tab) #ak je vypočítaná väčšia ako tab, zamietam h0
cat("multikolinearita je významná")
else
cat("multikolinearita nie je významná")
}
#Volanie funkcie
fgtest(Pt,kor_mat)
#Odstránenie multikolinearity - MHK pomocou funkcie princomp()
kor=princomp(cbind(Pt,It),cor=TRUE)
mhk<-kor$scores
mhk
MHKtran = t(mhk)
inv = solve(MHKtran %*% mhk)
sd1=function(a) {
p=mean(a);
n=length(a);
i=1;
b=0;
while(i<=n){
b[i]=c((a[i]-p)^2)
i=i+1
};
return(sqrt(sum(b)/n))
}
nYt=(Yt-mean(Yt))/sd1(Yt)
b = inv %*% MHKtran %*% nYt
b
#Odstránenie multikolinearity - MHK cez vlastné vektory
cor_mat = cor(cbind(Pt,It))
eig_mat= eigen(cor_mat)
sd1=function(a) {
p=mean(a);
n=length(a);
i=1;
b=0;
while(i<=n){
b[i]=c((a[i]-p)^2)
i=i+1
};
return(sqrt(sum(b)/n))
}
nXt1=(Pt-mean(Pt))/sd1(Pt)
nXt2=(It-mean(It))/sd1(It)
mhk=cbind(nXt1,nXt2) %*% eig_mat$vectors
mhk
MHKtran = t(mhk)
inv = solve(MHKtran %*% mhk)
nYt=(Yt-mean(Yt))/sd1(Yt)
b = inv %*% MHKtran %*% nYt
b
Máme zadaný model:
yt = b0 + b1*xt1 + b2*xt2 + b3*xt3 + ut
Vypočítajte korelačnú maticu R cez normovanie premenných. Overte správnosť alebo nesprávnosť predpokladu o vysokom stupni multikolinearity. V prípade potvrdenia vysokého stupňa multikolinearity sa ju pokúste odstrániť vhodnou metódou.
Riešenie
Najprv je potrebné načítať údaje z príkladu, v našom prípade Yt, Xt1, Xt2, Xt3.
- Načítanie dát
- Vytvoríme si korelačnú maticu pomocou funkcie cor()
- Teraz otestujeme významnosť stupňa multikolinearity pomocou Farrar – Glauber testu.
Odstránenie
V prípade prítomnej multikolinearity ju môžeme odstrániť pomocou Metódy hlavných komponentov (Principal components analysis – PCA) – funkcia princomp() alebo cez vlastné vektory.
- MHK pomocou funkcie princomp()
- MHK cez vlastné vektory
Multikolinearita a jej diagnostika [4.6.2015]
Marček, D., Marček, M., Pančíková, L.: Ekonometria a soft computing. Žilina: EDIS, 2008 ISBN 978-80-8070-746-0