clusplot - 显示变量

时间:2015-04-21 11:11:45

标签: r cluster-analysis pca

我想将用于pca的变量添加到clusplot图中作为箭头。我不确定是否已经实现了一种方法(我在文档中找不到任何内容)。

我制作了一个如下所示的群集图:

clusters produced with clusplot

使用包princomp,我可以在类似的表示空间中独立地绘制观察结果,并将变量(列)作为箭头:

enter image description here

有没有办法同时做两件事,通过在同一图表上显示聚类和pca的变量?

1 个答案:

答案 0 :(得分:1)

我想今天和OP一样,最后把double[,] arr = { {1, 2}, {3, 4} }; double[,] copy = arr.Clone() as double[,]; copy[0, 0] = 2; //it really copies the values, not a shallow copy, //after: //arr[0,0] will be 1 //copy[0,0] will be 2 clusplot的片段放在一起。如果你想做同样的事情,这个结果可能很有用:

biplot

当然还有很大的改进空间(因为这只是复制在一起),但我想任何人都可以根据需要轻松调整它。

如果你想知道为什么箭头(加载* sdev)用0.8 * sqrt(n)缩放:我完全不知道。我会绘制加载* sdev,它应该类似于主成分和变量之间的相关性,但这就是clusplot2 <- function(dat, clustering, ...) { clusplot(dat, clustering, ...) ## this is from clusplot.default pca <- princomp(dat, scores = TRUE, cor = (ncol(dat) != 2)) ## this is (adapted) from biplot.princomp directions <- t(t(pca$loadings[, 1:2]) * pca$sdev[1:2]) * sqrt(pca$n.obs) ## all below is (adapted) from biplot.default unsigned.range <- function(x) c(-abs(min(x, na.rm = TRUE)), abs(max(x, na.rm = TRUE))) x <- predict(pca)[, 1:2] y <- directions rangx1 <- unsigned.range(x[, 1L]) rangx2 <- unsigned.range(x[, 2L]) rangy1 <- unsigned.range(y[, 1L]) rangy2 <- unsigned.range(y[, 2L]) xlim <- ylim <- rangx1 <- rangx2 <- range(rangx1, rangx2) ratio <- max(rangy1/rangx1, rangy2/rangx2) par(new = T) col <- par("col") if (!is.numeric(col)) col <- match(col, palette(), nomatch = 1L) col <- c(col, col + 1L) cex <- rep(par("cex"), 2) plot(y, axes = FALSE, type = "n", xlim = xlim * ratio, ylim = ylim * ratio, xlab = "", ylab = "", col = col[1L]) axis(3, col = col[2L]) axis(4, col = col[2L]) box(col = col[1L]) text(y, labels = names(dat), cex = cex[2L], col = col[2L]) arrows(0, 0, y[, 1L] * 0.8, y[, 2L] * 0.8, col = col[2L], length = 0.1) } ############################################################ library(cluster) dat <- iris[, 1:4] clus <- pam(dat, k = 3) clusplot2(dat, clus$clustering, main = "Test") 的作用。

无论如何,这应该生成与biplot相同的箭头,并使用与biplot.princomp相同的pca,这是我的主要目标。