如何衡量序列的一致性?

时间:2014-10-16 14:18:09

标签: math statistics sequence

免责声明:我在数学方面非常局外..所以也许我所要求的是非常基本的。或者我可能需要帮助来重新表述这个问题。

我想用数字衡量几个序列的一致性,这样我就可以根据这个一致性号来比较和排序它们。

这些是os序列排序的一些可能的例子(根据我的观点)从较不一致到更一致,示例使用二进制值,但它也可以是任意数量的选项:

  • 10101
  • 1010
  • 101
  • 10
  • 0(*)
  • 1(*)
  • 110
  • 11
  • 111
  • 1111

(*)相等的一致性

还有其他场景我真的不知道如何对它们进行排序,检查以下对,我真的不知道哪些会被定义为更一致:

对1:

  • 111111111111101
  • 11

对2:

  • 110
  • 1100

对3:

  • 1010101010
  • 1111100000

我要求对如何继续计算这个衡量标准提出任何见解:表格,指向文档的链接,建议,欢迎任何事情。

2 个答案:

答案 0 :(得分:1)

我可以计算“更改”的数量(从0到1或反之)并将其除以序列中元素的总数。

如果序列可以有不同于1和0的东西,我会在每个元素计数之间建立“距离”。所以从0和1“成本”改变1,但是从0变为2“成本”2等等。

def get_consistency(sequence)
  change = 0
  count = 0
  previous = nil
  sequence.each do |element|
    if previous then
      # define distance as whatever you want. For numbers, its abs(element-previous)
      change += distance(element, previous)
      count += 1
    end
    previous = element
  end
  count == 0 ? 0 : change / count
end

答案 1 :(得分:1)

基于@kikito实现但具有另一种风格:

def get_consistency(sequence)
  proximity =
    sequence.each_with_index.map do |element, index|
      index > 0 ? distance(element, sequence[index-1]) : 0
    end.reduce(:-)

  proximity / sequence.length.to_f
end

def distance(value1, value2)
  value1 == value2 ? -1 : 1 # Categorical variable
end

结果:

0.7500 <- 1,1,1,1
0.4000 <- 1,1,1,1,2
0.5714 <- 1,1,1,1,2,2,2
0.2857 <- 1,1,1,1,2,2,3
0.0000 <- 1
0.0000 <- 2
-0.5000 <- 1,2
-0.7500 <- 1,2,3,4
-0.2500 <- 1,2,2,3
0.9000 <- 1,1,1,1,1,1,1,1,1,1
0.9900 <- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
0.9703 <- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2
-0.9000 <- 1,2,3,4,5,6,7,8,9,10
-0.9000 <- 1,0,1,0,1,0,1,0,1,0
0.7000 <- 1,1,1,1,1,0,0,0,0,0
0.2500 <- 1,1,0,0