如何对纵向变量进行聚类?


10

我有一堆变量,其中包含从第0天到第7天的纵向数据。我正在寻找一种合适的聚类方法,该方法可以将这些纵向变量(而不是案例)聚类为不同的组。我试图按时间分别分析此数据集,但结果很难合理地解释。

我调查了SAS程序的可用性,PROC SIMILARITY因为它的网站上有一个示例。但是,我认为这不是正确的方法。先前的一些研究在每个时间点都使用了探索性因素分析,但是由于结果不合理,在我的研究中也不是一种选择。

希望可以在此处提供一些想法,并且可以使用已编译的程序(例如SAS或R)进行处理。任何建议表示赞赏!


这是一个简短的示例(很抱歉,数据和变量名之间的位置不一致):

id time   V1  V2   V3   V4   V5   V6   V7   V8   V9   V10
2    0    8    7    3    7    6    6    0    0    5    2
2    1    3    5    2    6    5    5    1    1    4    2
2    2    2    3    2    4    4    2    0    0    2    2
2    3    6    4    2    5    3    2    1    2    3    3
2    4    5    3    4    4    3    3    4    3    3    3   
2    5    6    4    5    5    6    3    3    2    2    2
2    6    7    5    2    4    4    3    3    4    4    5
2    7    7    7    2    6    4    4    0    0    4    3
4    0   10    7    0    2    2    6    7    7    0    9
4    1    8    7    0    0    0    9    3    3    7    8
4    2    8    7    0    0    0    9    3    3    7    8
4    3    8    7    0    0    0    9    3    3    7    8
4    4    5    7    0    0    0    9    3    3    7    8
4    5    5    7    0    0    0    9    3    3    7    8
4    6    5    7    0    0    0    9    3    3    7    8
4    7    5    7    0    0    0    9    3    3    7    8
5    0    9    6    1    3    2    2    2    3    3    5
5    1    7    3    1    3    1    3    2    2    1    3
5    2    6    4    0    4    2    4    2    1    2    4
5    3    6    3    2    3    2    3    3    1    3    4
5    4    8    6    0    5    3    3    2    2    3    4
5    5    9    6    0    4    3    3    2    3    2    5
5    6    8    6    0    4    3    3    2    3    2    5
5    7    8    6    0    4    3    3    2    3    2    5

您能否再解释一下数据,或者提供缩短的样本?当您说“变量包含纵向数据”时,是指它们都是在7天之内对同一个人或事物进行的重复测量(因此可能是相关的)。
rosser 2011年

对于rosser:我已经附加了一部分数据。如您所述,它们是重复的测量:每个患者(ID)有10个测量值(V1〜V10),持续数天(day0〜day7)。
cchien

Answers:


5

在R Hmisc包中,请参见该curveRep功能的帮助文件,该文件代表“代表性曲线”。 curveRep在缺少的时间点的曲线形状,位置和模式上进行聚类。


谢谢你的建议。听起来可行。我将立即阅读其手册。
cchien

坦率。手册中的示例似乎不起作用。有错字吗?我想运行示例以了解它。这是代码:set.seed(1)N <-200 nc <-sample(1:10,N,TRUE)id <-rep(1:N,nc)x <-y <-id for(i in 1:N){x [id == i] <-if(iy [id == i] <-i + 10 *(x [id == i]-.5)+ runif(nc [i],- 10,10)}
B_Miner

1
哎呀 我忘记了R帮助文件中的百分号需要转义。这导致示例中的一行被截断。将不完整的行替换为: x[id==i] <- if(i %% 2) runif(nc[i]) else runif(nc[i], c(.25, .75))
Frank Harrell

我不确定“ rep:评估每条曲线进行聚类的点数”在curveRep(x,y,id,kxdist = 2,p = 10)中代表什么
greg121 2013年

1
通过对每个主题(曲线)进行拟合,可以在其上拟合最低平滑度,并在固定的点网格上评估该平滑度,以防不同的曲线具有不同的采样时间。两点代表线性关系,三点代表二次关系。 通常建议,并不是一个不错的选择。将点网格处的内插坐标与最大时间间隔,缺失值的数量以及其他内容一起输入到聚类算法中。 可以大于所需的值,而不会造成太大的伤害;某些特征可以重复是可以的。p = 10 pp>3p=10p
Frank Harrell 2013年

5

我不确定这是您要找的内容,但是kmlR中的程序包使用k-means对重复测量的序列进行聚类。这里是包装页面纸张的链接(不幸的是,它是封闭的)。仅当您的数据集很小(几百个序列)时,它才能很好地工作。

这是该文件的非门版本(没有参考问题):http : //christophe.genolini.free.fr/recherche/aTelecharger/genolini2011.pdf


在发布此问题之前,我实际上已经审查了此方法。我假设kml方法是从原始论文的一些示例中对个人进行分组的集群方法。我会再看一遍。谢谢!!
cchien

@ccchien是的,他们使用它将各个轨迹聚类在一起,但是您可以假设每个人有十个轨迹(每个变量一个)。您可能需要标准化变量,以使kml过程正常工作。问题是,据我所知,无法告诉kml您的轨迹嵌套在个人中。因此,它可能最终与您要实现的目标不完全匹配。
Antoine Vernet

@ greg121,感谢您提供该论文免费版本的链接。似乎已删除文本引用,也许应该再次重新编译Latex文件(尽管那里有引用列表)。
Antoine Vernet

@AntoineVernet是的,您是对的。但我找不到其他版本
greg121

4

因此,您在同一n个个体上每t次测量了p个变量。一种进行的方法是计算t pXp(非)相似性矩阵并应用INDSCAL模型的多维标度。它会为您提供两个低维地图(例如2维)。第一张图显示了维度空间中p个变量的坐标,并反映了其中的分组(如果有)。第二张图显示了每个t矩阵中维度的权重(即重要性或显着性)。

在此处输入图片说明


我也有将n维转换为2维的想法,但是对实现此功能的具体方法一无所知。现在我发现SAS可能有一个程序可以实现它。我将学习它以查看使用数据时的可用性。
cchien

解释权重的最佳方法是什么?
Ming K

权重显示与该特定来源(来源是个人或在此示例中为时间)相关或有区别的维度。例如,在时间1的图片上,维度II很强或相关,而维度I很弱。
ttnphns 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.