计算不一致对的函数不起作用

时间:2017-07-20 12:30:33

标签: r desctools

我正在计算不和谐对的数量。例如:

arg1=c("b","c","a","d")
arg2 = c("b","c","d","a")

上面有1个不一致对(对:“a”和“d”)

但是当我跑步时:

require(asbio)
sum(ConDis.matrix(arg1,arg2)==-1,na.rm=TRUE)

我收到的答案是:5(而不是正确答案 - 1)

我也尝试过:

require(RankAggreg)
require(DescTools)
xy <- table(arg1,arg2)
cd <- ConDisPairs(xy)
cd$D

答案再次为5。

我错过了什么?

2 个答案:

答案 0 :(得分:7)

我认为你误解了ConDis.matrix的工作原理。

它引用的对是元素索引对,并且对于每对,函数检查它们是否在两个向量中以相同的方式移动。

所以,在你的向量中,你确实有5个不和谐的对,即(考虑具有有序定量视图的字母):

  1. 在obs1和obs3之间(“a”低于arg1中的“b”但arg2中“d”高于此)
  2. 在obs1和obs4之间(“a”低于arg2中的“b”但arg1中“d”高于此)
  3. 在obs2和obs3之间(“a”低于arg1中的“c”但arg2中“d”高于此)
  4. 在obs2和obs4之间(“a”低于arg2中的“c”但arg1中“d”高于此)
  5. 在obs3和obs4之间(“a”低于arg1中的“d”但“d”高于arg2中的“a”)

答案 1 :(得分:2)

基于@ Cath的初始评论,将字符向量转换为因子似乎可以通过将文本值映射到可以在函数中使用的整数来提供解决方法。编辑:请注意,重新排序因子级别会更改最终结果。我不太了解不一致函数来说明这是否是预期的行为。

# Original Character vectors
arg1 <- c("b","c","a","d")
arg2 <-  c("b","c","d","a")

# Translate character vectors into factors
all_levels <- unique(arg1, arg2)
arg1 <- factor(arg1, levels = all_levels)
arg1
[1] b c a d
Levels: b c a d

arg2 <- factor(arg2, levels = all_levels)
arg2
[1] b c d a
Levels: b c a d

# This maps each text string to a number 
as.numeric(arg1)
[1] 1 2 3 4
as.numeric(arg2)
[1] 1 2 4 3

# Use the underlying numeric data in the function
require(asbio)
sum(ConDis.matrix(as.numeric(arg1), as.numeric(arg2))==-1,na.rm=TRUE)
[1] 1

编辑:排序因子级别会改变最终输出

arg1 <- c("b","c","a","d")
arg2 <- c("b","c","d","a")

all_levels <- sort(unique(arg1, arg2))  # sorted

arg1 <- factor(arg1, levels = all_levels)
arg2 <- factor(arg2, levels = all_levels)

sum(ConDis.matrix(as.numeric(arg1), as.numeric(arg2))==-1,na.rm=TRUE)
[1] 5