计算TraMiner中每个序列的转换率

时间:2017-04-13 22:02:46

标签: r traminer

有没有办法为数据集中的所有序列(即id)生成转换矩阵?

就我而言,我的数据采用TSE格式,因此我使用了TraMineRextras包的一些功能。

我的目的是遍历每个序列,但是当我想计算给定id的转换率时,执行TSE_to_STS()函数后会出现以下错误:

  

'rownames'中的错误< - (' tmp ',value =“1”):     尝试在没有维度的对象上设置'rownames'

TSE_to_STS()的参数中,预计至少需要两个序列。

test.events <- c("A","B","C")
test.stm <- seqe2stm(test.events, dropList=list("A"=test.events[-1], B=test.events[-2], C=test.events[-3]))
test.tse <- data.frame(id = c(1,1,1), time = c(1,2,3), event = c("A","B","C"))
test.sts <- TSE_to_STS(test.tse, id = "id", timestamp = "time", event = "event", stm=test.stm, tmin=1, tmax=4, firstState="None")
test.seqdef <- seqdef(test.sts,informat = "STS")
seqtrate(test.seqdef)

2 个答案:

答案 0 :(得分:1)

基于吉尔伯特的解释,这是我修改过的代码。它创建一个具有不同id(= 99)的相同序列。利用两个序列的转换率相同,转换矩阵与用一个序列计算的相同。它可以在不创建虚拟事件的情况下工作。

test.events <- c("A","B","C")
test.stm <- seqe2stm(test.events, dropList=list("A"=test.events[-1], B=test.events[-2], C=test.events[-3]))
test.tse <- data.frame(id = c(1,1,1), time = c(1,2,3), event = c("A","B","C"))
test.tse.bis <- test.tse
test.tse.bis[,1] <- 99
test.tse <- rbind(test.tse,test.tse.bis)
test.sts <- TSE_to_STS(test.tse, id = "id", timestamp = "time", event = "event", stm=test.stm, tmin=1, tmax=4, firstState="None")
test.seqdef <- seqdef(test.sts,informat = "STS")
seqtrate(test.seqdef)

答案 1 :(得分:0)

来自TSE_to_STS的{​​{1}}和来自TraMineRextras的{​​{1}}的函数用于一组序列,不适用于单个序列。这是因为在内部它们使用的函数用于不适用于向量的表。

解决方法是添加一个带有虚拟事件的虚拟序列,并从结果的概率转换矩阵中删除虚拟事件。

seqtrate

希望这有帮助。