フォレストギャップ内のツリーがRを使用してクラスター化されているかどうかを判断しますか?


14

添付のデータセットは、約50の可変サイズの森林ギャップに約6000の苗木を示しています。これらの苗木がそれぞれのギャップ内でどのように成長しているのか(クラスター化、ランダム、分散)を知りたいと思います。ご存知のように、従来のアプローチはGlobal Moran's Iを実行することです。ただし、ギャップの集合内のツリーの集合は、Moran's Iの不適切な使用のようです。これは無意味な結果をもたらしました(つまり、p値= 0.0000000 ...)。ギャップ集約間の相互作用により、これらの結果が生成される可能性があります。個々のキャノピーのギャップをループし、各ギャップ内のクラスタリングを決定するスクリプトを作成することを検討しましたが、これらの結果を一般に表示することには問題があります。

クラスター内のクラスタリングを定量化するための最良のアプローチは何ですか?

ここに画像の説明を入力してください


1
アーロンは、あなたが苗木の方法を測定するのに興味を持っている、あなたはモランのIを実行しようとしたと言う属性が(つまり、あなたが扱っている隣の苗木の属性と比較して顕著な点パターン)?タイトルは、苗木の相対的な位置のみ関心があり、それらの属性ではないことを暗示しているようです。
MannyG

@MannyGはい、苗木が特定の森林のギャップ内の他の苗木の位置に対してクラスター化されているかどうかを判断することにのみ興味があります。関心のある種は1つだけであり、苗木のサイズは関心の対象ではありません。
アーロン

回答:


7

一様なランダムフィールドがないため、すべてのデータを一度に分析しようとすると、問題をスローするために選択した統計の仮定に違反します。データがマークされたポイントプロセス(つまり、各ツリーの場所に関連付けられた直径または高さ)であるかどうかは、投稿からわかりません。このデータがマークされたポイントプロセスを表していない場合、Moran's-Iをどのように適用したかわかりません。データが空間位置のみを表す場合、Ripley's-KをBesag-L変換とともに使用して、ゼロでのnull期待値を標準化することをお勧めします。これにより、クラスタリングのマルチスケール評価が可能になります。データに関連する値がある場合、最適なオプションはローカルMoran's-I(LISA)です。実際に両方の統計で調べます。選択に関係なく、有効な結果を生成するには、個々のサイトをループする必要があります。ビルトインレッドウッド苗木データセットを使用したリプリーK /ベサグLのモンテカルロシミュレーション用のRコードの例を次に示します。これを変更してサイトをループし、サイトごとにグラフを作成するのはかなり簡単です。

# ADD REQUIRED PACKAGES
require(sp)
require(spatstat)
options(scipen=5)

# USE REDWOOD SAPLING DATASET
spp <- SpatialPoints(coords(redwood))

###################################################
###### START BESAG'S-L MONTE CARLO  ANALYSUS ######
###################################################
# CREATE CONVEX HULL FOR ANALYSIS WINDOW                       
W=ripras(coordinates(spp)) 

# COERCE TO spatstat ppp OBJECT
spp.ppp=as.ppp(coordinates(spp), W)                     
  plot(spp.ppp) 

# ESTIMATE BANDWIDTH
area <- area.owin(W)
lambda <- spp.ppp$n/area
 ripley <- min(diff(W$xrange), diff(W$yrange))/4
   rlarge <- sqrt(1000/(pi * lambda))
     rmax <- min(rlarge, ripley)
bw <- seq(0, rmax, by=rmax/10)  

# CALCULATE PERMUTED CROSS-K AND PLOT RESULTS       
Lenv <- envelope(spp.ppp, fun="Kest", r=bw, i="1", j="2", nsim=99, nrank=5, 
                 transform=expression(sqrt(./pi)-bw), global=TRUE)            
plot(Lenv, main="Besag's-L", xlab="Distance", ylab="L(r)", legend=F, col=c("white","black","grey","grey"), 
    lty=c(1,2,2,2), lwd=c(2,1,1,1) )
     polygon( c(Lenv$r, rev(Lenv$r)), c(Lenv$lo, rev(Lenv$hi)), col="lightgrey", border="grey")
       lines(supsmu(bw, Lenv$obs), lwd=2)
       lines(bw, Lenv$theo, lwd=1, lty=2)
         legend("topleft", c(expression(hat(L)(r)), "Simulation Envelope", "theo"), pch=c(-32,22),
                col=c("black","grey"), lty=c(1,0,2), lwd=c(2,0,2), pt.bg=c("white","grey"))

1
ただし、ポイントパターンのウィンドウとして凸包を使用することはできません!ウィンドウは、ポイントを生成するパターンが動作する領域であることを忘れないでください。これらの設定された領域でのみ木が成長することをアプリオリに知っており、それを反映するようにウィンドウを設定する必要があります。K(r)の範囲をクリアの0.3xサイズの非常に小さい値に設定することでこれを緩和できますが、エッジ効果の補正がないため、結果に偏りが生じます。ジェフリーは、研究領域全体のサイズを使用して、rmaxを定義しています。
スペースマン

