# This file contains types and structures for technical DEA model """ AbstractTechnicaDEAlModel An abstract type representing a technical DEA model. """ abstract type AbstractTechnicalDEAModel <: AbstractDEAModel end """ efficiency(model::AbstractTechnicalDEAModel) Return efficiency scores of a technical DEA model. # Examples ```jldoctest julia> X = [5 13; 16 12; 16 26; 17 15; 18 14; 23 6; 25 10; 27 22; 37 14; 42 25; 5 17]; julia> Y = [12; 14; 25; 26; 8; 9; 27; 30; 31; 26; 12]; julia> deaio = dea(X, Y); julia> efficiency(deaio) 11-element Vector{Float64}: 1.0 0.6222896790980051 0.8198562443845464 1.0 ⋮ 0.7576690895651103 0.8201058201058201 0.49056603773584917 1.0 ``` """ efficiency(model::AbstractTechnicalDEAModel) = model.eff """ slacks(model::AbstractTechnicalDEAModel, slack::Symbol) Return slacks of a technical DEA model. # Examples ```jldoctest julia> X = [5 13; 16 12; 16 26; 17 15; 18 14; 23 6; 25 10; 27 22; 37 14; 42 25; 5 17]; julia> Y = [12; 14; 25; 26; 8; 9; 27; 30; 31; 26; 12]; julia> deaio = dea(X, Y); julia> slacks(deaio, :X) 11×2 Matrix{Float64}: 0.0 0.0 -4.41868e-15 0.0 0.0 8.17926e-15 -8.03397e-16 0.0 ⋮ 1.60679e-15 0.0 1.64021 0.0 9.68683e-15 0.0 0.0 4.0 julia> slacks(deaio, :Y) 11×1 Matrix{Float64}: 0.0 0.0 0.0 0.0 ⋮ 0.0 0.0 0.0 0.0 ``` """ function slacks(model::AbstractTechnicalDEAModel, slack::Symbol)::Matrix if slack == :X return model.slackX elseif slack == :Y return model.slackY end throw(ArgumentError("`slack` must be :X or :Y")); end """ targets(model::AbstractTechnicalDEAModel, target::Symbol) Return targets of a technical DEA model. # Examples ```jldoctest julia> X = [5 13; 16 12; 16 26; 17 15; 18 14; 23 6; 25 10; 27 22; 37 14; 42 25; 5 17]; julia> Y = [12; 14; 25; 26; 8; 9; 27; 30; 31; 26; 12]; julia> deaio = dea(X, Y); julia> targets(deaio, :X) 11×2 Matrix{Float64}: 5.0 13.0 9.95663 7.46748 13.1177 21.3163 17.0 15.0 ⋮ 20.4571 16.6687 28.7037 11.4815 20.6038 12.2642 5.0 13.0 julia> targets(deaio, :Y) 11×1 Matrix{Float64}: 12.0 14.0 25.0 26.0 ⋮ 30.0 31.0 26.0 12.0 ``` """ function targets(model::AbstractTechnicalDEAModel, target::Symbol)::Matrix if target == :X return model.Xtarget elseif target == :Y return model.Ytarget end throw(ArgumentError("`target` must be :X or :Y")); end