有没有办法为数据集中的所有序列(即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)
答案 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
希望这有帮助。