1
私の例では、はい、リージョン全体を使用しています。これにより、各サンプルサイト(ギャップ)をループすることをお勧めします。特定のサンプル領域にサブセットするたびに、分析を再実行します。継続的なサンプリングがないため、スタディエリア全体をランダムフィールドとして扱うことはできません。サンプリングされたギャップのみを持つことで、実際には独立したプロットができます。デフォルトで呼び出しているKest関数は、「境界」エッジ補正を使用します。他にも利用可能なエッジ補正オプションがあります。私はあなたの実験ユニットが天蓋の隙間であり、そのように分析されるべきだと主張します。
ジェフリーエヴァンス

1
これについてもう少し考えます。実際には、各ギャップをウィンドウとして表すポリゴンを使用する必要があります。実験ユニットを反映するように問題をサブセット化すると、面積が実際の天蓋のギャップサイズを反映しないため、CSRとKにバイアスがかかります。これは、私の推奨事項と@Spacedman推奨事項の両方の問題です。
ジェフリーエヴァンス

2
拡張された例では、粗いグリッドのみを使用したことに注意してください。これは、おおよそ正しい構造で何かを作成するかなり簡単な方法であったためです。マスクは、森林地帯の地図のように見えるはずです。データからマスクを定義しようとするのは技術的に間違っています!
スペースマン

1
@Spacedman。私はあなたのアプローチが好きで、確かに効率的です。私が特に懸念しているのは、天蓋の隙間が実験単位であることです。アプローチでは、2つのギャップが近接している場合、帯域幅に異なるサンプリングユニットからの観測値が含まれている可能性があります。さらに、結果の統計は、実験ユニットの「プール」を反映すべきではありませんが、各ユニットを代表し、実験ユニット全体の共通パターンから引き出された空間プロセスの推論でなければなりません。グローバルに扱われた場合、統計的な仮定に違反する非定常強度プロセスを表します。
ジェフリーエバンス

4

あなたが持っているのは、いくつかの小さな切断された多角形領域であるウィンドウを持つポイントパターンです。

package:spatstat正しいウィンドウを入力する限り、CSR のテストを使用できるはずです。これは、各クリアを定義する(x、y)ペアのセットの数、または空間上の(0,1)値のバイナリマトリックスのいずれかです。

まず、データのように見えるものを定義します。

set.seed(310366)
nclust <- function(x0, y0, radius, n) {
               return(runifdisc(n, radius, centre=c(x0, y0)))
             }
c = rPoissonCluster(15, 0.04, nclust, radius=0.02, n=5)
plot(c)

そして、私たちのクリアリングがたまたま正方形のセルであるふりをさせてください。

m = matrix(0,20,20)
m[1+20*cbind(c$x,c$y)]=1
imask = owin(c(0,1),c(0,1),mask = t(m)==1 )
pp1 = ppp(x=c$x,y=c$y,window=imask)
plot(pp1)

そのため、それらのポイントのK関数をそのウィンドウにプロットできます。ポイントはセル内に集中しているように見えるため、これは非CSRであると予想されます。距離の範囲を小さくする必要があることに注意してください-セルサイズのオーダー-それ以外の場合、K関数はパターン全体のサイズの距離で評価されます。

plot(Kest(pp1,r=seq(0,.02,len=20)))

同じセルでいくつかのCSRポイントを生成する場合、K関数プロットを比較できます。これはCSRに似ているはずです。

ppSim = rpoispp(73/(24/400),win=imask)
plot(ppSim)
plot(Kest(ppSim,r=seq(0,.02,len=20)))

斑点のあるウィンドウの2つのポイントパターン

最初のパターンのセルにクラスター化されたポイントを実際に見ることはできませんが、グラフィックスウィンドウにそれ自体をプロットすると、明確になります。2番目のパターンのポイントはセル内で均一であり(黒の領域には存在しません)、K関数はKpois(r)、クラスターデータのCSR K関数と均一なデータのCSR K 関数とは明らかに異なります。


2

Andyの投稿に加えて:

計算したいのは、リプリーのL関数とK関数などの空間的均一性の尺度(仮説:「あなたのポイントはクラスター化されていますか?」)です。

このブログ投稿では、Rのハウツーを非常によく説明しています。説明したコードに基づいて、最初にデータセットの各クラスターにラベルを付け、次に各クラスターのループで、リプリーのKを介して重要なエンベロープを計算します


現在、回答を削除しました。いくつかの簡単な分析は、K-meansに基づいて日和見的にプロットを識別することにより、ローカル統計が偶然に示唆されるよりもクラスター化されるように偏っていることを示唆しました。この回答はまだ+1に当てはまります(データからウィンドウを作成するだけでは、元の回答が示唆するよりも問題が多くなります)。
アンディW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.