2017-04-13 2 views
1

Existe-t-il un moyen de générer la matrice de transition pour toutes les séquences (c'est-à-dire l'identifiant) dans un ensemble de données?Calcul des taux de transition pour chaque séquence dans TraMiner

Dans mon cas, mes données sont au format TSE, donc j'utilise certaines fonctions du paquet TraMineRextras.

Mon intention est de boucler sur chaque séquence, mais quand je veux calculer les taux de transition pour un identifiant donné, je reçois l'erreur suivante après l'exécution de la fonction TSE_to_STS():

Erreur dans « rownames » < - (« tmp », value = « 1 »): tentative de mettre « rownames » sur un objet sans dimension

Il ressemble à un minimum de deux séquences est prévu dans l'argumentation de 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) 

Répondre

0

Les fonctions TSE_to_STS de TraMineRextras et seqtrate de TraMineR sont destinés à un ensemble de séquences et ne fonctionnent pas avec une séquence unique. En effet, ils utilisent en interne des fonctions destinées aux tables qui ne fonctionnent pas avec les vecteurs.

Une solution de contournement consiste à ajouter une séquence fictive à un événement fictif et à supprimer l'événement fictif de la matrice résultante des transitions de probabilité.

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

Espérons que cela aide.

+0

merci pour l'explication. Pour contourner ce problème, je crée deux séquences identiques avec un identifiant différent. De cette façon 'TSE_to_STS' me donne la matrice de transition attendue. – Benoa411

1

D'après les explications de Gilbert, voici mon code modifié. Il crée une séquence identique avec un identifiant différent (= 99). Avec le taux de transitions des deux séquences identiques, la matrice de transiton est la même que celle calculée avec une séquence. Cela fonctionne sans créer un événement fictif.

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)