Dobór zmiennych objaśniających metodą Hellwiga

Kod można również pobrać pod tym linkiem.

###Używając poniższego kodu, należy podać autora i źródło:
##########################################################
#Gutowski F. (2014),
#Dobór zmiennych objaśniających do modelu ekonometrycznego metodą Hellwiga
#w środowisku R.
#W: Zastosowania metod ilościowych w badaniach ekonomicznych,
#red. T. Żądło, Wydawnictwo Uniwersytetu Ekonomicznego w Katowicach,
#Katowice, s. 43-52.

###Opis
#######
#Funkcja zwraca możliwe kombinacje zmiennych objaśniających wraz z
#wartościami ich pojemności integralnych. Kombinacja o najwyższym
#współczynniku jest uznawana za optymalną i powinna się znaleźć w modelu.

###Parametry
############
#data: macierz lub obiekt typu data.frame
#ycol: numer kolumny, zawierającej wartości zmiennej objaśnianej
#output: „all” zwraca wszystkie możliwe kombinacje, „max” – określoną
# parametrem ‚nmax’ liczbę kombinacji o najwyższym współczynniku
#nmax: dla parametru ‚output’ = „max” – liczba zwracanych kombinacji
###Kod
######

hellwig = function(data, ycol = 1, output = „all”, nmax = 1){
data = cbind(data[,ycol], data[,-ycol])
nvar = ncol(data)
n = nvar-1
cormatrix = cor(data)
R0 = matrix((cormatrix[c(2:nvar), 1]), ncol = 1)
R = cormatrix[c(2:nvar), c(2:nvar)]
R_abs = matrix(abs(R), nrow = nrow(R))
ind_cap_vect = NULL
int_cap_vect = NULL
label_ind_vect = NULL
label_int_vect = NULL
for(i in 1:n){
comb = combn(n, i)
ncomb = ncol(comb)
for(j in 1:ncomb){
vars = comb[,j]
for(k in vars){
ind_cap = ((R0[k])^2)/(sum(R_abs[vars, k]))
ind_cap_vect = c(ind_cap_vect, ind_cap)
label_ind = paste(c(„x”, as.character(k)), collapse = „”)
label_ind_vect = c(label_ind_vect, label_ind)
}
}
}
print(ind_cap_vect)
print(label_ind_vect)
rep_vect = unlist(mapply(rep, 1:n, choose(n, 1:n)))
for(i in rep_vect){
int_cap = sum(ind_cap_vect[1:i])
ind_cap_vect = ind_cap_vect[-(1:i)]
int_cap_vect = c(int_cap_vect, int_cap)
label_int = paste(label_ind_vect[1:i], collapse = „, „)
label_ind_vect = label_ind_vect[-(1:i)]
label_int_vect = c(label_int_vect, label_int)
}
int_cap = cbind(int_cap_vect)
colnames(int_cap) = „integral capacity”
rownames(int_cap) = label_int_vect
if(output == „all”){
return(int_cap)
}else{
if(output == „max”){
ord = order(int_cap,decreasing=TRUE)
int_cap = int_cap[ord]
int_cap = cbind(int_cap[1:nmax])
label_int_vect = label_int_vect[ord]
label_int_vect = label_int_vect[1:nmax]
colnames(int_cap) = „integral capacity”
rownames(int_cap) = label_int_vect
return(int_cap)
}else{
cat(‚Error: invalid „output” parameter value\n’)
}
}
}

###Przykład
###########

hellwig(mtcars[,3:7], output = „max”, nmax = 5)

Dodaj komentarz