python DEA: 基于非径向距离NDDF的Malmquist-Luenberger 指数及其分解

点赞发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 = (
            
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值