2

我想应用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?提前非常感谢!

4

1 回答 1

2

as.seqtree函数 (from WeightedCluster) 需要一个类的对象(stslistTraMineR seqdef函数产生)作为seqdata参数。在您的情况下,fullsequences是此类对象的列表(并行序列列表),它本身不是 class stslist。这会导致错误。

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

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

于 2015-09-16T13:47:26.040 回答