traminer - 独特的序列太多
问题描述
我有一个包含超过 200 万个序列的大型数据集,其中包括大约 180,000 个独特的序列。我正在使用该seqdist
命令来测量距离,我最终还将尝试识别序列簇。以下是我收到的错误消息:
有没有办法设置不同的最大序列数,或者其他一些解决方法?非常感谢您!
解决方案
距离矩阵的大小限制遵循最大允许索引值。该值取决于机器。
对于大量n的数据,一种解决方案是选择序列的随机代表性子集,计算该子集的相异性,并对子集进行聚类。
如果每个单独的序列都需要聚类成员资格,您可以识别从子集中获得的每个聚类的中心点,然后将每个单独的序列分配给最近的中心点。对于k个集群,这需要计算n x k距离而不是完整的成对矩阵。
我在下面使用biofam
TraMineR 附带的数据进行说明。
请注意,直到版本 2.2-0.1,TraMineR 测试了成对距离矩阵的大小,即使在refseq
使用时也是如此。这已在版本 2.2-1 中得到修复。
library(TraMineR)
data(biofam)
b.seq <- seqdef(biofam[, 10:25])
## compute pairwise distances on a random subset
spl <- sample(nrow(b.seq),400)
bs.seq <- b.seq[spl,]
d.lcs <- seqdist(bs.seq, method="LCS", full.matrix=FALSE)
## cluster the random subset
bs.hclust <- hclust(as.dist(d.lcs), method="ward.D")
#plot(bs.hclust, labels=FALSE)
cl <- cutree(bs.hclust,k=4)
## plot clusters for random subset
seqdplot(bs.seq, group=cl, border=NA)
## Medoids of the clusters
c.cl <- disscenter(d.lcs, group=cl, medoids="first")
seqiplot(bs.seq[c.cl,]) # plot of the medoids
## distances to each medoids
dc <- matrix(0,nrow=nrow(b.seq),ncol=length(c.cl))
for (i in 1:length(c.cl)) {
dc[,i] <- seqdist(b.seq,method="LCS",refseq=spl[c.cl[i]])
}
## cluster membership for the full sequence dataset
## is for each row the column with the smallest distance
cl.all <- max.col(-dc)
## now we can plot clusters for the whole dataset
seqdplot(b.seq, group=cl.all, border=NA)
推荐阅读
- c++ - 为什么我从随机数中得到相同的答案?
- sql - 客户列表 IN 和 NOT IN
- linux - 解析 html 元素的内容时,Grep 无法识别的选项“-->”
- python - 如何从python中的交互式shell中打破无限生成器循环
- django-rest-framework - 带有超链接模型序列化程序的可浏览 api 中未显示路由器的基本 url
- jenkins - Jenkins withCredentials 秘密不适用于共享库
- opencv - EmguCV4 中 Mat、MCvMat、Image、MIplImage、ScalarArray、Matrix 之间的区别
- android - Android 通过 uri 访问文件的结果与 SecurityExcepption
- php - Angular 发布到 PHP
- python - Python:将一些参数传递给函数参数