R의 DEA패키지에서 output저장 및 활용 방법 예제입니다. DEA의 분석 방법에 대해서가 아니라, 단순히 output 확인 및 저장에 대해서만 말씀드립니다.

DEA예제는 Benchmarking 패키지의 dea 명령문 예제를 활용했습니다.

https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CBwQFjAA&url=http%3A%2F%2Fcran.r-project.org%2Fweb%2Fpackages%2FBenchmarking%2FBenchmarking.pdf&ei=84lJVdfPK4WymAXozoCwAw&usg=AFQjCNF2t3a9ofDh8A9SQIU_pfwo4ExsUw&sig2=qdaa9g1tNX8_T9HYrtlz6Q&bvm=bv.92291466,d.dGY

아래는 해당 문서 14페이지에 나오는 DEA 예제입니다.

library("Benchmarking")
## Warning: package 'Benchmarking' was built under R version 3.1.3
## Loading required package: lpSolveAPI
## Warning: package 'lpSolveAPI' was built under R version 3.1.3
## Loading required package: ucminf
## Warning: package 'ucminf' was built under R version 3.1.3
x <- matrix(c(100,200,300,500,100,200,600),ncol=1)
y <- matrix(c(75,100,300,400,25,50,400),ncol=1)

dea.plot.frontier(x,y,txt=TRUE) ##DEA plot을 그린다. 

e <- dea(x,y) ##DEA 결과를 e라는 리스트 형식의 객체에 저장한다. 

DEA 분석 결과 및 다양한 변수가 e라는 리스트 형식의 객체에 저장됩니다. e라는 리스트는 다수의 변수, 벡터, 데이터프레임의 집합입니다. 이제 e라는 리스트에 어떠한 객체가 저장되어있는지 확인합니다. ls명령어를 사용합니다.

ls(e)
##  [1] "dual"        "eff"         "gamma"       "lambda"      "objval"     
##  [6] "ORIENTATION" "param"       "primal"      "RTS"         "TRANSPOSE"  
## [11] "ux"          "vy"

리스트 형식의 객체 e에는 dual 부터 vy까지, 서로 다른 12개 데이터가 상이한 형식으로 저장되어 있습니다. 개별적으로 이들을 호출할 때는 $를 붙이면 됩니다. 예를 들어 DEA결과의 lambda를 호출하고 싶으면 이렇게 하면 됩니다.

e$lambda
##             L1 L2        L3 L4 L5 L6 L7
## [1,] 1.0000000  0 0.0000000  0  0  0  0
## [2,] 0.8888889  0 0.1111111  0  0  0  0
## [3,] 0.0000000  0 1.0000000  0  0  0  0
## [4,] 0.0000000  0 0.0000000  1  0  0  0
## [5,] 1.0000000  0 0.0000000  0  0  0  0
## [6,] 1.0000000  0 0.0000000  0  0  0  0
## [7,] 0.0000000  0 0.0000000  1  0  0  0

이를 데이터 프레임 형식으로 새로운 객체 lambda.df에 저장하고 싶다면 as.data.frame을 쓰시고, 새로운 객체를 생성하시면 됩니다.

lambda.df<-as.data.frame(e$lambda)
mode(lambda.df) ##데이터프레임은 리스트로 속성이 표시됨
## [1] "list"
lambda.df
##          L1 L2        L3 L4 L5 L6 L7
## 1 1.0000000  0 0.0000000  0  0  0  0
## 2 0.8888889  0 0.1111111  0  0  0  0
## 3 0.0000000  0 1.0000000  0  0  0  0
## 4 0.0000000  0 0.0000000  1  0  0  0
## 5 1.0000000  0 0.0000000  0  0  0  0
## 6 1.0000000  0 0.0000000  0  0  0  0
## 7 0.0000000  0 0.0000000  1  0  0  0

이를 행렬 형식의 새로운 객체 lambda.m에 저장하고 싶다면 as.matrix를 쓰시면 됩니다.

lambda.m<-as.matrix(e$lambda)
mode(lambda.m) ##행렬은 numeric으로 표시됨
## [1] "numeric"
lambda.m
##             L1 L2        L3 L4 L5 L6 L7
## [1,] 1.0000000  0 0.0000000  0  0  0  0
## [2,] 0.8888889  0 0.1111111  0  0  0  0
## [3,] 0.0000000  0 1.0000000  0  0  0  0
## [4,] 0.0000000  0 0.0000000  1  0  0  0
## [5,] 1.0000000  0 0.0000000  0  0  0  0
## [6,] 1.0000000  0 0.0000000  0  0  0  0
## [7,] 0.0000000  0 0.0000000  1  0  0  0