Skip to contents

DEA efficiency analysis

Usage

basic_DEA(
  data,
  inputs,
  outputs,
  ud_outputs = NULL,
  orientation = "io",
  rts = "vrs"
)

super_DEA(data, inputs, outputs, orientation = "io", rts = "vrs")

basic_SBM(
  data,
  inputs,
  outputs,
  ud_outputs = NULL,
  orientation = "io",
  rts = "vrs"
)

super_SBM(data, inputs, outputs, orientation = "io", rts = "vrs")

malmquist(
  data,
  period,
  inputs,
  outputs,
  orientation = "oo",
  rts = "vrs",
  type1 = "glob",
  type2 = "rd"
)

Arguments

data

A data frame. 1st column = DMU names.

inputs

Column indices/names of input variables.

outputs

Column indices/names of output variables.

ud_outputs

Column indices (within outputs) of undesirable outputs, or NULL.

orientation

"io" (input-oriented, default) or "oo" (output-oriented). All DEA functions return Farrell efficiency (0~1), where 1 = efficient. For output orientation: value = 1/\(\phi\), where \(\phi \ge 1\) is the Shephard distance.

rts

"vrs" (variable returns to scale, default) or "crs" (constant).

period

Column name or index identifying the time period variable.

type1

"cont" (contemporaneous), "seq" (sequential), or "glob" (global, default).

type2

"fgnz" (Färe-Grosskopf-Norris-Zhang) or "rd" (Ray-Desli, default).

Value

A list with components: efficiencies, lambdas, slacks, targets, returns, model, orientation, dmu.

Functions

  • basic_DEA(): Standard radial DEA (CCR/BCC)

  • super_DEA(): Super-efficiency DEA (self excluded, radial only)

  • basic_SBM(): Standard Slacks-Based Measure (SBM, Tone 2001)

  • super_SBM(): Super-efficiency SBM (self excluded, no undesirable outputs)

  • malmquist(): Malmquist productivity index

Examples

