3

我想知道 R 中是否有一个实现,它将 n 个数字的排列排序到原始的 1...n 序列中,并提供所需的反转次数。例如,本ppt中概述的“反向排序”或“易位排序”的实现。

具体来说,我有一个 n 元素序列 pi(n) 的排列,我想弄清楚它与原始序列的接近程度。反转的数量似乎是一个很好的指标。

谢谢!

4

1 回答 1

2

这似乎是 Kendall 距离(有时也称为冒泡排序距离)的工作。它可能是衡量排名空间距离的最常用指标。

Kendall 距离计算两个序列在​​两个索引中的项目顺序不同的次数。在其中一个序列是平凡序列 (1, 2, ..., n) 的情况下,我们可以简单地通过计算 i < j 且 pi(i) > pi(j) 的次数来测量距离.

如果您喜欢这个指标(它相当于将一个序列转换为 1:n 所需完成的相邻项目的最小成对转置数),您可以在我的包 RMallow 中找到它,该包可在 CRAN 上找到。该函数称为 AllSeqDists。这是一个例子:

library(RMallow)
# Create a matrix of sequences, each of length 5
datas <- matrix(c(1:5, 5:1, c(2, 1, 3, 4, 5), c(5, 1, 2, 3, 4), c(1, 2, 4, 5, 6), c(1, 5, 6, 2, 4)), nrow = 6, byrow = TRUE)
# Calculate all of their Kendall distances to the sequence (1, 2, 3, 4, 5)
datas <- SimplifySequences(datas)
dists <- AllSeqDists(datas)

您也可以考虑 Spearman 的指标。
此外,我必须插入一类关于排名数据的模型,称为“Mallows 模型”,具体取决于您想要做什么。

于 2012-10-15T03:27:20.737 回答