Functions for the cross-efficiency analysis of a DEA problem: the
cross-efficiency matrix itself (compute_cross_efficiency), the
benevolent multiplier weights used to build it
(compute_cross_efficiency_weights), and a helper to put those weights on a
common scale (standardize_weights).
Arguments
- x
A
dea_dataobject, or a data frame coerced byas_dea_data.- approach
Secondary goal:
"benevolent"(maximise others' weighted output) or"aggressive"(minimise it).- epsilon
Lower bound applied to every multiplier weight. The default
0reproduces the plain model (weights may be zero); set a small positive value (e.g.1e-6) to enforce strictly positive, non-Archimedean weights.- normalize
Logical; if
TRUE(default) inputs and outputs are max-normalised column-wise before solving, so the returned weights are on a comparable scale (useful for plotting).- weights
A list with
input_weightsandoutput_weightsmatrices, such as the result ofcompute_cross_efficiency_weights.
Value
compute_cross_efficiency returns an \(n \times n\) numeric
matrix whose entry [k, j] is the efficiency of DMU j evaluated
with the weights of DMU k (rows are rating units, columns are rated
units). Row and column names are the DMU labels.
compute_cross_efficiency_weights returns a list with matrices
input_weights and output_weights (one row per DMU, labelled).
standardize_weights returns a list of the same shape as
weights, row-standardised and rounded to 5 digits.
Functions
compute_cross_efficiency(): Compute the cross-efficiency matrix.compute_cross_efficiency_weights(): Secondary-goal multiplier weights for every DMU.standardize_weights(): Row-standardise a set of weights so that, within each DMU, the input weights sum to one and the output weights sum to one.
Secondary-goal model
Multiplier (weight) solutions in DEA are not unique, so cross-efficiency
requires a secondary goal to choose among a unit's optimal weights. For unit
\(o\) the model fixes the unit's own efficiency at its CRS score
\(\theta_o\) and then, among all weight vectors that keep it there,
optimises the total weighted output of the other units –
maximising it for the "benevolent" approach, minimising it for the
"aggressive" one. The unit's own efficiencies \(\theta_o\) and the
fall-back weights come from a single dea solve.
References
Doyle, J., & Green, R. (1994). Efficiency and cross-efficiency in DEA: Derivations, meanings and uses. Journal of the Operational Research Society, 45(5), 567–578. doi:10.1057/jors.1994.84
Doyle, J., & Green, R. (1994). Efficiency and cross-efficiency in DEA: Derivations, meanings and uses. Journal of the Operational Research Society, 45(5), 567–578. doi:10.1057/jors.1994.84
Doyle, J., & Green, R. (1994). Efficiency and cross-efficiency in DEA: Derivations, meanings and uses. Journal of the Operational Research Society, 45(5), 567–578. doi:10.1057/jors.1994.84
Examples
df <- data.frame(
dmu = c("A", "B", "C", "D"),
i_x1 = c(4, 7, 8, 4),
i_x2 = c(3, 3, 1, 2),
o_y = c(1, 1, 1, 1)
)
ce <- compute_cross_efficiency(df, approach = "benevolent")
round(ce, 3)
#> A B C D
#> A 1.00 0.571 0.5 1
#> B 0.75 0.632 1.0 1
#> C 0.75 0.632 1.0 1
#> D 0.75 0.632 1.0 1
colMeans(ce) # each unit's average cross-efficiency
#> A B C D
#> 0.8125000 0.6165414 0.8750000 1.0000000