Métodos para el Análisis Económico
Integrantes:

Funciones : Métodos de Critic y Entropía

Cargamos los datos
library(readr)
exercise_data <- read_table2("http://halweb.uc3m.es/esp/Personal/personas/agrane/libro/ficheros_datos/capitulo_7/datos_prob_7_3.txt",col_names = FALSE)
Funciones para normalizar los datos usando apply
library(dplyr)
norm_directa <- function(x){
  return((x-min(x)) / (max(x)-min(x)))
}

norm_inverza <- function(x){
  return((max(x)-x) / (max(x)-min(x)))
}

#Normalización directa de los datos
exercise_data %>% 
select(X3,X7) %>% 
  apply(MARGIN = 2,FUN = norm_directa) %>% as.data.frame()->data_norm_directa
#Normalización inversa de los datos  
exercise_data %>% 
  select(X8) %>% 
  apply(MARGIN = 2,FUN = norm_inverza) %>% as.data.frame()->data_norm_inv 
#Juntando y reordenando las variables
data_norm_directa %>% 
  bind_cols(data_norm_inv)%>% 
  select(X3,X7,X8)->data_factor_1
head(data_factor_1)
##           X3          X7        X8
## 1 0.98333333 0.767942584 0.3529412
## 2 0.55000000 0.165071770 0.7647059
## 3 0.48333333 0.000000000 1.0000000
## 4 1.00000000 0.744019139 0.1176471
## 5 0.03333333 0.004784689 1.0000000
## 6 0.51666667 0.174641148 0.9411765

Metodo CRITIC

Construyendo la funcion para metodo CRITIC
#Funcion ponderadores CRITIC
funcion_critic<-function(data_factor_1){

#Calculo de las desviaciones estándar de cada variable
apply(data_factor_1,MARGIN =2,FUN = sd)-> sd_vector

#Calculo de la matriz de correlación
cor(data_factor_1)->mat_R_F1

#Calculo de los ponderadores brutos
1-mat_R_F1->sum_data
colSums(sum_data)->sum_vector
sd_vector*sum_vector->vj

#Calculo de los ponderadores netos
vj/sum(vj)->wj

#Ponderadores:
round(wj*100,2)->ponderadores

#Creamos la lista 
list(desvi_estandar=sd_vector,mat_corr=mat_R_F1,pond_bruto=vj,pond_neto=wj,ponderadores=ponderadores)
}

Aplicando la funcion

library(kableExtra)

#Aplicando la función:
ponderadores_critic<-funcion_critic(data_factor_1)

ponderadores_critic %>% as.data.frame() %>%
 kable(caption = "Método CRITIC" ,align = "c",digits = 4) %>% 
  kable_classic(html_font = "Cambria") %>% kable_styling(font_size = 14, bootstrap_options = c("striped", "hover"))
Método CRITIC
desvi_estandar mat_corr.X3 mat_corr.X7 mat_corr.X8 pond_bruto pond_neto ponderadores
X3 0.3179 1.0000 0.7061 -0.7251 0.6419 0.2590 25.90
X7 0.3108 0.7061 1.0000 -0.9346 0.6927 0.2795 27.95
X8 0.3125 -0.7251 -0.9346 1.0000 1.1437 0.4615 46.15

Metodo Entropia

Construyendo la funcion para metodo entropia
library(dplyr)
library(tidyr)

#Normalización de los datos
exercise_data %>% 
  select(X3,X7,X8)->data_norm
apply(data_norm,2,prop.table)->data_norm

#Eliminando valores nulos
data_norm_1 <- na.omit(data_norm)
print(data_norm)
##               X3          X7         X8
##  [1,] 0.10166920 0.131305352 0.13636364
##  [2,] 0.06221548 0.034270312 0.05681818
##  [3,] 0.05614568 0.007701194 0.01136364
##  [4,] 0.10318665 0.127454755 0.18181818
##  [5,] 0.01517451 0.008471313 0.01136364
##  [6,] 0.05918058 0.035810551 0.02272727
##  [7,] 0.03793627 0.011166731 0.01136364
##  [8,] 0.09104704 0.078552176 0.06818182
##  [9,] 0.04248862 0.042356565 0.02272727
## [10,] 0.01213961 0.015402387 0.01136364
## [11,] 0.03034901 0.010781671 0.01136364
## [12,] 0.05766313 0.115517905 0.06818182
## [13,] 0.09104704 0.037350789 0.04545455
## [14,] 0.03945372 0.025413939 0.01136364
## [15,] 0.01820941 0.013092029 0.01136364
## [16,] 0.03945372 0.079322295 0.07954545
## [17,] 0.06069803 0.057373893 0.03409091
## [18,] 0.08194234 0.168656142 0.20454545
#Fórmula de entropía
entropy<-function(x){
  return(x*log(x))
}
apply(data_norm,2,entropy)->data_norm_2

#Función de entropía
funcion_entropia<-function(data_norm_2){

#Número de variables en el factor:
nrow(data_norm)->m
  
#Constante de entropía:
-1/log(m)->K

#Cálculo de las entropías
K*colSums(data_norm_2)->Ej

#Cálculo de las especificidades:
1-Ej->vj

#Cálculo de los ponderadores:
prop.table(vj)->wj

list(Constante_Entropia=K,Cal_Entropia=Ej,Cal_Especificidades=vj, Cal_Ponderadores=wj)
}

Aplicando la funcion

#Aplicando la función:
Especificidades_entropia<-funcion_entropia(data_norm_2)
#Aplicamos fromato kable
Especificidades_entropia %>% as.data.frame() %>%
  kable(caption = "Método Entropia" ,align = "c",digits = 4) %>% 
  kable_classic(html_font = "Cambria") %>% kable_styling(font_size = 14, bootstrap_options = c("striped", "hover"))
Método Entropia
Constante_Entropia Cal_Entropia Cal_Especificidades Cal_Ponderadores
X3 -0.346 0.9528 0.0472 0.1405
X7 -0.346 0.8741 0.1259 0.3752
X8 -0.346 0.8375 0.1625 0.4842