Кластеры с течением времени в R - PullRequest
0 голосов
/ 28 сентября 2011

У меня есть ряд данных, на которых я собираюсь использовать кластеризацию, и я хочу посмотреть, как эти кластеры данных со временем.

Таким образом, по сути, все начинают в одной группе, как они это сделалиничего, но со временем, поскольку они делают разные вещи, они будут помещены в разные группы в зависимости от их поведения, и я хочу отследить это.

Я искал способ сделать это в R (снекоторая предварительная обработка данных в Python) и представление их графически.В настоящее время я могу думать только о том, чтобы сделать это, разбив период времени, скажем, на 3 недели, а затем кластеризовав каждую из 3 недель.Единственная проблема в этом заключается в том, что я действительно не знаю, как отслеживать перемещения людей между кластерами в течение этих 3 недель (например, чтобы увидеть, перемещает ли кто-то действия из группы А в группу В).Я мог бы поместить это в таблицу, но было бы неплохо как-то показать это графически (например, красные линии между кластерами во времени или что-то в этом роде).

Любые идеи о том, как это сделать, будут высоко оценены, или еслиесть хороший способ отследить скопления с течением времени, которые я пропустил, пожалуйста, укажите мне на это.

1 Ответ

4 голосов
/ 28 сентября 2011

Я использовал 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

...