本人在网上找了许久终于找到了一份免费分享的非期望产出超效率super-sbm模型。本着共享的原则将其分享出来,并在原版基础上加了一些注释修改,希望能帮助到有需要的人。
%非期望产出超效率SBM模型matlab脚本代码
%原始出处:微信公众号:DEA小白入门
%操作过程:
%1.运行前在工作区里建立投入指标数据矩阵X,期望产出指标数据矩阵Y,非期望产出指标数据矩阵Z.
%注意数据矩阵格式为:指标数行x样本数列。
%2.点击工具栏“运行”,运行结束后工作区生成的theta变量,即为所求的效率;
%3.再次运行前,依次执行clc,clear清空命令行和工作区,再进行第一步操作。
[m,n]=size(X); %m为投入指标数,n是样本数
s=size(Y,1); %s为期望产出数
q=size(Z,1); %q为非期望产出数
D=1./(m*X'); %目标函数的分母
E=1./((s+q)*Y');%等式约束期望产出的分母
F=1./((s+q)*Z');%等式约束非期望产出的分母
LB=zeros(n+m+s+q+1,1);UB=[];
theta=zeros(n,1);
for i=1:n
f1=[zeros(1,n) -D(i,:) zeros(1,s+q) 1];
A1=[];b1=[];
Aeq1=[X eye(m) zeros(m,s+q) -X(:,i)
Y zeros(s,m) -eye(s) zeros(s,q) -Y(:,i)
Z zeros(q,m) zeros(q,s) eye(q) -Z(:,i)
zeros(1,n+m) E(i,:) F(i,:) 1];
beq1=[zeros(m,1)
zeros(s,1)
zeros(q,1)
1];
[w1(:,i) theta(i)]=linprog(f1,A1,b1,Aeq1,beq1,LB,UB);
if abs(theta(i)-1)<0.00001
f=[zeros(1,n) D(i,:) zeros(1,s+q) 1];
A=[[X(:,1:i-1),zeros(m,1),X(:,i+1:n)] -eye(m) zeros(m,s+q) -X(:,i)
- [Y(:,1:i-1),zeros(s,1),Y(:,i+1:n)] zeros(s,m) -eye(s) zeros(s,q) Y(:,i)
[Z(:,1:i-1),zeros(q,1),Z(:,i+1:n)] zeros(q,m+s) -eye(q) -Z(:,i)];
b=zeros(m+s+q,1);
Aeq=[zeros(1,n+m) -E(i,:) -F(i,:) 1];
beq=1;
[w(:,i) theta(i)]=linprog(f,A,b,Aeq,beq,LB,UB);
end
end
theta;%效率值