# Directional Distance Function Models

Chambers, Chung and Fare (1996) introduced a measure of efficiency that projects observation $\left( {{\mathbf{x}_o,\mathbf{y}_{o}}} \right)$ in a pre-assigned direction $\mathbf{g}= {\left({-{\mathbf{g_{x}^-},\mathbf{g^{+}_y}}} \right)\neq\mathbf{0}_{m+s}}$, $\mathbf{g^{-}_{x}}\mathbb{\in R}^m$ and $\mathbf{g^{+}_{y}}\mathbb{\in R}^s$, in a proportion $\beta$. The associated linear program is:

\begin{aligned} & \underset{\beta ,\mathbf{\lambda }}{\mathop{\max }}\,\quad \quad \quad \quad \beta \\ & \text{subject}\ \text{to} \\ & \quad \quad \quad \quad \quad \ X\lambda\le {{\mathbf{x}}_{o}} -\beta{{\mathbf{g^-_x}}} \\ & \quad \quad \quad \quad \quad \ Y\mathbf{\lambda }\ge\ {{\mathbf{y}}_{o}}+\beta {{\mathbf{g^+_y}}} \\ & \quad \quad \quad \quad \quad \ \mathbf{\lambda }\ge \mathbf{0}.\\ & \quad \end{aligned}

The measurement of technical efficiency assuming variable returns to scale, VRS, adds the following condition:

$$$\sum\nolimits_{j=1}^{n}\lambda_j=1$$$

In this example we compute the directional distance function DEA model under constant returns to scale using ones as directions for both inputs and outputs:

using DataEnvelopmentAnalysis

X = [5 13; 16 12; 16 26; 17 15; 18 14; 23 6; 25 10; 27 22; 37 14; 42 25; 5 17];

Y = [12; 14; 25; 26; 8; 9; 27; 30; 31; 26; 12];

deaddf(X, Y, Gx = :Ones, Gy = :Ones)
Directional DF DEA Model
DMUs = 11; Inputs = 2; Outputs = 1
Returns to Scale = CRS
Gx = Ones; Gy = Ones
─────────────────────────────────────────────────────
efficiency       slackX1       slackX2  slackY1
─────────────────────────────────────────────────────
1   -3.43053e-16   0.0           0.0              0.0
2    3.21996      -3.21359e-15   0.0              0.0
3    2.12169       0.0          -4.80367e-15      0.0
4    0.0          -8.03397e-16   0.0              0.0
5    6.73567      -2.41019e-15   0.0              0.0
6    1.94595      10.9189        0.0              0.0
7    0.0           0.0           0.0              0.0
8    3.63586       6.42718e-15   0.0              0.0
9    1.83784       4.75676       0.0              0.0
10  10.2311        6.12173e-15   0.0              0.0
11   0.0           0.0           4.0              0.0
─────────────────────────────────────────────────────

To compute the variable returns to scale model, we simply set the rts parameter to :VRS:

deaddfvrs = deaddf(X, Y, Gx = :Ones, Gy = :Ones, rts = :VRS)
Directional DF DEA Model
DMUs = 11; Inputs = 2; Outputs = 1
Returns to Scale = VRS
Gx = Ones; Gy = Ones
────────────────────────────────────────────────────
efficiency       slackX1  slackX2      slackY1
────────────────────────────────────────────────────
1   -3.43053e-16   0.0              0.0  0.0
2    1.41887       0.0              0.0  7.41268e-15
3    0.0           0.0              0.0  0.0
4    0.0          -8.03397e-16      0.0  0.0
5    4.06792       0.0              0.0  0.0
6   -1.81673e-16   2.70127e-16      0.0  3.78178e-16
7    0.0           0.0              0.0  0.0
8    0.0           0.0              0.0  0.0
9    0.0           0.0              0.0  0.0
10   5.0           0.0              6.0  0.0
11   0.0           0.0              4.0  4.78849e-16
────────────────────────────────────────────────────

Estimated efficiency scores are returned with the efficiency function:

efficiency(deaddfvrs)
11-element Vector{Float64}:
-3.4305304041327586e-16
1.4188679245283022
0.0
0.0
4.067924528301886
-1.816728585750256e-16
0.0
0.0
0.0
5.000000000000003
0.0

The optimal peers, $λ$, are returned with the peers function and are returned as a DEAPeers object:

