2011-09-28 2 views
0

J'ai une série de données sur lesquelles je vais utiliser le clustering, et je veux voir comment ces données se regroupent au fil du temps. Donc, essentiellement, tout le monde commence dans un seul groupe, car ils n'ont rien fait, mais au fil du temps car ils font des choses différentes, ils seront mis dans différents groupes en fonction de leur comportement, et je veux suivre cela.Clusters dans le temps dans R

Je cherchais un moyen de le faire dans R (avec un peu de pré-traitement des données en Python), et le représenter graphiquement. La seule façon dont je peux actuellement penser à faire cela est de casser la période de temps en disons, 3 semaines, puis en regroupant chacune des 3 semaines. Le seul problème avec ceci est que je ne sais pas vraiment comment suivre les mouvements de personnes entre les groupes au cours de ces 3 semaines (par exemple pour voir si les actions de quelqu'un les déplace du groupe A au groupe B). Je pourrais le mettre dans une table, mais ce serait sympa de le montrer graphiquement (comme les lignes rouges entre les clusters au fil du temps ou quelque chose comme ça). Toutes les idées sur la façon de le faire seraient très appréciées, ou s'il y a un bon moyen de suivre les grappes au fil du temps que j'ai manqué, veuillez me le signaler.

+0

Check out 'kmeans.ani()' 'dans le animation' package. Cela devrait vous donner une idée de la façon d'envisager l'animation de votre clustering. – Ramnath

+1

Cela ressemble à une sorte de processus Markov ou semi-Markov. Vous devez définir plus explicitement ce que vous entendez par «au fil du temps, car ils font des choses différentes, ils seront placés dans des groupes différents en fonction de leur comportement». Ces "différents groupes" sont-ils pré-spécifiés? –

Répondre

4

J'ai utilisé le Mfuzz dans R pour regrouper des ensembles de données de microréseau au cours du temps. Mfuzz utilise le "soft-clustering". Fondamentalement, les individus peuvent apparaître dans plus d'un groupe. Voici un exemple avec des données simulées:

library(Mfuzz) 

tps = 6;cases = 90 
d = rnorm(tps*cases, 1) ##Poisson distribution with mean 1 
m = matrix(d, ncol=tps, nrow=cases) 

##First 30 individuals have increasing trends 
m[1:30,] = t(apply(m[1:30,], 1, cumsum)) 

##Next 30 have decreasing trends 
##A bit hacky, sorry 
m[31:60,] = t(apply(t(apply(m[31:60,], 1, cumsum)), 1, rev)) 

##Last 30 individuals have random numbers from a Po(1) 

##Create an expressionSet object 
tmp_expr = new('ExpressionSet', exprs=m) 

##Specify c=3 clusters 
cl = mfuzz(tmp_expr, c=3, m=1.25) 
mfuzz.plot(tmp_expr,cl=cl, mfrow=c(2, 2)) 

Cela donne:

enter image description here

Questions connexes