2011-09-28 112 views
0

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

因此,基本上每个人都是从一个组开始的,因为他们什么都没做,但随着时间的推移,他们会根据他们的行为将他们分成不同的组,并且我想跟踪它。

我一直在寻找一种方法在R中执行此操作(用Python中的某些数据预处理),并以图形方式表示它。我现在认为做这件事的唯一方法是将时间段打破3周,然后将这3周中的每一周都集中起来。唯一的问题是我真的不知道如何跟踪那些在3周内集群之间的人员移动(例如,看看是否有人采取行动将他们从组A移到组B)。我可以把它放在一个表格中,但是以图形方式显示它会很好(比如随着时间的推移或者某个东西在集群之间出现红线)。

关于如何做到这一点的任何想法将不胜感激,或者如果有一种很好的方式跟踪随着时间的推移集群,我一直想念,请指向我。

+0

退房'kmeans.ani()'的'animation'包。它应该给你一个关于如何考虑动画聚类的想法。 – Ramnath

+1

这听起来像某种马尔可夫或半马尔可夫过程。您需要更明确地定义“随着时间的推移,他们将根据他们的行为将不同的事情放入不同的组中”,从而更明确地定义您的意思。这些“不同的小组”是否预先指定? –

回答

4

我已经使用MfuzzR集群时间过程的微阵列数据集。 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

相关问题