ordenar los resultados de los más eficientes a los menos eficientes

options(scipen = 99999)
library(deaR)
library(knitr)
# --- datos
PFT1981 <- deaR::PFT1981
PFT_raw <- PFT1981[1:49, ]

# preparar para dea
PFT <- make_deadata(PFT_raw, inputs = 2:6, outputs = 7:9)

# modelo CCR
modelo_dea <- model_basic(PFT, orientation = "io", rts = "crs")

# eficiencias
eff <- efficiencies(modelo_dea)

# construir tabla de resultados (asegurar numeric)
resultados <- data.frame(
  E = round(as.numeric(eff), 4),
  stringsAsFactors = FALSE
)
resultados$`1-E` <- round(1 - resultados$E, 4)

# ordenar de mayor a menor eficiencia
resultados_ordenados <- resultados[order(-resultados$E), ]

# mostrar tabla ordenada
kable(resultados_ordenados, 
      caption = "Resultados ordenados de más a menos eficientes",
      digits = 4)
Resultados ordenados de más a menos eficientes
E 1-E
1 1.0000 0.0000
5 1.0000 0.0000
10 1.0000 0.0000
15 1.0000 0.0000
17 1.0000 0.0000
18 1.0000 0.0000
20 1.0000 0.0000
21 1.0000 0.0000
22 1.0000 0.0000
24 1.0000 0.0000
27 1.0000 0.0000
35 1.0000 0.0000
40 1.0000 0.0000
44 1.0000 0.0000
47 1.0000 0.0000
48 1.0000 0.0000
49 1.0000 0.0000
3 0.9883 0.0117
14 0.9840 0.0160
11 0.9819 0.0181
25 0.9764 0.0236
12 0.9744 0.0256
38 0.9702 0.0298
23 0.9630 0.0370
16 0.9503 0.0497
19 0.9501 0.0499
42 0.9474 0.0526
41 0.9468 0.0532
28 0.9443 0.0557
33 0.9402 0.0598
26 0.9371 0.0629
39 0.9352 0.0648
8 0.9148 0.0852
46 0.9087 0.0913
32 0.9070 0.0930
6 0.9069 0.0931
30 0.9025 0.0975
4 0.9024 0.0976
2 0.9017 0.0983
7 0.8924 0.1076
45 0.8916 0.1084
9 0.8711 0.1289
43 0.8708 0.1292
37 0.8614 0.1386
13 0.8600 0.1400
34 0.8521 0.1479
29 0.8417 0.1583
31 0.8392 0.1608
36 0.8032 0.1968

Interpretación:

La tabla muestra que 17 unidades son plenamente eficientes (E = 1), mientras que las restantes presentan distintos grados de ineficiencia: algunas están cerca de la frontera (1–5% de mejora) y otras requieren ajustes más significativos (hasta ~20%). Esto indica que varias unidades podrían optimizar sus insumos o aumentar sus outputs para alcanzar la eficiencia máxima, usando a las unidades eficientes como referente.

Cálculo la oportunidad de mejora promedio para las unidades ineficientes.

# calcular oportunidad de mejora promedio (solo ineficientes) 
ineficientes_idx <- resultados$E < 1
if (sum(ineficientes_idx) == 0) {
  cat("Todas las unidades son eficientes (E == 1). No hay oportunidad de mejora promedio.\n")
  oport_mejora_prom <- NA
} else {
  oport_mejora_prom <- mean(resultados$`1-E`[ineficientes_idx], na.rm = TRUE)
  cat("Oportunidad de mejora promedio (solo ineficientes):",
      round(oport_mejora_prom * 100, 2), "%\n")
}
## Oportunidad de mejora promedio (solo ineficientes): 8.38 %

Interpretación:

Las unidades ineficientes pueden mejorar en promedio un 8.4% para alcanzar la eficiencia máxima, lo que indica que todavía existe un margen moderado de optimización en el uso de recursos o en los resultados generados.