mso*_*ain 5 r cluster-analysis spatial k-means spdep
我想使用k-means聚类从自组织映射中聚类码本.但是,考虑到数据的"空间"特性,我想约束聚类,以便只将连续的节点聚集在一起.环顾四周后,我决定尝试和使用功能skater的spdep包.
这是我一直在做的一个例子.
# the 'codebook' data obtained from the self-organizing map.
# My grid is 15 by 15 nodes.
data <- data.frame(var1=rnorm(15*15, mean = 0, sd = 1), var2=rnorm(15*15, mean = 5, sd = 2))
# creating a matrix with all edges listed
# (so basically one row to show a connection between each pair of adjacent nodes)
require(spdep)
nbs <- cell2nb(nrow=15, ncol=15)
edges <- data.frame(node=rep(1:(tt.grid$xdim*tt.grid$ydim), each=4))
edges$nb <- NA
for (i in 1:(tt.grid$xdim*tt.grid$ydim)) {
vals <- nbs[[i]][1:4]
edges$nb[(i-1)*4+1] <- vals[1]
edges$nb[(i-1)*4+2] <- vals[2]
edges$nb[(i-1)*4+3] <- vals[3]
edges$nb[(i-1)*4+3] <-
vals[4] }
edges <- edges[which(!is.na(edges$nb)),]
edges$from <- apply(edges[c("node", "nb")], 1, min)
edges$to <- apply(edges[c("node", "nb")], 1, max)
edges <- edges[c("to", "from")]
edges <- edges[!duplicated(edges),]
edges <- as.matrix(edges)
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码非常笨拙而且不优雅(请耐心等待).我尝试过使用mstree(nb2listw(nbs))[,1:2]但没有列出所有链接.我不确定我是否完全理解这是做什么的,所以我手动创建了我的边缘矩阵.
然后我尝试将此矩阵用于滑冰者功能
test <- skater(edges=edges, data=data, ncuts=5)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
Error in colMeans(data[id, , drop = FALSE]) :
error in evaluating the argument 'x' in selecting a method for function 'colMeans': Error in data[id, , drop = FALSE] : subscript out of bounds
但是,如果我使用mstree边缘,我不会收到错误消息,但结果根本没有意义.
test <- skater(edges=mstree(nb2listw(nbs))[,1:2], data=data, ncuts=5)
Run Code Online (Sandbox Code Playgroud)
非常感谢有关此错误消息的任何帮助(或关于如何进行空间约束聚类的其他建议).
| 归档时间: |
|
| 查看次数: |
734 次 |
| 最近记录: |