2015-09-16 88 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對象的分層聚類。其次,你需要一個並行序列的繪圖函數。第一個問題純粹是技術問題,應該很容易解決。第二個更概念化。