$Title Chapter 7 (Fig. 7.1) $Title Mathematical formulation for MPI (Malmquist Productivity Index) and the corresponding GAMS code $onText If using this code, please cite: --------------------------------------------------------------------------------- Emrouznejad, A., P. Petridis, and V. Charles (2023). Data Envelopment Analysis with GAMS: A Handbook on Productivity Analysis, and Performance Measurement, Springer, ISBN: 978-3-031-30700-3. --------------------------------------------------------------------------------- Website: https://dataenvelopment.com/GAMS/ $offText Sets j DMUs /DMU1*DMU6/ t years /Y2007, Y2008/ g Inputs and Outputs /IN1, IN2, OUT1, OUT2/ i(g) Inputs /IN1, IN2/ r(g) Outputs /OUT1, OUT2/; alias(jj,j); Table Data(j,t,g) Data for inputs and outputs IN1 IN2 OUT1 OUT2 DMU1.Y2007 15 2 14 3.5 DMU2.Y2007 40 7 14 21 DMU3.Y2007 32 12 42 10.5 DMU4.Y2007 52 20 28 42 DMU5.Y2007 35 12 19 30 DMU6.Y2007 32 7 14 38 DMU1.Y2008 10 1.5 17 2.5 DMU2.Y2008 45 5.6 16 22 DMU3.Y2008 35 11 40 10 DMU4.Y2008 50 27 28 30 DMU5.Y2008 30 14 19 25 DMU6.Y2008 38 9 13 12 ; Variables theta1 � for D1 model theta2 � for D2 model theta3 � for D3 model theta4 � for D4 model; Nonnegative variables l(j) dual weights (Lambda values); Parameters DMU_data(g,t) slice of data D_1(j) calculated efficiency for mixed period t+1 and t D_2(j) calculated efficiency for mixed period t and t+1 D_3(j) calculated efficiency for period t D_4(j) calculated efficiency for period t+1 max_t max period of time Deff(j) Efficiency change for each DMU Dtech(j) Technical efficiency change for each DMU MPI(j) Malmquist Productivity Index for each DMU; max_t = SMAX(t,ORD(t)); Equations CON1(i,t) Input constraint for D1 model CON2(r,t) Output constraints for D1 model CON3(i,t) Input constraint for D2 model CON4(r,t) Output constraints for D2 model CON5(i,t) Input constraint for D3 model CON6(r,t) Output constraints for D3 model CON7(i,t) Input constraint for D4 model CON8(r,t) Output constraints for D4 model; CON1(i,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t+1,i))=L=theta1*DMU_data(i,t); CON2(r,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t+1,r))=G=DMU_data(r,t); CON3(i,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t,i))=L=theta2*DMU_data(i,t+1); CON4(r,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t,r))=G=DMU_data(r,t+1); CON5(i,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t,i))=L=theta3*DMU_data(i,t); CON6(r,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t,r))=G=DMU_data(r,t); CON7(i,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t+1,i))=L=theta4*DMU_data(i,t+1); CON8(r,t)$(ORD(t)<max_t).. SUM(j, l(j)*Data(j,t+1,r))=G=DMU_data(r,t+1); model D1 /CON1, CON2/; model D2 /CON3, CON4/; model D3 /CON5, CON6/; model D4 /CON7, CON8/; loop(jj, DMU_data(g,t) = Data(jj,t,g); solve D1 using LP minimizing theta1; D_1(jj) = theta1.l; solve D2 using LP minimizing theta2; D_2(jj) = theta2.l; solve D3 using LP minimizing theta3; D_3(jj) = theta3.l; solve D4 using LP minimizing theta4; D_4(jj) = theta4.l; Deff(jj) = D_4(jj)/D_3(jj); Dtech(jj) = ((D_2(jj)/D_4(jj))*(D_3(jj)/D_1(jj)))**(0.5); MPI(jj) = Deff(jj)*Dtech(jj); ); Display D_1,D_2,D_3,D_4, Deff, Dtech, MPI; execute_unload