Analyse de Séquences

Représenter un tapis de séquences ordonnées selon un dendrogramme

Divers

La fonction seq_heatmap est maintenant disponible dans le package JLutils.

Nicolas Robette a écrit un excellent article d’introduction à l’analyse de séquences sur le blog Quanti.hypotheses.org (voir L’analyse de séquences : une introduction avec le logiciel R et le package TraMineR).

Il y montre notamment comment calculer une distance entre séquences, ce qui permet ensuite d’effectuer une classification hiérarchique pour regrouper les différentes séquences en un nombre limité de classes en fonction de leur proximité.

Un des modes de représentation proposé par le package TraMineR est appelé “tapis”. Les tapis permettent de mieux visualiser la dimension individuelle des séquences. Chaque segment horizontal représente une séquence, découpée en sous-segments correspondant aux aux différents états successifs qui composent la séquence.

Nous proposons ici une petite astuce permettant de représenter sur un même graphique le tapis des séquences et le dendrogramme de la classification hiérarchique, les séquences étant alors triées selon les regroupements du dendrogramme, permettant de mieux comprendre comment se constituent les différentes classes.

Ce type de représentation s’inspire des heat map et utilise d’ailleurs la fonction native heatmap() fournie par R.

Voici en premier lieu le code à copier/coller dans R pour définir la fonction seq_heatmap :

seq_heatmap <- function (seq, tree, with.missing=FALSE, ...) {
	if (class(tree)!="dendrogram") tree <- as.dendrogram(tree)
	mat <- seq
	for (i in 1:length(seq)){
		mat[mat[,i]=="%",i] <- NA
		mat[,i] <- as.numeric(mat[,i])
	}
	mat <- as.matrix(mat)
	col <- attr(seq,"cpal")
	if (with.missing) col <- c(col,attr(seq,"missing.color"))
	heatmap(mat, tree, NA,  na.rm=FALSE, col=col, scale="none", labRow=NA, ...)	
}

Il suffit ensuite d’appeler cette fonction en lui passant en premier lieu le tableau des séquences défini à l’aide de la fonction seqdef() et en second le dendrogramme obtenu avec hclust() ou agnes() [1].

Pour reprendre les données fournies en exemple par Nicolas Robette, on saisira
seq_heatmap(seq,seq.agnes,labCol=14:50) pour obtenir le résultat ci-dessous :

Exemple d'utilisation de la fonction seq.heatmap

Notes

[1Au passage j’en profite pour citer l’excellent package flashClust. Le calcul d’un dendrogramme peut être particulièrement long si le fichier de données est important. Ce package permet de réduire très significativement le temps de calcul.