stata:数据包络分析(DEA)简明教程

数据包络分析(DEA)是是由美国著名运筹学家 A.Charnes(查恩斯)、W.W.Cooper(库铂)、E.Rhodes(罗兹)于 1978 年首先提出,在相对效率评价概念基础上发展起来的一种非参数检验方法。此文章主要介绍如何在stata中进行DEA分析以及进行boostrap检验,用到的命令为tenonradialteradialbc等。需要说明的是,尽管此命令的运算速度与矩阵的最大处理量要优于dea命令,但是其仍有一些限制。

DEA模型简介

技术效率的概念

在数据包络分析中,技术效率是指一个生产单元(DMU)的生产水平达到该行业技术水平的程度。技术效率可以从投入和产出两个角度来衡量,在投入既定的情况下,技术效率由产出最大化的程度来衡量。在产出既定的情况下,技术效率由投入最小化的程度来衡量。当然,在计算TFP的过程中,一般都是投入既定的。
下面举一个一种投入一种产出时的例子,来帮助我们理解技术效率的概念。

单位 x x x(投入) y y y(产出) y / x y/x y/x y / x y/x y/x(标准化)
A 2 1 0.5 0.625
B 3 2 0.667 0.533
C 4 3 0.75 0.938
D 5 4 0.8 1.00
E 5 2 0.4 0.5

在此表中, y / x y/x y/x反应各个生产单元技术效率的高低, y / x y/x y/x(标准化)是将各单元的 y / x y/x y/x除以其中的最大值。这样就是为了更好的比较这一数值。
当涉及多个产出时,就会对各个投入与产出赋予一定的权重,然后分别加权,计算产出投入比。如:
v = v 1 x 1 + v 2 x 2 + . . . + v n x n v = v_1x_1+v_2x_2+...+v_nx_n v=v1x1+v2x2+...+vnxn
u = u 1 y 1 + u 2 y 2 + . . . + u n y n u=u_1y_1+u_2y_2+...+u_ny_n u=u1y1+u2y2+...+unyn
则产出投入比为 u / v u/v u/v
数据包络分析就是在讨论如何通过数据本身来获得权重,从而计算各个DMU的技术效率。

径向距离模型

此命令径向效率的度量方法采用的是Debreu–Farrell(Debreu 1951; Farrell 1957)方法。假设有 k k k D M U DMU DMU。对于 D M U K DMU_K DMUK,有 N N N种投入,记为 x k = ( x k 1 , . . . , x k N ) ∈ R N x_k =(x_{k1},...,x_{kN}) \in R^N xk=xk1,...,xkN)RN,有 M M M种产出,记为 y k = ( x k 1 , . . . , x k M ) ∈ R M y_k =(x_{k1},...,x_{kM}) \in R^M yk=xk1,...,xkM)RM。然后我们假设在技术条件 T T T下产出 y y y由投入 x x x产出,数学表达为:
T = { ( x , y ) : y   a r e   p r o d u c i b l e   b y   x } T = \{(x,y):y\ are\ producible\ by\ x\} T={(x,y):y are producible by x}
那么在科技 T T T下,生产可能集表示为:
P ( x ) = { y : ( x , y ) ∈ T } P(x) = \{y:(x,y) \in T\} P(x)={y:(x,y)T}
投入的需求集表示为:
P ( y ) = { x : ( x , y ) ∈ T } P(y) = \{x:(x,y) \in T\} P(y)={x:(x,y)T}
以生产可能集为例,技术效率就表示为,某个给定数据点与生产可能集边界的距离。若以DEA模型来测量此种技术效率从,则对于 k k k D M U DMU DMU,每个 D M U DMU DMU N N N种投入, M M M种产出的数据集来说。Debreu–Farrell(Debreu 1951; Farrell 1957)的以产出为导向的估计方法,可以通过下述线性规的方程式来表示,对于每一个数据点 k ( k = 1 , 2 , 3... K ) k(k= 1,2,3...K) k(k=1,2,3...K)
F k o ( y k , x k , y , x ∣ C R S ) = m a x θ s . t . ∑ k = 1 K z k y k m ≥ y k m θ m , m = 1 , . . . , M ∑ k = 1 K z k x k n ≤ x k n θ n , n = 1 , . . . , N z k ≥ 0 F_k^o(y_k,x_k,y,x|CRS)=max\theta \\ s.t. \sum_{k=1}^Kz_ky_{km} \geq y_{km}\theta_m,m=1,...,M \\ \sum_{k=1}^Kz_kx_{kn} \leq x_{kn}\theta_n,n=1,...,N \\ z_k \geq 0 Fko(yk,xk,y,xCRS)=maxθs.t.k=1Kzkykmykmθm,m=1,...,Mk=1Kzkxknxknθn,n=1,...,Nzk0
其中 y y y是一个 K × M K\times M K×M的产出矩阵, x x x是一个 K × N K\times N K×N的投入矩阵。估计 P ( x ) P(x) P(x)是最小的包围面(smallest convex free-disposal hull )。上述线性规划求解的是规模报酬不变(CRS)的技术效率。在其他关于规模报酬的假设下,只需改变 z k z_k zk的约束,例如规模报酬可变(VRS),设置 ∑ k = 1 K z k = 1 \sum_{k=1}^Kz_k=1 k=1Kzk=1即可。

