R을 사용하여 포리스트 간격 내의 트리를 클러스터할지 여부를 결정합니까?


14

첨부 된 데이터 세트는 약 50 개의 가변 크기의 산림 간격에서 약 6000 개의 묘목을 보여줍니다. 나는이 묘목들이 각각의 갭 내에서 어떻게 성장하고 있는지에 관심이 있습니다 (즉, 군집, 무작위, 분산). 아시다시피, 전통적인 접근 방식은 Global Moran 's I을 실행하는 것입니다. 그러나 격차 집계 내의 트리 집계는 Moran 's I의 부적절한 사용으로 보입니다. 나는 50m의 임계 거리를 사용하여 Moran 's I로 일부 테스트 통계를 실행했습니다. 무의미한 결과를 산출했습니다 (예 : p- 값 = 0.0000000 ...). 갭 어 그리 게이션 간의 상호 작용이 이러한 결과를 생성 할 수 있습니다. 개별 캐노피 간격을 반복하고 각 간격 내에서 클러스터링을 결정하는 스크립트를 만드는 것을 고려했지만 이러한 결과를 공개하는 것은 문제가 될 수 있습니다.

클러스터 내에서 클러스터링을 정량화하는 가장 좋은 방법은 무엇입니까?

여기에 이미지 설명을 입력하십시오


1
아론은, 당신은 당신이, 모란의 I를 실행하려고하면 묘목의 방법 측정에 관심이 있다고 속성 (즉, 당신이 다루고있는 묘목 '속성을 이웃과 비교 표시된 점 패턴)? 제목은 당신이 그들의 특성이 아닌 서로에 대한 묘목 의 위치 에만 관심 이 있음을 암시하는 것 같습니다 .
MannyG

@MannyG 예, 주어진 산림 간격 내에서 묘목이 다른 묘목의 위치와 관련하여 군집화되어 있는지 확인하는 데에만 관심이 있습니다. 관심있는 종은 하나 뿐이며 묘목의 크기는 관심이 없습니다.
Aaron

답변:


7

균일 한 랜덤 필드가 없으므로 모든 데이터를 한 번에 분석하려고하면 문제를 던지기로 선택한 통계의 가정을 위반하게됩니다. 데이터가 표시된 포인트 프로세스 (즉, 각 트리 위치와 관련된 직경 또는 높이) 인 경우 게시물에서 명확하지 않습니다. 이 데이터가 마크 포인트 프로세스를 나타내지 않는 경우 어떻게 Moran's-I를 적용했는지 알 수 없습니다. 데이터가 공간적 위치 만 나타내는 경우에는 Besag-L 변환과 함께 Ripley's-K를 사용하여 null 기대 값을 0으로 표준화하는 것이 좋습니다. 이를 통해 다중 규모 클러스터링 평가가 가능합니다. 데이터에 관련 값이있는 경우 가장 좋은 방법은 지역 Moran's-I (LISA)입니다. 나는 실제로 두 가지 통계로 그것을 볼 것입니다. 당신의 선택에 관계없이 유효한 결과를 얻으려면 각 개별 사이트를 계속 반복해야합니다. 다음은 내장 된 레드 우드 묘목 데이터 세트를 사용하여 Ripley's-K / Besag's-L의 Monte Carlo 시뮬레이션을위한 예제 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.3 배 크기로 매우 작은 것으로 설정하면이를 완화 할 수 있지만, 가장자리 효과 보정이 없기 때문에 편향된 결과를 얻을 수 있습니다. Jeffrey는 전체 연구 영역의 크기를 사용하여 rmax를 정의합니다.
Spacedman

1
예를 들어, 전체 지역을 사용하고 있습니다. 이것이 바로 각 샘플 사이트 (갭)를 반복하도록 권장하는 이유입니다. 특정 샘플 영역을 부분 집합 할 때마다 분석을 다시 실행합니다. 연속 샘플링이 없기 때문에 전체 연구 영역을 임의의 필드로 취급 할 수 없습니다. 실제로 표본 간격 만 있으면 독립적 인 도표가 있습니다. 내가 호출하는 Kest 함수는 기본적으로 "테두리"가장자리 수정을 사용합니다. 사용 가능한 다른 가장자리 보정 옵션이 있습니다. 나는 당신의 실험 단위가 캐노피 갭이라고 주장하고 그렇게 분석해야합니다.
Jeffrey Evans

1
이것에 대해 조금 더 생각하면. 각 간격을 창으로 나타내는 다각형을 사용해야합니다. 실험 단위를 반영하기 위해 문제를 부분 집합하면 해당 영역이 실제로 캐노피 간격 크기를 반영하지 않기 때문에 CSR과 K가 바이어스됩니다. 이것은 내 및 @Spacedman의 권장 사항 모두에서 문제입니다.
Jeffrey Evans

2
확장 된 예제는 대략적으로 올바른 그리드를 사용하여 무언가를 만드는 매우 간단한 방법이기 때문에 거친 그리드 만 사용했습니다. 마스크는 열린 숲 지역의 맵과 같아야합니다. 데이터에서 마스크를 정의하고 정의하는 것은 기술적으로 잘못되었습니다!
Spacedman

1
@Spacedman. 나는 당신의 접근 방식을 좋아하며 확실히 효율적입니다. 저의 특별한 관심은 캐노피 갭이 실험 단위라는 것입니다. 귀하의 접근 방식에서, 두 개의 간격이 근위에 있으면 대역폭에 다른 샘플링 단위의 관측치가 포함되어있을 수 있습니다. 또한 결과 통계량은 실험 단위의 "풀"을 반영하지 않아야하지만 각 단위를 대표하고 실험 단위에 걸쳐 공통 패턴에서 도출 된 공간 프로세스에 대한 추론이어야합니다. 전 세계적으로 취급되는 경우, 이는 고정 가정 프로세스를 나타내며, 이는 통계적 가정을 위반합니다.
Jeffrey Evans

4

당신이 가진 것은 작은 작은 비 연결 다각형 영역 인 창을 가진 점 패턴입니다.

package:spatstatCSR에 올바른 창을 제공하는 한 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)))

고르지 않은 창에서 두 점 패턴

첫 번째 패턴에서 셀에 점이 모여있는 것을 실제로 볼 수는 없지만 그래픽 창에서 그 점을 명확하게 표시하면 명확합니다. 두 번째 패턴의 포인트는 셀 내에서 균일하며 (검은 색 영역에는 존재하지 않음) K- 함수는 Kpois(r)군집 데이터의 CSR K- 기능과 동일하고 균일 한 데이터와 유사합니다.


2

Andy의 게시물 외에도 :

계산하려는 것은 Ripley의 L 및 K 함수와 같은 공간적 동질성 (가설 : "포인트가 군집되어 있습니까?")의 척도입니다 .

블로그 게시물 은 R의 사용법을 잘 설명합니다. 설명 된 코드를 기반으로 먼저 데이터 세트의 각 클러스터에 레이블을 지정한 다음 Ripley 's K를 통해 각 클러스터에 대한 중요한 봉투를 루프로 계산합니다


현재 답변을 삭제했습니다. 일부 간단한 분석은 K- 평균을 기반으로 플롯을 기회 적으로 식별하는 것이 우연히 제안 된 것보다 더 많은 군집으로 로컬 통계를 편향 시켰다고 제안했습니다. 이 대답은 여전히 ​​+1에도 적용됩니다 (데이터에서 창을 만드는 것이 원래의 대답보다 더 문제가됩니다).
Andy W
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.