使用相关公式

时间:2018-11-13 12:28:34

标签: r traminer

我一直在以分类状态的有序序列形式对数据进行一些探索性分析,例如顺序x = A,A,B,D ...等

我一直在R中使用Traminer软件包来进行此分析。包中提供的功能之一(seqdist())计算序列对之间的距离(用于聚类)。如Studer&Ritschard(2015-http://dx.doi.org/10.1111/rssa.12125)中所述,支持许多距离度量,包括Chi-Squared距离。

我想通过一个简单的例子来计算“手动”距离,以验证我对这个距离度量的理解。 Studer&Ritschard(2015)未提供公式,但在对Traminer邮件列表(http://traminer.unige.ch/contrib.shtml)进行查询后,吉尔伯特·里查德(Gilbert Ritschard)友好地将我引向了早期的工作论文(https://www.lives-nccr.ch/sites/default/files/pdf/publication/33_lives_wp_studer_sequencedissmeasures.pdf-第8页)(包括该公式),并鼓励我将问题引向堆栈溢出问题,以便更广泛地看待它。

但是,对于一个非常简单的示例,我仍然难以使用提供的公式来再现卡方距离度量。一个使用R和距离度量的公式的可重现示例如下,如果有人可以帮助我确定差异的根源,我将不胜感激(大概是我对公式有误解)。

卡方距离公式如下:

对于集合 j 中的序列字母以及序列x和y,令p_(j | x)等于序列x在状态j中花费的时间比例,并令p_ (j)等于“在状态j中花费的总时间比例”,序列x和y之间的卡方距离为:

Chi-Squared Distance Formula

使用此公式(而不是与周期有关的版本),我尝试为以下示例重现距离计算,该示例仅涉及两个短序列:

x = E-E-E-G-G

y = E-E-E-E-E

所以国家的字母是{E,G}

在R中,可以如下重新创建这些序列:

library(TraMineR)
sequence.mat <- matrix(c("E", "E", "E", "G", "G", "E", "E", "E", "E", "E"), nrow=2, byrow=TRUE)
colnames(sequence.mat) <- paste("m", 1:5, sep="")
sequence.mat

给予:

     m1  m2  m3  m4  m5 
[1,] "E" "E" "E" "G" "G"
[2,] "E" "E" "E" "E" "E"

这被定义为Traminer的序列,如下所示:

sequence.obj <- seqdef(data=sequence.mat)
[>] 2 distinct states appear in the data: 
 1 = E
 2 = G
 [>] state coding:
   [alphabet]  [label]  [long label] 
 1  E           E        E
 2  G           G        G
 [>] 2 sequences in the data set
 [>] min/max sequence length: 5/5

sequence.obj
  Sequence 
1 E-E-E-G-G
2 E-E-E-E-E

两个序列之间的距离计算如下:

seqdist(sequence.obj, method = "CHI2", full.matrix = FALSE, step = 5)
         1
2 1.581139

其中step = 5可确保将卡方距离计算为跨越五个状态的单个周期。

问题在于,如果手动应用公式,则此值(1.581139)似乎与给定的值不匹配,即1。工作如下图所示:

Manual calculation from example

要确认最后的数字计算是正确的:

https://www.wolframalpha.com/input/?i=(((3%2F5)-(5%2F5))%5E2)%2F(8%2F10)+%2B+(((2%2F5)-(0%2F5))%5E2)%2F(2%2F10)

我认为我或者误解了该公式,或者在我使用seqdist()时,距离度量的实现方式有所不同。对于任何人理解差异的帮助,我将深表感谢。

1 个答案:

答案 0 :(得分:1)

您的手动计算是正确的。 TraMineR中有一个错误,该错误是使用计数(即两个序列中每个状态在每个状态中出现的次数)而不是每个状态所花费的时间百分比来计算距离的。

只要所有k个周期都具有相同的长度(尤其是当k = 1时),那么到目前为止,通过计数获得的解与现在通过比例计算出的解成比例。

这意味着距离的排名保持不变。基于CHI2或EUCLIDEAN距离的聚类解决方案也应保持不变。

该错误已在R-Forge上可用的开发版本(内部版本2018-11-15)中修复。几天后将在CRAN上发布更新的版本。