在R中聚类3D数组

时间:2014-01-24 22:43:44

标签: arrays r cluster-analysis

我正在尝试将我在数组中的3D数据进行聚类。它实际上是来自3D图像的信息,因此该数组表示具有x,y,z值的单个图像。我想知道体素倾向于聚集什么。该数组看起来像这样。

 dim(x)
[1] 34 34 34  1

我该如何解决这个问题?我尝试用scatterplot3d进行绘图,但它没有用。

1 个答案:

答案 0 :(得分:2)

所以这是集群尝试。如果你想要更好的答案,你真的应该提供数据。

library(reshape2)   # for melt(...)
library(rgl)        # for plot3d(...)

set.seed(1)         # to create reproducible sample

# 3D matrix, values clustered around -2 and +2
m      <- c(rnorm(500,-2),rnorm(500,+2))
dim(m) <- c(10,10,10) 
v      <- melt(m, varnames=c("x","y","z"))  # 4 columns: x, y, z, value
# interactive 3D plot, coloring based on value
plot3d(v$x,v$y,v$z, col=1+round(v$value-min(v$value)),size=5)
# identify clusters
v      <- scale(v)                          # need to scale or clustering will fail
v      <- data.frame(v)                     # need data frame for later
d  <- dist(v)                               # distance matrix
km <- kmeans(d,centers=2)                   # kmeans clustering, 2 clusters
v$clust <- km$cluster                       # identify clusters
# plot the clusters
plot(z[1:4],col=v$clust)                    # scatterplot matrix
plot3d(v$x,v$y,v$z, col=v$clust,size=5)     # 3D plot, colors based in cluster

主要思想是将您的3D矩阵重塑为“长”格式,其中包含x,y,z列和实际矩阵值。所以现在x,y和z包含位置信息(这里,索引值1:10)。您需要对此进行缩放,以使value列和索引列的大小相同,否则群集会给您带来误导性结果。