非径向效率模型

此命令的非径向效率测量方法是Russell(Färe and Lovell 1978;
Färe, Grosskopf, and Lovell 1994a)法。则对于以产出为导向的非径向量度定义为:
R M k o ( y K , x K , y , x ∣ C R S ) = m a x { M − 1 ∑ m = 1 M θ m : ( θ 1 y k 1 , . . . , θ m y k m ∈ P ( x ) , θ m ≥ 0 , m = 1 , . . . M ) } RM_k^o(y_K,x_K,y,x|CRS)=max \{M^{-1}\sum_{m=1}^M \theta_m: (\theta_1y_{k1},...,\theta_my_{km}\in P(x),\theta_m\geq0,m=1,...M)\} RMko(yK,xK,y,xCRS)=max{M1m=1Mθm:(θ1yk1,...,θmykmP(x),θm0,m=1,...M)}
其线性规划方程式定义为:
R M k o ( y K , x K , y , x ∣ C R S ) = M − 1 m a x ∑ m = 1 M θ m s . t . ∑ k = 1 K z k y k m ≥ y k m θ m , m = 1 , . . . , M ∑ k = 1 K z k x k n ≤ x k n θ n , n = 1 , . . . , N z k ≥ 0 RM_k^o(y_K,x_K,y,x|CRS)=M^{-1}max\sum_{m=1}^M \theta_m \\ s.t. \sum_{k=1}^Kz_ky_{km} \geq y_{km}\theta_m,m=1,...,M \\ \sum_{k=1}^Kz_kx_{kn} \leq x_{kn}\theta_n,n=1,...,N \\ z_k \geq 0 RMko(yK,xK,y,xCRS)=M1maxm=1Mθms.t.k=1Kzkykmykmθm,m=1,...,Mk=1Kzkxknxknθn,n=1,...,Nzk0

对径向模型使用Boostrap进行假设检验

主要介绍此命令规模收益的两个假设检验,首先是:
T e s t ≠ 1 : H 0 : T   i s   g l o b a l l y   C R S H 1 : T   i s   V R S Test \neq 1: H_0: T\ is\ globally\ CRS \\ H_1: T\ is\ VRS Test=1:H0:T is globally CRSH1:T is VRS
如果假设 H 0 H_0 H0被拒绝,则可以进行下述假设检验:
T e s t ≠ 2 : H 0 ′ : T   i s   g l o b a l l y   N I R S H 1 : T   i s   V R S Test \neq 2: H_0': T\ is\ globally\ NIRS \\ H_1: T\ is\ VRS Test=2:H0:T is globally NIRSH1:T is VRS
也是就是说先查看此技术条件下是否是规模报酬不变的,若不是再看是否是NIRS(Non-Decreasing Returns to scale)的。

stata命令的实现

tenonradial命令

tenonradial使用非径向模型RM估计技术效率,语法详情:
tenonradial outputs = inputs [(ref outputs = ref inputs)] [if] [in] [,rts(rtsassumption) base(basetype) reference(varname) tename(newvar) noprint]
其中
output是产出变量
input是投入变量
ref outputs是产出变量的个数
ref inputs是投入变量的个数
rts(rtsassumption)指定规模收益假设,有CRS,VRS,NIRS三种
base(basetype) 设置最优化的方向,即面向产出base(output),面向投入base(input)
reference(varname)设定技术参考集
tename(newvar)产生newvar,其包含非径向测量的技术效率。
noprint 取消估算详细信息,数据描述和参考集。

