2015-09-16 86 views
2

我想应用WeightedCluster包中可用的功能来分析通过TraMineR获得的多通道序列。我想这样做,但由于多通道序列是由每个通道分开组成的列表,因此我在例如seqtreedisplay()和所有需要sequence object的功能中遇到错误。通过WeightedCluster包进行多通道序列分析

这是一个例子:

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包的功能的方法。我特别感兴趣的是使用初始病房集群(功能wcKMedioids())的算法。如果不可能,这是R中集群多通道的最佳选择吗? 非常感谢!

回答

2

as.seqtree函数(从WeightedCluster)需要stslist类的对象(如由TraMineRseqdef功能。生产)作为seqdata参数。在你的情况下,fullsequences是这些对象的列表(并行序列列表),它本身不属于类stslist。这会导致错误。

即使你能够定义一个并行序列树,问题在于seqtreedisplay不知道如何绘制并行序列。这意味着您必须为状态序列列表定义一个绘图函数,并使用更一般的disstreedisplay函数而不是seqtreedisplay,将绘图函数作为imagefunc参数传递。

总而言之,存在两个问题。首先,您需要一些as.disstree等效的as.seqtree,它们适用于非stslist对象的分层聚类。其次,你需要一个并行序列的绘图函数。第一个问题纯粹是技术问题,应该很容易解决。第二个更概念化。