2012-10-14 54 views
3

我想知道在R中是否有一個實現,它將n個數字的排列組合到原始的1 ... n序列中,並提供所需的反轉次數。例如,如ppt中概述的「按逆轉排序」或「按易位排序」的實施。R反轉排序的實現

具體來說,我有一個n元素序列pi(n)的排列,我想知道它與原始序列有多接近。逆轉次數似乎是一個很好的指標。

謝謝!

+2

這並不完全回答你的問題,但Kendall的tau http://en.wikipedia.org/wiki/Kendall_tau_rank_correlation_coefficient給出了一個統計數據,在這種情況下似乎是非常合適的([#concordant pairs]的縮放值) - [#不一致對]); 'cor.test(...,method =「kendall」)'返回指定x和y值的值(即'cor.test(seq(n),pi(n),method =「kendall」)$統計量') –

回答

2

這看起來像肯德爾的距離(有時也稱爲泡泡分類距離)的工作。這可能是衡量排名空間距離的最常用指標。

Kendall距離計算兩個序列在​​兩個索引中項目的排序不同的次數。在其中一個序列是平凡序列(1,2,...,n)的情況下,我們可以簡單地通過計算i和d(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) 

你也可以考慮斯皮爾曼的指標。
此外,還有一類關於排名數據的模型,我必須根據你想要做什麼來插入叫做「錦葵模型」。

+0

嗨,這聽起來很不錯!如果序列中存在間隙(比如4,2,1,5,6),AllSeqDists是否會工作? – user1357015

+0

另外,這與Damerau-Levenshtein距離有什麼不同,只允許換位? – user1357015

+0

@ user137015我更新了我的答案,以反映出解答您的第一個問題的其他功能。第二個問題的答案是:顯然它是相同的,並且您已經找到這個度量的另一個名稱! – Rguy