通过WeightedCluster包进行多通道序列分析

时间:2015-09-16 08:47:23

标签: r cluster-analysis sequences traminer

我想应用WeightedCluster包中的可用功能来分析我通过TraMineR获得的多渠道序列。我这样做,但由于多通道序列是由每个通道分开组成的列表,我在seqtreedisplay()等函数和所有需要sequence object的函数中都会出错。

这是一个例子:

fullsequences <- list(
  work_sequence2 = work_sequence[which(rownames(work_sequence) %in% commonid),],
  educ_sequence2 = educ_sequence[which(rownames(educ_sequence) %in% commonid),],
  part_sequence2 = part_sequence[which(rownames(part_sequence) %in% commonid),],
  kid_sequence2 = kid_sequence[which(rownames(kid_sequence) %in% commonid),]
)  # a total of 926 with complete sequences on all channels

multidist <- seqdistmc(
          channels = fullsequences,
          method = "OM", 
          norm = FALSE, 
          sm = list("TRATE","TRATE","TRATE","TRATE"), 
          with.missing=FALSE, 
          full.matrix=TRUE, 
          link="sum")  

clusterward <- hclust(as.dist(multidist), method = "ward")  

seqtreedisplay(as.seqtree(clusterward, ncluster = 5,
           seqdata = fullsequences , diss = multidist))

Error in seqlegend(seqdata, fontsize = legend.fontsize, title = "Legend",  : 
  data is not a sequence object, use seqdef function to create one

是否有方法在多通道类型对象(序列列表)上使用WeightedCluster包的功能。我特别感兴趣的是使用 Partition Around Medioids 算法和初始病房集群(函数wcKMedioids())。如果不可能,哪个是R中群集多渠道的最佳替代方案? 非常感谢提前!

1 个答案:

答案 0 :(得分:2)

as.seqtree函数(来自WeightedCluster)需要一个类stslist的对象(由TraMineR seqdef函数生成)为{{1}参数。在您的情况下,seqdata是此类对象的列表(并行序列列表),它本身不是类fullsequences。这会导致错误。

即使您能够定义并行序列树,问题仍然是stslist不知道如何绘制并行序列。这意味着您必须为状态序列列表定义绘图函数,并使用更通用的seqtreedisplay函数而不是disstreedisplay,将绘图函数作为seqtreedisplay参数传递。< / p>

总结一下,有两个问题。首先,您需要一些imagefunc等效的as.disstree,它们可用于非stslist对象的层次聚类。其次,您需要并行序列的绘图功能。第一个问题纯粹是技术问题,应该很容易解决。第二个是概念性的。