gpt4 book ai didi

r - 如何创建一个 "Clustergram"的情节? (在 R 中)

转载 作者:行者123 更新时间:2023-12-04 11:31:21 24 4
gpt4 key购买 nike

我遇到了 this interesting website ,有了一种可视化称为“Clustergram”的聚类算法的方法:

alt text
(来源:schonlau.net)

我不确定这到底有多大用处,但为了使用它,我想用 R 重现它,但我不确定如何去做。

您将如何为每个项目创建一条线,使其在不同数量的集群中保持一致?

这是一个示例代码/数据,可用于潜在答案:

hc <- hclust(dist(USArrests), "ave")
plot(hc)

最佳答案

更新 :我发布了一个带有冗长示例和讨论的解决方案 here . (它基于我在下面给出的代码)。此外,Hadley 非常友善,并提供了代码的 ggplot2 实现。

这是一个基本解决方案(更好的解决方案,请查看上面的“更新”):

set.seed(100)
Data <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2),
matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2))
colnames(Data) <- c("x", "y")

# noise <- runif(100,0,.05)
line.width <- rep(.004, dim(Data)[1])
Y <- NULL
X <- NULL
k.range <- 2:10

plot(0, 0, col = "white", xlim = c(1,10), ylim = c(-.5,1.6),
xlab = "Number of clusters", ylab = "Clusters means",
main = "(Basic) Clustergram")
axis(side =1, at = k.range)
abline(v = k.range, col = "grey")

centers.points <- list()

for(k in k.range){
cl <- kmeans(Data, k)

clusters.vec <- cl$cluster
the.centers <- apply(cl$centers,1, mean)

noise <- unlist(tapply(line.width, clusters.vec,
cumsum))[order(seq_along(clusters.vec)[order(clusters.vec)])]
noise <- noise - mean(range(noise))
y <- the.centers[clusters.vec] + noise
Y <- cbind(Y, y)
x <- rep(k, length(y))
X <- cbind(X, x)

centers.points[[k]] <- data.frame(y = the.centers , x = rep(k , k))
# points(the.centers ~ rep(k , k), pch = 19, col = "red", cex = 1.5)
}

require(colorspace)
COL <- rainbow_hcl(100)
matlines(t(X), t(Y), pch = 19, col = COL, lty = 1, lwd = 1.5)

# add points
lapply(centers.points,
function(xx){ with(xx,points(y~x, pch = 19, col = "red", cex = 1.3)) })

enter image description here

关于r - 如何创建一个 "Clustergram"的情节? (在 R 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3033594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com