首页 > 解决方案 > 独特的序列太多

问题描述

我有一个包含超过 200 万个序列的大型数据集,其中包括大约 180,000 个独特的序列。我正在使用该seqdist命令来测量距离,我最终还将尝试识别序列簇。以下是我收到的错误消息:

代码和错误信息

有没有办法设置不同的最大序列数,或者其他一些解决方法?非常感谢您!

标签: traminer

解决方案


距离矩阵的大小限制遵循最大允许索引值。该值取决于机器。

对于大量n的数据,一种解决方案是选择序列的随机代表性子集,计算该子集的相异性,并对子集进行聚类。

如果每个单独的序列都需要聚类成员资格,您可以识别从子集中获得的每个聚类的中心点,然后将每个单独的序列分配给最近的中心点。对于k个集群,这需要计算n x k距离而不是完整的成对矩阵。

我在下面使用biofamTraMineR 附带的数据进行说明。

请注意,直到版本 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)

推荐阅读