TraMineR 序列分析中缺失值状态的其他替换矩阵?

机器算法验证 缺失数据 电车 序列分析
2022-04-09 12:34:33

我们有一个关于如何处理序列中缺失值/间隙的问题。我们喜欢为最优匹配过程建立自己的替代成本矩阵。据我们所知,TraMiner 允许创建自己的成本矩阵——但前提是没有缺失值。如果存在缺失值,则默认矩阵会为所有状态“收费”2 个单位,而不管处理“真实”状态或缺失状态(参见TraMiner 用户指南,第 6.5.2 和 9.4.5 章)。

背景:目前,我们评估了一个职业发展长达 40 年的生命历程数据集。TraMiner 开发团队的 Matthias Studer 好心地给了我们尝试 Brendan Halpin 的多重插补方法的建议(参见他的论文)。正如 Halpin 先生有充分理由指出的那样,将缺失值设置为特殊类别并分配自己的替代成本会产生偏差倾向(正如 TraMiner 用户指南通过指出此操作的问题所建议的那样,参见同上。第 9.4.5 章)。因此多重​​插补是有意义的。不幸的是,我们必须处理比 Brendan Halpin 大得多的差距,因此最好尝试并比较替换和插补方法。Halpin 先生在检查了我们的数据后证实了这一点。

到目前为止,使用默认的 2-units-for-all-substitution 替代方法,聚类结果显示频率分布/状态分布图正在聚类,倾向于“缺失状态”的模式。这意味着集群类型遵循“缺失状态”模式,这不是一个好的结果。因此,我们喜欢尝试对所有状态(包括缺失状态)进行其他替代成本替代。但是怎么做呢?

2个回答

您是对的,要计算"OM"缺失状态的差异,您需要替换成本来替换缺失值。然而,这正是 TraMineRseqdist函数所期望的。

帮助页面指出: “seqdist如果选择了 OM 方法,seqdist 需要一个替换成本矩阵,其中包含缺失状态的行和列条目(使用nr选项定义的符号seqdef)。”

一个简单的方法来定义这样一个矩阵,尊重字母表的正确顺序,增加了状态状态,是首先创建这样一个矩阵,例如

sm <- seqsubm(yourseq, method="CONSTANT", with.missing=TRUE)

然后将矩阵的内容替换为您想要的成本,然后再将其传递给seqdist. 您还可以使用该miss.cost参数为缺失状态设置恒定的替换成本。

至于缺失状态的插补,除了 Brendan Halpin 出色的多重插补解决方案外,您还可以考虑利用刚刚发布的 Alexis Gabadinho 的PST包中提出的概率后缀树的预测能力。

希望这可以帮助。

谢谢你的回答。但据我所知,我的问题没有得到回答。因为我什至不确定,我是否以应有的方式发布,所以我尝试以这种方式再次询问:

我们在吉尔伯特描述它之前尝试过这个。使用“seqdef”(和之前的 seqsum)确实有机会定义“真实状态”,但没有定义索引成本的差距,还是我错了?或者反过来:是否有定义差距的“代码”?这是因为如果您像这样设置提交成本,则自定义设置成本仅考虑“真实状态”(而不是差距): R> subm.custom <- matrix(c(0, 1, 1, 2, 1, 1, 1, 0, 1, 2, 1, 2, 1, 1, 0, 3, 1, 2, 2, 2, 3, 0, 3, 1, 1, 1, 1, 3, 0, 2, 1, 2, 2, 1, 2, 0), nrow = 6, ncol = 6, byrow = TRUE, dimnames = list(mvad.shortlab, mvad.shortlab))

有人可以帮忙吗?(如果我的问题无法理解,请告诉我)