상대비교 행렬값을 입력받는다.
m2 <- c(1, 3, 7, 3, 1,
1/3, 1, 5, 1/3, 1,
1/7, 1/5, 1, 3, 1/5,
1/3, 3, 1/3, 1, 1/3,
1, 1, 5, 3, 1)
m3 <- matrix(m2, ncol = 5, byrow = TRUE)
m3
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1.0000000 3.0 7.0000000 3.0000000 1.0000000
## [2,] 0.3333333 1.0 5.0000000 0.3333333 1.0000000
## [3,] 0.1428571 0.2 1.0000000 3.0000000 0.2000000
## [4,] 0.3333333 3.0 0.3333333 1.0000000 0.3333333
## [5,] 1.0000000 1.0 5.0000000 3.0000000 1.0000000
Eigenvale 값을 구한다. 무한소수의 유동성 문제 등으로 인해 복소수가 나온다.
eigen(m3)$value
## [1] 6.4466860+0.000000i -0.8355917+2.962045i -0.8355917-2.962045i
## [4] 0.1122487+0.465817i 0.1122487-0.465817i
실수부만 띠어서 lamda_max값을 구한다.
lamda_max <- max(Re(eigen(m3)$value))
lamda_max
## [1] 6.446686
일관성지수(CI)값을 구한다. 상태가 과히 좋진 않다.
ci <- (lamda_max - 5)/(5 - 1)
ci
## [1] 0.3616715
Eigenvector 값을 구한다. 역시 무한소수의 유동성 문제 등으로 인해 복소수가 나온다.
eigen(m3)$vectors
## [,1] [,2] [,3]
## [1,] -0.6974661+0i 0.3571518-0.0220871i 0.3571518+0.0220871i
## [2,] -0.3422714+0i 0.5719126+0.0000000i 0.5719126+0.0000000i
## [3,] -0.2022489+0i -0.2600589+0.3255506i -0.2600589-0.3255506i
## [4,] -0.2759289+0i -0.2313500-0.4702693i -0.2313500+0.4702693i
## [5,] -0.5285358+0i 0.2085626+0.2303964i 0.2085626-0.2303964i
## [,4] [,5]
## [1,] -0.69873304+0.00000000i -0.69873304+0.00000000i
## [2,] 0.07062935-0.05809155i 0.07062935+0.05809155i
## [3,] 0.05604722-0.12112794i 0.05604722+0.12112794i
## [4,] 0.03714336+0.00246660i 0.03714336-0.00246660i
## [5,] -0.09534748+0.68928868i -0.09534748-0.68928868i
lamda_max값에 해당하는 맨 첫 벡터만 사용한다.
weight <- Re(eigen(m3)$vectors)[,1]*-1
weight
## [1] 0.6974661 0.3422714 0.2022489 0.2759289 0.5285358
가중치의 합이 1이 되도록 표준화한다.
weight_fin <- weight / sum(weight)
weight_fin
## [1] 0.34081738 0.16725123 0.09882908 0.13483287 0.25826945
sum(weight_fin)
## [1] 1