Carga del Data

library(readr)
datos_ejercicio <- read_table2("http://halweb.uc3m.es/esp/Personal/personas/agrane/libro/ficheros_datos/capitulo_7/datos_prob_7_3.txt",col_names = FALSE)

Método Critic

library(dplyr)
library(kableExtra)

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

datos_ejercicio %>% dplyr::select(X3,X7,X8) %>% dplyr::transmute(X3=norm_directa(X3),X7=norm_directa(X7), X8=norm_inverza(X8)) ->data_factor_1
print(data_factor_1)
## # A tibble: 18 x 3
##        X3      X7    X8
##     <dbl>   <dbl> <dbl>
##  1 0.983  0.768   0.353
##  2 0.55   0.165   0.765
##  3 0.483  0       1    
##  4 1      0.744   0.118
##  5 0.0333 0.00478 1    
##  6 0.517  0.175   0.941
##  7 0.283  0.0215  1    
##  8 0.867  0.440   0.706
##  9 0.333  0.215   0.941
## 10 0      0.0478  1    
## 11 0.2    0.0191  1    
## 12 0.5    0.670   0.706
## 13 0.867  0.184   0.824
## 14 0.3    0.110   1    
## 15 0.0667 0.0335  1    
## 16 0.3    0.445   0.647
## 17 0.533  0.309   0.882
## 18 0.767  1       0
ponderadores_CRITIC <-function(data_normalizada) { 
#Cálculo de las desviaciones estándar de cada variable

apply(data_normalizada,MARGIN =2,FUN = sd)-> sd_vector


#Cálculo de la matriz de correlación

cor(data_normalizada)->mat_R_F1


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


#Cálculo de los ponderadores netos

vj/sum(vj)->wj


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

list(desv=sd_vector,ponderadores_brutos=vj,ponderadores_netos=wj,netos_redondeados=ponderadores)
}

###--------------------------------------------------------------------------

# Aplicación de la función

ponderadores_CRITIC(data_factor_1)%>% as.data.frame() %>%  kable(caption ="Método CRITIC" ,align = "l",digits = 5) %>%   kable_classic_2(html_font = "Times New Roman") %>% kable_styling(font_size = 16, bootstrap_options = c("striped", "hover"))
Método CRITIC
desv ponderadores_brutos ponderadores_netos netos_redondeados
X3 0.31794 0.64192 0.25902 25.90
X7 0.31082 0.69267 0.27950 27.95
X8 0.31250 1.14367 0.46148 46.15

Método Entropía

library(dplyr)
library(kableExtra)
#Normalización de los datos
datos_ejercicio %>% dplyr::select(X3,X7,X8)->data_norm
apply(data_norm,2,prop.table)->data_norm
data_norm=data_norm+2

# Función de los ponderadores
ponderadores_ENTROPIA= function(data_normalizada){
  
  #Fórmula de entropía
  entropy<-function(x){
  return(x*log(x))
  }
  
apply(data_norm,2,entropy)->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(Cons_Entropia=K,Entropias=Ej, Especificidades=vj, ponderadores=wj)
}

ponderadores_ENTROPIA(data_factor_1)%>% as.data.frame() %>%  kable(caption ="Método ENTROPIA" ,align = "c",digits = 4) %>%   kable_classic_2(html_font = "Times New Roman") %>% kable_styling(font_size = 16, bootstrap_options = c("striped", "hover"))
Método ENTROPIA
Cons_Entropia Entropias Especificidades ponderadores
X3 -0.346 -9.2250 10.2250 0.3333
X7 -0.346 -9.2274 10.2274 0.3333
X8 -0.346 -9.2289 10.2289 0.3334