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