难以使用相关公式重现由 Traminer 包(在 R 中)的 seqdist() 函数生成的卡方距离计算
Difficulty reproducing the chi-square distance calculation produced by the seqdist() function of Traminer package (in R) using the associated formula
我一直在以分类状态的有序序列的形式对数据进行一些探索性分析,例如序列 x = A,A,B,D...等
我一直在使用 R 中的 Traminer 包来做这个分析。包中提供的函数之一 (seqdist()) 计算序列对之间的距离(用于聚类)。支持许多距离度量,包括卡方距离,如 Studer & Ritschard (2015 - http://dx.doi.org/10.1111/rssa.12125) 中所述。
我想通过一个简单的例子计算距离'by hand'来验证我对这个距离度量的理解。 Studer & Ritschard (2015) 没有提供公式,但在查询 Traminer 邮件列表 (http://traminer.unige.ch/contrib.shtml), Gilbert Ritschard kindly directed me to an earlier working paper (https://www.lives-nccr.ch/sites/default/files/pdf/publication/33_lives_wp_studer_sequencedissmeasures.pdf - p.8) 后,其中包含此公式并鼓励我将我的问题指向堆栈溢出,以便它被更广泛地看到。
但是,对于一个非常简单的示例,我仍然无法使用提供的公式重现卡方距离度量。使用 R 的可重现示例和距离度量的公式如下,如果有人可以帮助我确定差异的来源(大概我以某种方式误解了公式),我将不胜感激。
给出卡方距离公式如下:
对于集合j中的序列字母表,以及序列x和y,令p_(j|x)等于序列中处于状态j的时间比例x,并令 p_(j) 等于 'overall proportion of time spent in state 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
确认最后的数值计算正确:
我想我要么误解了公式,要么距离度量在我使用的 seqdist() 中以不同方式实现。我将非常感谢任何人帮助理解差异。
您的人工计算是正确的。 TraMineR
中存在一个错误,其中距离是使用计数(即每个状态在两个序列中的每一个中出现的次数)而不是每个状态所花费时间的百分比来计算的。
只要所有 k 个周期的长度相同(特别是当 k=1 时),到目前为止用计数获得的解与现在用比例计算的解成正比。
这意味着距离排名保持不变。基于 CHI2 或 EUCLIDEAN 距离的聚类解决方案也应保持不变。
该错误已在 R-Forge 上可用的开发版本(内部版本 2018-11-15)中修复。几天后将在 CRAN 上发布更新版本。
我一直在以分类状态的有序序列的形式对数据进行一些探索性分析,例如序列 x = A,A,B,D...等
我一直在使用 R 中的 Traminer 包来做这个分析。包中提供的函数之一 (seqdist()) 计算序列对之间的距离(用于聚类)。支持许多距离度量,包括卡方距离,如 Studer & Ritschard (2015 - http://dx.doi.org/10.1111/rssa.12125) 中所述。
我想通过一个简单的例子计算距离'by hand'来验证我对这个距离度量的理解。 Studer & Ritschard (2015) 没有提供公式,但在查询 Traminer 邮件列表 (http://traminer.unige.ch/contrib.shtml), Gilbert Ritschard kindly directed me to an earlier working paper (https://www.lives-nccr.ch/sites/default/files/pdf/publication/33_lives_wp_studer_sequencedissmeasures.pdf - p.8) 后,其中包含此公式并鼓励我将我的问题指向堆栈溢出,以便它被更广泛地看到。
但是,对于一个非常简单的示例,我仍然无法使用提供的公式重现卡方距离度量。使用 R 的可重现示例和距离度量的公式如下,如果有人可以帮助我确定差异的来源(大概我以某种方式误解了公式),我将不胜感激。
给出卡方距离公式如下:
对于集合j中的序列字母表,以及序列x和y,令p_(j|x)等于序列中处于状态j的时间比例x,并令 p_(j) 等于 'overall proportion of time spent in state 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
确认最后的数值计算正确:
我想我要么误解了公式,要么距离度量在我使用的 seqdist() 中以不同方式实现。我将非常感谢任何人帮助理解差异。
您的人工计算是正确的。 TraMineR
中存在一个错误,其中距离是使用计数(即每个状态在两个序列中的每一个中出现的次数)而不是每个状态所花费时间的百分比来计算的。
只要所有 k 个周期的长度相同(特别是当 k=1 时),到目前为止用计数获得的解与现在用比例计算的解成正比。
这意味着距离排名保持不变。基于 CHI2 或 EUCLIDEAN 距离的聚类解决方案也应保持不变。
该错误已在 R-Forge 上可用的开发版本(内部版本 2018-11-15)中修复。几天后将在 CRAN 上发布更新版本。