2017-04-13 75 views
1

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

在我的情况下,我的数据是TSE格式,所以我使用TraMineRextras软件包的一些功能。

我的目的是要遍历每个序列,但是当我要计算升学率对于给定的ID,我执行TSE_to_STS()功能后收到以下错误:在

错误“rownames” < - ( “TMP”,值=“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

功能TSE_to_STSTraMineRextras和从TraMineRseqtrate旨在用于一组序列,并且不与单个序列工作。这是因为它们在内部使用的功能用于不适用于矢量的表格。

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

test.events <- c("A","B","C","X") 
test.stm <- seqe2stm(test.events, dropList=list("A"=test.events[-1], 
    B=test.events[-2], C=test.events[-3], X=test.events[-4])) 
test.tse <- data.frame(id = c(99,1,1,1), time = c(0,1,2,3), 
    event = c("X","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") 
test.trate <- seqtrate(test.seqdef) 
test.trate[-nrow(test.trate),-ncol(test.trate)] 

希望这会有所帮助。

+0

感谢您的解释。作为一种解决方法,我使用不同的Id创建两个相同的序列。这样'TSE_to_STS'给我预期的转换矩阵。 – Benoa411

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)