Вычислить скорость перехода для каждой последовательности в TraMiner

Есть ли способ сгенерировать матрицу перехода для всех последовательностей (то есть идентификатора) в наборе данных?

В моем случае мои данные находятся в формате TSE, поэтому я использую некоторые функции пакета TraMineRextras.

Я намерен перебрать каждую последовательность, но когда я хочу вычислить скорость перехода для данного идентификатора, я получаю следующую ошибку после выполнения функции 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)

person Benoit Lamarsaude    schedule 13.04.2017    source источник


Ответы (2)


Функции TSE_to_STS из TraMineRextras и seqtrate из TraMineR предназначены для набора последовательностей и не работают с одной последовательностью. Это потому, что внутри они используют функции, предназначенные для таблиц, которые не работают с векторами.

Обходной путь - добавить фиктивную последовательность с фиктивным событием и удалить фиктивное событие из результирующей матрицы вероятностных переходов.

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)]

Надеюсь это поможет.

person Gilbert    schedule 17.04.2017
comment
спасибо за объяснение. В качестве обходного пути я создаю две идентичные последовательности с разными идентификаторами. Таким образом TSE_to_STS даст мне ожидаемую матрицу перехода. - person Benoit Lamarsaude; 20.04.2017
comment
Проблема исправлена ​​в TraMineR, начиная с версии 0.4.0. - person Gilbert; 19.03.2018

Основываясь на объяснениях Гилберта, вот мой модифицированный код. Он создает идентичную последовательность с другим идентификатором (= 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)
person Benoit Lamarsaude    schedule 20.04.2017