3

私は R の初心者ですが、Esri の ArcGIS のエキスパートです。

R を使用して、Arc の 10.1 ツールのような探索的グループ化/クラスター分析を実行したいと思います

必要な最終製品は、マップのビジュアライゼーションでなければなりません。SOの階層クラスター分析に関するこのスレッドを見つけました。これは、Esri のものと同じタイプのデータ グループ化分析ですか? ArcGIS ツールは、パラメーターの柔軟性が非常に高いため、この機能を R で再現したいと考えています。

繰り返しますが、私はRの初心者です。情報、提案、またはアドバイスは大歓迎です。

ありがとう、マイク

4

1 に答える 1

3

私が言える限り、これは単純な KNN 分析です。ESRI ヘルプで説明されている代替の「距離行列なし」コンポーネントは、まったく望ましくないようです。基本的に、彼らはランダムシードを使用した領域成長アプローチでK-meansクラスタリングを使用しています。これは非常に不安定なようで、非常に変動性の高い結果を返す可能性があります。切断された領域などの問題を回避するために少し操作を行っているように見えるため、結果を正確に再現するには多少の作業が必要になる場合があります。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
于 2013-03-12T16:22:35.963 に答える