Análise por Envoltória de Dados

Author

Marea

Explicação da DEA

A Análise por Envoltória de Dados, mais conhecida como DEA, serve para calcular a eficiência das DMUs (Decision Making Units). Através de valores de entradas e saídas ela calcula o nível de eficiência e quanto mais perto de 1 mais eficiente aquela DMU analisada foi.

Gerando valores aleátorios para as DMUs

Code
library(deaR)
library(dplyr)
 
num_dmus <- 10
 
set.seed(1992)
inputs <- data.frame(
  Input1 = runif(num_dmus, min = 5000, max = 10000),
  Input2 = runif(num_dmus, min = 5000, max = 10000),
  Input3 = runif(num_dmus, min = 5000, max = 10000)
)
 
outputs <- data.frame(
  Output1 = runif(num_dmus, min = 10100, max = 15000)
)
 
dados <- cbind(inputs, outputs)
rownames(dados) <- paste("DMU", 1:num_dmus, sep = "_")
 
dados
         Input1   Input2   Input3  Output1
DMU_1  8124.007 5171.826 8057.554 13930.66
DMU_2  9107.213 5665.941 5135.298 12746.87
DMU_3  9030.641 9066.247 7147.396 13013.49
DMU_4  7908.718 5922.212 8448.552 12321.48
DMU_5  7241.801 7855.071 5790.783 10990.91
DMU_6  8561.808 7546.312 9927.746 10997.46
DMU_7  6004.231 7549.053 8950.225 13438.46
DMU_8  8288.404 7217.063 5560.648 12495.10
DMU_9  8198.781 7698.857 7413.699 10502.44
DMU_10 9219.475 6375.413 6555.895 13350.77

Usando função do R que calcula o modelo

Code
dados_dea <- make_deadata(dados, inputs = 1:3, outputs = 4:4)
 
modelo <- model_basic(dados_dea, orientation = "io", rts = "crs", dmu_eval = NULL, dmu_ref = NULL)
 
eficiencias <- efficiencies(modelo)
eficiencias
8124.00708091445 9107.21270018257 9030.64081328921 7908.71829958633 
       1.0000000        1.0000000        0.8922852        0.8658329 
7241.80106655695  8561.8080268614  6004.2314149905 8288.40356902219 
       0.9355372        0.6760176        1.0000000        1.0000000 
8198.78088543192 9219.47453171015 
       0.7478488        0.9497661 

Vendo quanto cada DMU poderia ter economizado em cada input

Code
eficiencias_vetor <- as.numeric(unlist(eficiencias))
economias <- matrix(0, nrow = nrow(inputs), ncol = ncol(inputs))
 
for (i in 1:nrow(inputs)) {
  for (j in 1:ncol(inputs)) {
    if (eficiencias_vetor[i] < 1) {
      economia <- inputs[i, j] * (1 - eficiencias_vetor[i])
      economias[i, j] <- economia
    }
  }
}

options(scipen = 999)

print("Economia de insumos para DMUs ineficientes (linhas são DMUs, coluna são insumos):")
[1] "Economia de insumos para DMUs ineficientes (linhas são DMUs, coluna são insumos):"
Code
economias
                       [,1]                  [,2]                 [,3]
 [1,]    0.0000000003508570    0.0000000002233592    0.000000000347987
 [2,]    0.0000000025752812    0.0000000016021796    0.000000001452128
 [3,]  972.7335686743689394  976.5688951653943377  769.880250656695125
 [4,] 1061.0895937843354204  794.5659070512385824 1133.517533753464704
 [5,]  466.8265436668579582  506.3596206775142718  373.289922644298429
 [6,] 2773.8754008762734884 2444.8724120555807531 3216.415187560789036
 [7,]    0.0000000009025813    0.0000000011348054    0.000000001345435
 [8,]    0.0000000018238317    0.0000000015880873    0.000000001223599
 [9,] 2067.3325371170717517 1941.2760136240037809 1869.373211535807968
[10,]  463.1300872144100254  320.2618058123619562  329.328141228905679