随着时间的推移在R中集群

时间:2011-09-28 11:51:45

标签: r cluster-analysis time-series

我有一系列数据,我将使用群集,我希望看到这些数据如何随着时间的推移而聚集。

所以基本上每个人都从一个小组开始,因为他们什么也没做,但随着时间的推移,他们会做不同的事情,他们会根据他们的行为被分成不同的组,我想跟踪这个。

我一直在寻找一种在R中执行此操作的方法(在Python中对数据进行一些预处理),并以图形方式表示。我目前可以想到这样做的唯一方法是将时间段分解为3周,然后将3周中的每一周分组。唯一的问题是我真的不知道在这3周内如何跟踪群集之间人员的移动(例如,看看某人的动作是否将他们从A组移动到B组)。我可以把它放在一个表中,但以某种方式以图形方式显示它会很好(就像簇之间的红线一样或者其他东西)。

如果有任何关于如何做到这一点的想法将非常感激,或者如果有一种很好的方法来跟踪我一直缺少的群集,请指出我。

1 个答案:

答案 0 :(得分:4)

我已使用Mfuzz中的R来聚类时间过程微阵列数据集。 Mfuzz使用“软聚类”。基本上,个人可以出现在多个群体中。以下是一些模拟数据的示例:

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

这给出了:

enter image description here