计算序列之间的 "substring" 距离

Compute "substring" distances between sequences

我的数据集(第一行=header)如下:

ID;Activity 1;Activity 2; ... ;Activity 20;
Company_X;A1A3T1D1O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1O2R2
Company_Y;A1A3T1O1R1;A1A3T2O1R2;...;A1A3T11O1O3R5
Company Z;A1A3T1D8O1R1R8;A1A3T2O1R2;...;A1A3T6D2O1R2

其中每个 activity,每对(一个字母 + 一个数字)代表一个序列的一部分。 A1=演员 1,A3=演员 3,O1=对象 1。我试图做的是计算公司活动之间的差异。例如,company_x 的 activity1 应该与 company_y 的 activity1 相差 2,因为它们有共同的 A1A3T1O1R1 而不是 D1 和 R8。

TraMineR 中的任何包都可以做到这一点吗?这意味着在每个事件中比较预定义数量的字符?

非常感谢您的帮助

据我了解,像 A1A3T6D2O1O2R2 这样的每个字符串 (activity) 应该被视为成对的序列,并且您想比较这些序列。

TraMineR的seqdef函数可以读取字符串形式的序列。但是,当每个元素由多个字符定义时,您必须为此引入一个分隔符(例如,A1-A3-T6)。然后,要将您的序列与公司名称配对,您可能还需要以 table 形式组织数据,每个序列 (activity) 在单独的行中,例如

ID         Activity
company_x  A1-A3-T6-D2-O1-O2-R2
company_y  A1-A3-T1-O1-R1
...

然后,您可以使用适用于不同长度序列的度量来计算相异性。例如,最佳匹配 (OM) 是在给定插入缺失和替换成本的情况下,将一个序列转换为另一个序列的最小成本。这应该给你你所期望的。根据替代成本,A1A3T6D2O1O2R2 和 A1A3T6D2O1R2 之间的距离可能不同于 A1A3T6D2O1O2R2 和 A3T4 之间的距离