df = data.frame(
  DMU = paste0("DMU", 1:7),
  x1  = c(20, 60, 40, 60, 70, 30, 50),
  x2  = c(151, 200, 120, 170, 250, 210, 90),
  y1  = c(100, 210, 150, 240, 220, 80, 200)
)
basic_DEA(df, inputs = 2:3, outputs = 4, rts = "crs")
#> $efficiencies
#>      DMU1      DMU2      DMU3      DMU4      DMU5      DMU6      DMU7 
#> 1.0000000 0.8203125 0.8910124 0.9570042 0.7295271 0.5437352 1.0000000 
#> 
#> $lambdas
#>           DMU1 DMU2 DMU3 DMU4 DMU5 DMU6       DMU7
#> DMU1 1.0000000    0    0    0    0    0 0.00000000
#> DMU2 0.6562500    0    0    0    0    0 0.72187500
#> DMU3 0.3719008    0    0    0    0    0 0.56404959
#> DMU4 0.5159501    0    0    0    0    0 0.94202497
#> DMU5 0.7866205    0    0    0    0    0 0.70668973
#> DMU6 0.7375887    0    0    0    0    0 0.03120567
#> DMU7 0.0000000    0    0    0    0    0 1.00000000
#> 
#> $slacks
#> $slacks$inputs
#>      x1 x2
#> DMU1  0  0
#> DMU2  0  0
#> DMU3  0  0
#> DMU4  0  0
#> DMU5  0  0
#> DMU6  0  0
#> DMU7  0  0
#> 
#> $slacks$outputs
#>                y1
#> DMU1 5.542233e-13
#> DMU2 7.673862e-13
#> DMU3 5.684342e-13
#> DMU4 1.080025e-12
#> DMU5 3.694822e-13
#> DMU6 3.836931e-13
#> DMU7 5.400125e-13
#> 
#> 
#> $targets
#> $targets$inputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> x1   20   60   40   60   70   30   50
#> x2  151  200  120  170  250  210   90
#> 
#> $targets$outputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> y1  100  210  150  240  220   80  200
#> 
#> 
#> $returns
#>  DMU1  DMU2  DMU3  DMU4  DMU5  DMU6  DMU7 
#> "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" 
#> 
#> $model
#> [1] "DEA"
#> 
#> $orientation
#> [1] "io"
#> 
#> $dmu
#> [1] "DMU1" "DMU2" "DMU3" "DMU4" "DMU5" "DMU6" "DMU7"
#> 
basic_DEA(df, inputs = 2:3, outputs = 4, rts = "vrs")
#> $efficiencies
#>      DMU1      DMU2      DMU3      DMU4      DMU5      DMU6      DMU7 
#> 1.0000000 0.8571429 0.9519868 1.0000000 0.7755102 0.7072571 1.0000000 
#> 
#> $lambdas
#>           DMU1 DMU2 DMU3      DMU4 DMU5 DMU6       DMU7
#> DMU1 1.0000000    0    0 0.0000000    0    0 0.00000000
#> DMU2 0.2142857    0    0 0.7857143    0    0 0.00000000
#> DMU3 0.3973510    0    0 0.0000000    0    0 0.60264901
#> DMU4 0.0000000    0    0 1.0000000    0    0 0.00000000
#> DMU5 0.1428571    0    0 0.8571429    0    0 0.00000000
#> DMU6 0.9594096    0    0 0.0000000    0    0 0.04059041
#> DMU7 0.0000000    0    0 0.0000000    0    0 1.00000000
#> 
#> $slacks
#> $slacks$inputs
#>                x1           x2
#> DMU1 3.552714e-15 2.842171e-14
#> DMU2 7.105427e-15 5.500000e+00
#> DMU3 0.000000e+00 1.421085e-14
#> DMU4 0.000000e+00 0.000000e+00
#> DMU5 7.105427e-15 2.659184e+01
#> DMU6 0.000000e+00 0.000000e+00
#> DMU7 0.000000e+00 0.000000e+00
#> 
#> $slacks$outputs
#>                y1
#> DMU1 0.000000e+00
#> DMU2 0.000000e+00
#> DMU3 1.026490e+01
#> DMU4 1.136868e-13
#> DMU5 0.000000e+00
#> DMU6 2.405904e+01
#> DMU7 0.000000e+00
#> 
#> 
#> $targets
#> $targets$inputs
#>    [,1]  [,2] [,3] [,4]     [,5] [,6] [,7]
#> x1   20  60.0   40   60  70.0000   30   50
#> x2  151 194.5  120  170 223.4082  210   90
#> 
#> $targets$outputs
#>    [,1] [,2]     [,3] [,4] [,5]    [,6] [,7]
#> y1  100  210 160.2649  240  220 104.059  200
#> 
#> 
#> $returns
#>  DMU1  DMU2  DMU3  DMU4  DMU5  DMU6  DMU7 
#> "VRS" "VRS" "VRS" "VRS" "VRS" "VRS" "VRS" 
#> 
#> $model
#> [1] "DEA"
#> 
#> $orientation
#> [1] "io"
#> 
#> $dmu
#> [1] "DMU1" "DMU2" "DMU3" "DMU4" "DMU5" "DMU6" "DMU7"
#> 
df = data.frame(
  DMU = paste0("DMU", 1:7),
  x1  = c(20, 60, 40, 60, 70, 30, 50),
  x2  = c(151, 200, 120, 170, 250, 210, 90),
  y1  = c(100, 210, 150, 240, 220, 80, 200)
)
super_DEA(df, inputs = 2:3, outputs = 4, rts = "crs")
#> $efficiencies
#>      DMU1      DMU2      DMU3      DMU4      DMU5      DMU6      DMU7 
#> 1.2500000 0.8203125 0.8910124 0.9570042 0.7295271 0.5437352 1.5740741 
#> 
#> $lambdas
#>           DMU1 DMU2 DMU3      DMU4 DMU5 DMU6       DMU7
#> DMU1        NA    0    0 0.4166667    0    0 0.00000000
#> DMU2 0.6562500   NA    0 0.0000000    0    0 0.72187500
#> DMU3 0.3719008    0   NA 0.0000000    0    0 0.56404959
#> DMU4 0.5159501    0    0        NA    0    0 0.94202497
#> DMU5 0.7866205    0    0 0.0000000   NA    0 0.70668973
#> DMU6 0.7375887    0    0 0.0000000    0   NA 0.03120567
#> DMU7 0.0000000    0    0 0.8333333    0    0         NA
#> 
#> $slacks
#> $slacks$inputs
#>                x1           x2
#> DMU1 3.552714e-15 1.179167e+02
#> DMU2 0.000000e+00 0.000000e+00
#> DMU3 0.000000e+00 0.000000e+00
#> DMU4 0.000000e+00 2.842171e-14
#> DMU5 0.000000e+00 0.000000e+00
#> DMU6 0.000000e+00 0.000000e+00
#> DMU7 2.870370e+01 4.547474e-13
#> 
#> $slacks$outputs
#>                y1
#> DMU1 0.000000e+00
#> DMU2 7.673862e-13
#> DMU3 5.684342e-13
#> DMU4 1.136868e-13
#> DMU5 3.694822e-13
#> DMU6 0.000000e+00
#> DMU7 0.000000e+00
#> 
#> 
#> $targets
#> $targets$inputs
#>        [,1] [,2] [,3] [,4] [,5] [,6]    [,7]
#> x1 20.00000   60   40   60   70   30 21.2963
#> x2 33.08333  200  120  170  250  210 90.0000
#> 
#> $targets$outputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> y1  100  210  150  240  220   80  200
#> 
#> 
#> $returns
#>  DMU1  DMU2  DMU3  DMU4  DMU5  DMU6  DMU7 
#> "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" 
#> 
#> $model
#> [1] "DEA"
#> 
#> $orientation
#> [1] "io"
#> 
#> $dmu
#> [1] "DMU1" "DMU2" "DMU3" "DMU4" "DMU5" "DMU6" "DMU7"
#> 
df = data.frame(
  DMU = paste0("DMU", 1:7),
  x1  = c(20, 60, 40, 60, 70, 30, 50),
  x2  = c(151, 200, 120, 170, 250, 210, 90),
  y1  = c(100, 210, 150, 240, 220, 80, 200)
)
basic_SBM(df, inputs = 2:3, outputs = 4, rts = "crs")
#> $efficiencies
#>      DMU1      DMU2      DMU3      DMU4      DMU5      DMU6      DMU7 
#> 1.0000000 0.6737500 0.7500000 0.8176471 0.5908571 0.4190476 1.0000000 
#> 
#> $lambdas
#>      DMU1 DMU2 DMU3 DMU4 DMU5 DMU6 DMU7
#> DMU1    1    0    0    0    0    0  0.0
#> DMU2    0    0    0    0    0    0  1.2
#> DMU3    0    0    0    0    0    0  0.8
#> DMU4    0    0    0    0    0    0  1.2
#> DMU5    0    0    0    0    0    0  1.4
#> DMU6    0    0    0    0    0    0  0.6
#> DMU7    0    0    0    0    0    0  1.0
#> 
#> $slacks
#> $slacks$inputs
#>      x1  x2
#> DMU1  0   0
#> DMU2  0  92
#> DMU3  0  48
#> DMU4  0  62
#> DMU5  0 124
#> DMU6  0 156
#> DMU7  0   0
#> 
#> $slacks$outputs
#>      y1
#> DMU1  0
#> DMU2 30
#> DMU3 10
#> DMU4  0
#> DMU5 60
#> DMU6 40
#> DMU7  0
#> 
#> 
#> $targets
#> $targets$inputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> x1   20   60   40   60   70   30   50
#> x2  151  108   72  108  126   54   90
#> 
#> $targets$outputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> y1  100  240  160  240  280  120  200
#> 
#> 
#> $returns
#>  DMU1  DMU2  DMU3  DMU4  DMU5  DMU6  DMU7 
#> "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" 
#> 
#> $model
#> [1] "DEA"
#> 
#> $orientation
#> [1] "io"
#> 
#> $dmu
#> [1] "DMU1" "DMU2" "DMU3" "DMU4" "DMU5" "DMU6" "DMU7"
#> 
df = data.frame(
  DMU = paste0("DMU", 1:7),
  x1  = c(20, 60, 40, 60, 70, 30, 50),
  x2  = c(151, 200, 120, 170, 250, 210, 90),
  y1  = c(100, 210, 150, 240, 220, 80, 200)
)
super_SBM(df, inputs = 2:3, outputs = 4, rts = "crs")
#> $efficiencies
#>      DMU1      DMU2      DMU3      DMU4      DMU5      DMU6      DMU7 
#>        NA 0.6737500 0.7500000 0.8176471 0.5908571 0.4190476        NA 
#> 
#> $lambdas
#>      DMU1 DMU2 DMU3 DMU4 DMU5 DMU6 DMU7
#> DMU1   NA   NA   NA   NA   NA   NA   NA
#> DMU2    0   NA    0    0    0    0  1.2
#> DMU3    0    0   NA    0    0    0  0.8
#> DMU4    0    0    0   NA    0    0  1.2
#> DMU5    0    0    0    0   NA    0  1.4
#> DMU6    0    0    0    0    0   NA  0.6
#> DMU7   NA   NA   NA   NA   NA   NA   NA
#> 
#> $slacks
#> $slacks$inputs
#>      x1  x2
#> DMU1 NA  NA
#> DMU2  0  92
#> DMU3  0  48
#> DMU4  0  62
#> DMU5  0 124
#> DMU6  0 156
#> DMU7 NA  NA
#> 
#> $slacks$outputs
#>      y1
#> DMU1 NA
#> DMU2 30
#> DMU3 10
#> DMU4  0
#> DMU5 60
#> DMU6 40
#> DMU7 NA
#> 
#> 
#> $targets
#> $targets$inputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> x1   NA   60   40   60   70   30   NA
#> x2   NA  108   72  108  126   54   NA
#> 
#> $targets$outputs
#>    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#> y1   NA  240  160  240  280  120   NA
#> 
#> 
#> $returns
#>  DMU1  DMU2  DMU3  DMU4  DMU5  DMU6  DMU7 
#> "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" "CRS" 
#> 
#> $model
#> [1] "DEA"
#> 
#> $orientation
#> [1] "io"
#> 
#> $dmu
#> [1] "DMU1" "DMU2" "DMU3" "DMU4" "DMU5" "DMU6" "DMU7"
#> 
panel = data.frame(
  DMU    = rep(paste0("DMU", 1:5), 3),
  Period = rep(1:3, each = 5),
  x1     = c(10, 20, 15, 25, 30, 12, 22, 17, 27, 32, 14, 24, 19, 29, 34),
  y1     = c(100, 150, 120, 180, 200, 110, 160, 130, 190, 210, 120, 170, 140, 200, 220)
)
malmquist(panel, period = "Period", inputs = 3, outputs = 4,
  rts = "crs", type1 = "cont", type2 = "fgnz")
#> # A tibble: 10 × 7
#>    Period DMU      mi    ec    tc  pech  sech
#>    <chr>  <chr> <dbl> <dbl> <dbl> <dbl> <dbl>
#>  1 1~2    DMU1  0.917  1    0.917    NA    NA
#>  2 1~2    DMU2  0.970  1.06 0.917    NA    NA
#>  3 1~2    DMU3  0.956  1.04 0.917    NA    NA
#>  4 1~2    DMU4  0.977  1.07 0.917    NA    NA
#>  5 1~2    DMU5  0.984  1.07 0.917    NA    NA
#>  6 2~3    DMU1  0.935  1    0.935    NA    NA
#>  7 2~3    DMU2  0.974  1.04 0.935    NA    NA
#>  8 2~3    DMU3  0.964  1.03 0.935    NA    NA
#>  9 2~3    DMU4  0.980  1.05 0.935    NA    NA
#> 10 2~3    DMU5  0.986  1.05 0.935    NA    NA