使用ahpsurvey在R中创建成对比较矩阵以进行进一步分析

sdnqo3pr  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(125)

我想使用ahpsurvey在R中执行层次分析。
我将使用下表作为我的数据集的一个例子。
| 地点|Var1|
| --------------|--------------|
| A|八|
| B|三|
| C|七|
| D|六|
| E|四个|
这是我想加入的Satty评级:
| 评级|解释|
| --------------|--------------|
| 九分之一|首选的特征绝对不那么重要|
| 1/7|优选的特征是非常不重要的|
| 五分之一|首选特征的重要性略低|
| 三分之一|首选的特征稍微不那么重要|
| 1|两个特点同样重要|
| 三|首选的特征稍微重要一些|
| 五|首选特征的重要性适中|
| 七|优选的特征强烈地更重要|
| 九|首选的特征绝对更重要|
第三步。这就是我被卡住的地方。我想创建一个循环来比较变量的值,使用上面的Satty排名进行评级。

num_alternatives <- length(location)
  
mat <- matrix(0, nrow = num_alternatives, ncol = num_alternatives)

colnames(comparison_matrix) <- location
rownames(comparison_matrix) <- location 
  
#making comparisons between the value of Var1 of location A and the others
   
  x_dta$a_diff <- 8 - x_dta$Var1
  x_dta$a_diff <- as.character(x_dta$a_diff)
  
  #assigned Satty ranking to the differences 
  diff_lookup <- c(`0` = 1, `5` = 7, `1` = 3, `2` = 5, `4` =7) 
  
  #location A comparison with other locations.
  mat["A","B"] <- 7 
  mat["A","C"] <- 3
  mat["A","D"] <- 5 
  mat["A","E"] <- 7

#followed the same process until I had a full matrix. The problem is that I have over 100 locations in my dataset and filling the matrix one by one is time consuming.
3zwjbxry

3zwjbxry1#

生成100个位置名称

(location <- apply(expand.grid(LETTERS, LETTERS), 1, function(x) paste0(x, collapse = ""))[1:100])

这很重要。现在你应该决定你的变量范围。Saaty的尺度只有9个值,因此位置的变量值的差异必须只有4个等级。您必须将差异聚合到9个类中,或将初始值聚合到4个类中。在你的例子中,我看到最小值是3,最大值是8。你没有5-s。但如果你有他们,你会得到可能的差异
-5、-4、-3、-2、-1、0、1、2、3、4、5
你不能把它聚合成9个类。因此,变量的范围只能是4(例如从3到7),而不是5(从3到8)。

生成100个随机值

values <- floor(runif(length(location), 3, 8)) # values from 3 to 7!
table(values)

制作模板矩阵

num_alternatives <- length(location)

mat <- matrix(NA, nrow = num_alternatives, ncol = num_alternatives)

colnames(mat) <- location
rownames(mat) <- location

为Saaty的分数制作值的向量

(saaty_scores <- c(1/seq(9,3,-2), 1, seq(3,9,2))

你有少量的数据,那么为什么你忽略简单的循环?

填充矩阵的循环

for (i in 1:nrow(mat)) {
  for (j in 1:ncol(mat)) {
    mat[i,j] <- saaty_scores[values[i] - values[j] + 5] # 5 - for shifting differences from the range [-4,4] to the range [1:9] to use it as an index
  }
}

您应该(为ahpsurvey软件包)列出每个决策者的一些矩阵(即使您只有一个决策者),因此:

my_pairwise_mats <- list()
my_pairwise_mats[[1]] <-  mat

相关问题