peers(deaddfvrs)
DEA Peers
1: 1 ( 1.0 )
2: 1 ( 0.4981132075471699 ) 6 ( 0.22830188679245278 ) 7 ( 0.2735849056603774 )
3: 3 ( 1.0 )
4: 4 ( 1.0 )
5: 1 ( 0.5132075471698113 ) 6 ( 0.4018867924528304 ) 7 ( 0.08490566037735842 )
6: 6 ( 1.0 )
7: 7 ( 1.0 )
8: 8 ( 1.0 )
9: 9 ( 1.0 )
10: 9 ( 1.0000000000000002 )
11: 1 ( 1.0 )


## Directional Distance Function Model in Multiplier Form

The dual to the directional distance function DEA model in envelopment form presented above is the multiplier form.

This example computes the directional distance function models DEA model in multiplier form under variable returns to scale:

ddfonesm = deaddfm(X, Y, Gx = :Ones, Gy = :Ones, rts = :VRS)
Directional DF DEA Model (Multiplier form)
DMUs = 11; Inputs = 2; Outputs = 1
Returns to Scale = VRS
Gx = Ones; Gy = Ones
─────────────────────────────────────────────────
efficiency         v1          v2        u1
─────────────────────────────────────────────────
1    0.0          0.705882   0.0         0.294118
2    1.41887      0.215094   0.622642    0.162264
3   -1.33227e-15  0.534247   0.00684932  0.458904
4   -1.77636e-15  0.417989   0.195767    0.386243
5    4.06792      0.215094   0.622642    0.162264
6    4.44089e-16  0.0        0.818182    0.181818
7   -1.77636e-15  0.268022   0.35305     0.378928
8    5.32907e-15  0.178082   0.136986    0.684932
9    0.0          0.0        0.5         0.5
10   5.0          0.0909091  0.0         0.909091
11   0.0          0.705882   0.0         0.294118
─────────────────────────────────────────────────

Input and output virtual multipliers (shadow prices) are returned with the multipliers function:

multipliers(ddfonesm, :X)
11×2 Matrix{Float64}:
0.705882   0.0
0.215094   0.622642
0.534247   0.00684932
0.417989   0.195767
0.215094   0.622642
0.0        0.818182
0.268022   0.35305
0.178082   0.136986
0.0        0.5
0.0909091  0.0
0.705882   0.0
multipliers(ddfonesm, :Y)
11×1 Matrix{Float64}:
0.29411764705882354
0.16226415094339627
0.4589041095890411
0.3862433862433863
0.16226415094339627
0.18181818181818193
0.3789279112754159
0.6849315068493145
0.4999999999999999
0.9090909090909107
0.29411764705882354

The value measuring the returns to scale is returned with the rts function:

rts(ddfonesm)
11-element Vector{Float64}:
0.0
-7.222641509433959
2.746575342465754
0.0
-7.222641509433959
-3.2727272727272703
0.0
12.72602739726025
8.499999999999993
24.81818181818191
0.0

DataEnvelopmentAnalysis.deaddfFunction
deaddf(X, Y; Gx, Gy)

Compute data envelopment analysis directional distance function model for inputs X and outputs Y, using directions Gx and Gy.

Direction specification:

The directions Gx and Gy can be one of the following symbols.

• :Zeros: use zeros.
• :Ones: use ones.
• :Observed: use observed values.
• :Mean: use column means.

Alternatively, a vector or matrix with the desired directions can be supplied.

Optional Arguments

• rts=:CRS: chooses constant returns to scale. For variable returns to scale choose :VRS.
• slack=true: computes input and output slacks.
• Xref=X: Identifies the reference set of inputs against which the units are evaluated.
• Yref=Y: Identifies the reference set of outputs against which the units are evaluated.
• names: a vector of strings with the names of the decision making units.
DataEnvelopmentAnalysis.deaddfmFunction
deaddfm(X, Y; Gx, Gy)

Compute data envelopment analysis directional distance function multiplier model for inputs X and outputs Y, using directions Gx and Gy.

Direction specification:

The directions Gx and Gy can be one of the following symbols.

• :Zeros: use zeros.
• :Ones: use ones.
• :Observed: use observed values.
• :Mean: use column means.

Alternatively, a vector or matrix with the desired directions can be supplied.

Optional Arguments

• rts=:CRS: chooses constant returns to scale. For variable returns to scale choose :VRS.
• Xref=X: Identifies the reference set of inputs against which the units are evaluated.
• Yref=Y: Identifies the reference set of outputs against which the units are evaluated.
• names: a vector of strings with the names of the decision making units.