r语言 - 用于计算不一致对的函数不起作用



我正在尝试计算不一致对的数量。例如:

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。

我错过了什么?

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

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

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

在 obs1
  1. 和 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",但在 arg2 中"d"高于 "a"(

根据@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

相关内容

  • 没有找到相关文章

最新更新