teradialbc命令

teradialbc命令使用径向模型估计技术效率,语法详情:
teradialbc outputs = inputs [(ref outputs = ref inputs)] [if] [in] [,rts(rtsassumption)base(basetype) reference(varname) subsampling kappa(#) smoothed heterogeneous reps(#) level(#) tename(newvar) tebc(newvar) biasboot(newvar) varboot(newvar) biassqva(newvar)telower(newvar) teupper(newvar) noprint nodots]
其区别主要在于Boostrap部分,详细内容参见help teradialbc

teradialbc命令的函数支持

stata需要已下载kdens bw()mm quantile()

nptestind命令

nptestind进行独立性检验

nptestrts命令

nptestrts进行规模收益检验

实例应用

数据来源于Charnes, Cooper, and Rhodes (1981),并人为的产生一个新变量dref来说明新命令的功能

set seed 717117
use ccr81
generate dref = x5 != 10
teradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(crs) base(output) reference(dref) tename(TErdCRSo)
teradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(nirs) base(output) reference(dref) tename(TErdNRSo) noprint
teradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(vrs) base(output) reference(dref) tename(TErdVRSo) noprint
tenonradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(crs) base(output) reference(dref) tename(TEnrCRSo) noprint
tenonradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(nirs) base(output) reference(dref) tename(TEnrNRSo) noprint
tenonradial y1 y2 y3 = x1 x2 x3 x4 x5, rts(vrs) base(output) reference(dref) tename(TEnrVRSo) noprint
list TErdCRSo TErdNRSo TErdVRSo TEnrCRSo TEnrNRSo TEnrVRSo in 1/7

分别使用径向与非径向模型测量三种规模收益状况下的技术效率。
接下来使用nptestind进行boostrap检验

matrix testsindpv = J(2, 3, .)
matrix colnames testsindpv = CRS NiRS VRS 
matrix rownames testsindpv = output-based input-based
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(crs) base(output) reps(999) alpha(0.05)
matrix testsindpv[1,1] = e(pvalue)
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(nirs) base(output) reps(999) alpha(0.05) noprint
matrix testsindpv[1,2] = e(pvalue)
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(vrs) base(output) reps(999) alpha(0.05) noprint
matrix testsindpv[1,3] = e(pvalue)
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(crs) base(input) reps(999) alpha(0.05) noprint
matrix testsindpv[2,1] = e(pvalue)
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(nirs) base(input) reps(999) alpha(0.05) noprint
matrix testsindpv[2,2] = e(pvalue)
nptestind y1 y2 y3 = x1 x2 x3 x4 x5, rts(vrs) base(input) reps(999) alpha(0.05) noprint
matrix testsindpv[2,3] = e(pvalue)
matrix list testsindpv

P值结果如下:


                    CRS       NiRS        VRS
output-based  .06906907  .25625626  .04804805
 input-based  .03703704    .001001  .23323323

Malmquist指数

Malmquist指数的计算与分解公式此处不再列出,只是用程序来举例

use pwt56, clear
reshape wide y k l, i(nu country) j(year)
teradial y1965 = k1965 l1965 (y1965 = k1965 l1965), rts(crs) base(output) tename(F11) noprint
teradial y1990 = k1990 l1990 (y1965 = k1965 l1965), rts(crs) base(output) tename(F21) noprint
teradial y1965 = k1965 l1965 (y1990 = k1990 l1990), rts(crs) base(output) tename(F12) noprint
teradial y1990 = k1990 l1990 (y1990 = k1990 l1990), rts(crs) base(output) tename(F22) noprint
generate mpi = sqrt(F12 / F22 * F22 / F21)
generate effch = F11 / F22
generate techch = mpi / effch

PS:文章中所用到的学习资料为《数据包络分析方法与MaxDea软件》与文章“Nonparametric frontier analysis using Stata
”,此资料可在我的公众号“肖夕木的自习室”中回复dea获取。至于文中的数据文件可以自行在stata上下载,当然,在我的dea学习资料中也有包含。

你可能感兴趣的:(stata,dea,计量,经验分享)