如何为TraMineR中的子序列设置最小转换次数阈值?
使用TraMineR筛选含最小转换次数的子序列
问题描述
我正在使用TraMineR分析一项30分钟试验中的状态转换情况,全程共108000帧,包含10种状态及缺失值。当前提取出的子序列包含仅1次转换的情况,这对我的分析并无帮助。我已知可设置子序列的最大长度,请问是否可以设置子序列所需的最小转换次数?
附带的R代码:
# 定义STS对象 seq.d <- seqdef(seq, informat="STS", stsep=NULL, alphabet=alph, states=bet, weights=NULL, left=NA, right="DEL", void="%", nr="*", cnames=NULL, xtstep=1, tick.last=FALSE, cpal=NULL, missing.color="darkgrey", labels=NULL) # 创建seqelist对象 seq.e <- seqecreate(data=seq.d, id=NULL, timestamp=NULL, event=NULL, end.event=NULL, tevent="transition", use.labels = TRUE, weighted = NULL) # 按频率排序的子序列 seq.s <- seqefsub(seq.e, pmin.support = 0.10, constraint=seqeconstraint(max.gap = 30, window.size = 300, age.min = -1, age.max = -1,age.max.end = -1, count.method = "CDIST"), max.k = 10)
解决方案
TraMineR的seqefsub函数没有直接设置最小转换次数的参数,但可以通过两种方式实现目标筛选:
方法1:基于子序列长度间接控制
子序列的转换次数等于其包含的状态数减1。比如要保留至少2次转换的子序列,就需要子序列包含至少3个状态(转换次数=3-1=2)。可以在seqeconstraint中通过min.k参数设置最小状态数:
# 约束子序列至少包含3个状态(对应至少2次转换) constraint <- seqeconstraint(max.gap = 30, window.size = 300, min.k = 3) seq.s <- seqefsub(seq.e, pmin.support = 0.10, constraint = constraint, max.k = 10)
方法2:提取后过滤结果
如果需要更灵活的筛选逻辑,可以先提取所有符合支持度要求的子序列,再根据转换次数过滤:
# 先提取所有符合条件的子序列 seq.s <- seqefsub(seq.e, pmin.support = 0.10, constraint=seqeconstraint(max.gap = 30, window.size = 300, age.min = -1, age.max = -1,age.max.end = -1, count.method = "CDIST"), max.k = 10) # 计算转换次数(状态数-1),过滤出至少2次转换的子序列 filtered_seq.s <- seq.s[seqeL(seq.s) - 1 >= 2]
其中seqeL(seq.s)会返回每个子序列的状态数量,减去1即为对应的转换次数,据此即可完成筛选。
内容的提问来源于stack exchange,提问作者Becca Trapp
相关产品推荐
相关产品推荐

