【问题标题】:Clusters over time in RR中随时间变化的集群
【发布时间】:2011-11-26 19:45:18
【问题描述】:

我有一系列数据要使用聚类,我想看看随着时间的推移这些数据是如何聚类的。

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

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

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

【问题讨论】:

  • 查看kmeans.ani() 包中的animation。它应该让您了解如何考虑为集群设置动画。
  • 这听起来像是某种马尔可夫或半马尔可夫过程。您需要更明确地定义“随着时间的推移,当他们做不同的事情时,他们将根据他们的行为被分为不同的组”。这些“不同的组”是预先指定的吗?

标签: r cluster-analysis time-series


【解决方案1】:

我使用R 中的Mfuzz 对时间进程微阵列数据集进行聚类。 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))

这给出了:

【讨论】:

    猜你喜欢
    • 2015-01-26
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 2015-07-20
    相关资源
    最近更新 更多