1

R のデンドログラム内のクラスターの特定の機能を調べるために、identify を使用しています。Identify は、「hclust」オブジェクトを使用して完全に正常に機能していますが、「 hclust」ではなく「dendrogram」クラスの水平デンドログラムに必要です。パッケージ dendextend をインストールしました。これは通常、identify の機能をクラス dendrogram のオブジェクトと水平樹形図 ( http://rpackages.ianhowson.com/cran/dendextend/man/identify.dendrogram.html ) に拡張する必要があります。私の特定のデータセットでは、identify は (クラスの樹状図の) 垂直樹状図では機能していますが、水平樹状図では機能していません。私がいつも得るエラーは次のとおりです。

Error in rect.dendrogram(x, k = k, x = X$x, cluster = cluster[, k - 1],  : 
k must be between 2 and 10

再現可能で単純化された例をここで見つけてください。

#Install packages
install.packages(c("TraMineR","dendextend"))
#Load packages
library(TraMineR)
library(dendextend)

#Create fake dataset (each row is a sequence of characters)
a <- c(rep('A',50), rep('B',50))
seqdf <- rbind(a=a, b=sample(a), c=sample(a), d=sample(a), e=sample(a), f=sample(a),g=sample(a),h=sample(a),
i=sample(a), j=rep('A',100),k=rep('B',100),l=sample(a)) 
colnames(seqdf)<- paste(rep('a',100),c(1:100),sep='') 

#Turn it into a sequence object 
seq_def <- seqdef(seqdf, 1:100, id = rownames(seqdf), xtstep = 4)

#Calculate the dissimilarity (hamming distance) between sequences 
hd <- seqdist(seq_def, method = "HAM", with.missing = TRUE)
rows<-list(rownames(seqdf),rownames(seqdf))
dimnames(hd) <- rows
#Perform Ward clustering on dissimilarity matrix hd
ward <- hclust(as.dist(hd), method = "ward.D2")     
#Dendrogram object
dend <- as.dendrogram(ward) 

#Horizontal dendrogram 
plot(dend, horiz=TRUE)
identify(dend, horiz=TRUE) # HERE IDENTIFY GIVES AN ERROR

#Vertical dendrogram
plot(dend)
identify(dend) # this works, there is no error

誰かがこの問題を解決する方法を知っていることを願っています。

一番、

4

1 に答える 1

1

identify.hclustこれは、画面の端に「近すぎる」をクリックしたときの識別機能 (たとえば ) の一般的な動作です。実行すると(そして葉の近くをクリックすると)これを見ることができます:

plot(ward)
identify(ward, MAXCLUSTER = 12) 

これがやや面倒な動作であることには同意します (希望する場所を常に正確にクリックできるとは限らないため)。そこで、dendextend パッケージに新しいパラメーター( stop_if_out) を追加しました。これはFALSE、identify.dendrogram のデフォルトで に設定されています。これは、デンドログラムの外側をクリックしても機能が停止しないことを意味します。(垂直プロットと水平プロットの両方に適用されます)

このバージョンを CRAN にリリースするには、おそらく時間がかかるでしょうが、devtools を使用して次のコマンドを実行することで、簡単にアクセスできます。

install.packages.2 <- function (pkg) if (!require(pkg)) install.packages(pkg);
install.packages.2('devtools')
# make sure you have Rtools installed first! if not, then run:
#install.packages('installr'); install.Rtools()
devtools::install_github('talgalili/dendextend')

これが役立つことを願っています。

于 2015-09-20T08:17:22.000 に答える