gpt4 book ai didi

r - 是否有模仿 ArcGIS 10.1 中的分组分析工具的 R 函数?

转载 作者:行者123 更新时间:2023-12-01 14:19:21 25 4
gpt4 key购买 nike

我是 R 的初学者,但使用 Esri 的 ArcGIS 是专家。

我想使用 R 运行探索性分组/集群分析,例如 Arc 的 10.1 工具 here .

所需的最终产品必须是 map 可视化。我找到了 this thread on hierarchical cluster analysis在这里。这是否与 Esri 的数据分组分析类型相同? ArcGIS 工具为参数提供了很大的灵 active ,我希望用 R 复制此功能。

同样,我是 R 初学者。非常感谢任何信息、建议或忠告。​​

谢谢,迈克

最佳答案

据我所知,这是一个简单的 KNN 分析。 ESRI 帮助解释的替代“无距离矩阵”组件似乎非常不受欢迎。基本上,他们使用 K 均值聚类和使用随机播种的区域增长方法。这看起来非常不稳定,可能会返回高度可变的结果。似乎他们正在执行一些操作来避免一些问题,例如断开连接的区域,因此可能需要做一些事情才能准确地重新创建他们的结果。您可以近似 spdep 中的“空间约束”选项。下面是一个距离分析的简短示例,可以为您提供一个起点。请记住,为了分配“类”,您需要设置某种类型的循环结构。

require(sp)
require(spdep)

data(meuse)
coordinates(meuse) <- ~x+y

# Create distance matrix of specified range
meuse.dist <- dnearneigh(coordinates(meuse), 0.0001, 1000)

# Coerce distance object to a list object with distances for each observation
dist.list <- nbdists(meuse.dist, coordinates(meuse))

# Create a new column with the distance to the nearest observation using lapply and unlist
meuse@data <- data.frame(meuse@data, NNDist=unlist(lapply(dist.list, FUN=function(x) min(x))))

# Plot results
spplot(meuse, "NNDist", col.regions=colorRampPalette(c("blue","yellow","red"),
interpolate="spline")(10) )

您可能还想探索层次聚类。然而,对于更大的数据集,hclust 需要一个三角距离矩阵,而 dnearneigh 则不需要。下面是一个使用约束层次聚类的示例。

# SPATIALLY CONSTRAINED CLUSTERING
require(sp)
require(rioja)

data(meuse)
coordinates(meuse) <- ~x+y
cdat <- data.frame(x=coordinates(meuse)[,1],y=coordinates(meuse)[,2])
rownames(cdat) <- rownames(meuse@data)

chc <- chclust(dist(cdat), method="conslink")

# KNN
chc.n3 <- cutree(chc, k=3)

# DISTANCE
chc.d200 <- cutree(chc, h=200)

meuse@data <- data.frame(meuse@data, KNN=as.factor(chc.n3), DClust=chc.d200)

opar <- par
par(mfcol=c(1,2))
cols <- topo.colors(length(unique(meuse@data$KNN)))
color <- rep("xx", nrow(meuse@data))
for(i in 1:length(unique(meuse@data$KNN))) {
v <- unique(meuse@data$KNN)[i]
color[(meuse@data$KNN == v)] <- cols[i]
}
plot(meuse, col=color, pch=19, main="KNN Clustering")

cols <- topo.colors(length(unique(meuse@data$DClust)))
color <- rep("xx", nrow(meuse@data))
for(i in 1:length(unique(meuse@data$DClust))) {
v <- unique(meuse@data$DClust)[i]
color[(meuse@data$DClust == v)] <- cols[i]
}
plot(meuse, col=color, pch=19, main="Distance Clustering")
par <- opar

关于r - 是否有模仿 ArcGIS 10.1 中的分组分析工具的 R 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15365729/

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