点赞发Nature
关注中Science
Malmquist-Lenberger指数(ML指数)是距离函数与DEA计算中常用的指数,ML指数可以进一步分解为技术进步technological progress和效率改善effeciency change. 技术进步常被当做增长模型中的全要素生产率,用到许多计量经济研究中,探讨影响技术进步的环境变量。这里我分享一个考虑非期望产出下的NDDF方法计算ML指数。
该ML指数为普通ML index(区别于global ML和sequential ML)
注:
- 普通 ML index用当期投入产出做production frontier,
- global ML用全部投入产出做production frontier
- sequential ML用计算ML index的两期做投入产出的production frontier
import numpy as np
import pandas as pd
import pulp
class ML_index:
"""
Help on class DEAProblem
ML_index(inputs, outputs, bad_outs, weight_vector, directional_factor=None, returns='CRS',
in_weights=[0, None], out_weights=[0, None],badout_weights=[0, None])
DEAProblem solves DEA model using directional distance function.
Parameters:
inputs: input data, DataFrame data
outputs: output data, DataFrame data
bad_outs: undesirable output data, DataFrame data
weight_vector: weights for individual inputs and outputs. List data
"""
def __init__(
self,
inputs_1,
outputs_1,
bad_outs_1,
inputs_2,
outputs_2,
bad_outs_2,
weight_vector,
directional_factor=None,
returns="CRS",
disp="weak disposability",
in_weights=[0, None],
out_weights=[0, None],
badout_weights=[0, None],
):
self.inputs_1 = inputs_1
self.outputs_1 = outputs_1
self.bad_outs_1 = bad_outs_1
self.inputs_2 = inputs_2
self.outputs_2 = outputs_2
self.bad_outs_2 = bad_outs_2
self.returns = returns
self.weight_vector = (
weight_vector # weight vector in directional distance function
)
self.disp = disp
self.J, self.I = self.inputs_1.shape # no of DMUs, inputs
_, self.R = self.outputs_1.shape # no of outputs
_, self.S = self.bad_outs_1.shape # no of bad outputs
self._i = range(self.I) # inputs
self._r = range(self.R) # outputs
self._s = range(self.S) # bad_output
self._j = range(self.J) # DMUs
if directional_factor == None:
pass
else:
self.gx = directional_factor[: self.I]
self.gy = directional_factor[self.I : (self.I + self.J)]
self.gy = directional_factor[(self.I + self.J) :]
self._in_weights = in_weights # input weight restrictions
self._out_weights = out_weights # output weight restrictions
self._badout_weights = badout_weights # bad output weight restrictions
# creates dictionary of pulp.LpProblem objects for the DMUs
self.dmus = self.solve_problems()
def solve_problems(self):
"""
Iterate over the DMU and create a dictionary of LP problems, one
for each DMU.
"""
dmu_dict_ddf11 = {
}
dmu_dict_ddf22 = {
}
dmu_dict_ddf12 = (