상대비교 행렬값을 입력받는다.

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