【问题标题】:Finding Similar Binary Sequences寻找相似的二进制序列
【发布时间】:2015-09-18 20:38:43
【问题描述】:

考虑以下数据集:

id = c(rep("aa", 3), rep("bb", 3), rep("cc", 3))
item = rep(c("run", "jump", "clap"), 3)
day = paste0('Day',1:5)

df = data.frame(id, item)
df[,day] <- c(rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5)
              )

产生这个:

  id item Day1 Day2 Day3 Day4 Day5
1 aa  run    0    1    0    0    0
2 aa jump    0    1    0    1    0
3 aa clap    0    0    0    0    0
4 bb  run    0    0    1    1    1
5 bb jump    1    1    0    1    1
6 bb clap    0    1    0    1    1
7 cc  run    1    1    1    1    1
8 cc jump    0    1    1    1    1
9 cc clap    0    1    0    1    0

我想确定三个受试者(aa、bb、cc)中哪一个在日常拍手、跑步和跳跃习惯方面具有相似的模式。

我在寻找某种聚类方法吗?我尝试过的一件事是分离出每个二进制序列并将它们变成 5 个字符串,然后排序。这提供了一个不错的视觉效果,但我正在寻找更多程序化和更少手动的东西。

有什么想法吗?谢谢!

【问题讨论】:

    标签: r math statistics


    【解决方案1】:

    您可以尝试使用 cluster 包中的 daisy 与曼哈顿距离。

    set.seed(1)
    df[,day] <- c(rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5), 
              rbinom(5, 1, 0.5)
              )
    df
      id item Day1 Day2 Day3 Day4 Day5
    1 aa  run    0    0    0    0    1
    2 aa jump    0    0    1    1    0
    3 aa clap    1    0    1    0    1
    4 bb  run    1    1    0    0    0
    5 bb jump    0    0    1    1    1
    6 bb clap    1    1    0    0    1
    7 cc  run    1    0    0    0    1
    8 cc jump    1    1    0    1    1
    9 cc clap    1    1    0    1    1
    

    我们将通过跑、跳和拍来比较三个科目。

    require(cluster)
    
    lapply(split(df, df$item), function(xx) {
        xx <- data.frame(xx[, -c(1, 2)], row.names=xx$id)
        daisy(xx, metric="manhattan")
    })
    
    $clap
    Dissimilarities :
       aa bb
    bb  2   
    cc  3  1
    
    Metric :  manhattan 
    Number of objects : 3
    
    $jump
    Dissimilarities :
       aa bb
    bb  1   
    cc  4  3
    
    Metric :  manhattan 
    Number of objects : 3
    
    $run
    Dissimilarities :
       aa bb
    bb  3   
    cc  1  2
    

    更高的成对数字意味着更多的不同。例如,run 的对 aa/bb 的数字为 3,它是每天差异的绝对值之和。

    【讨论】:

    • 谢谢,山姆。我将它应用于我的实际数据集(它有几千个“天”列,零比零多得多),并将成对数字与数据的可视化进行比较。曼哈顿和欧几里得距离指标没有像我希望的那样表现。然而,“Gower”指标似乎让我接近了。谢谢你的提示!
    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2019-03-27
    • 2011-12-12
    相关资源
    最近更新 更多