การพิจารณาว่าต้นไม้ในช่องว่างของป่าถูกทำคลัสเตอร์โดยใช้ R หรือไม่?


14

ชุดข้อมูลที่แนบมาแสดงต้นกล้าประมาณ 6,000 ต้นกล้าในช่องว่างขนาดป่าประมาณ 50 ตัวแปร ฉันสนใจที่จะเรียนรู้ว่าต้นกล้าเหล่านี้เติบโตอย่างไรภายในช่องว่างนั้น (เช่นแบบสุ่มสุ่มแยกย้ายกัน) ดังที่คุณทราบวิธีการดั้งเดิมคือการใช้ Global Moran I อย่างไรก็ตามการรวมต้นไม้ในการรวมของช่องว่างดูเหมือนจะเป็นการใช้ Moran I ที่ไม่เหมาะสมฉันได้ทดสอบสถิติบางอย่างกับ Moran I โดยใช้ระยะทางขีด จำกัด 50 เมตร ซึ่งสร้างผลลัพธ์ไร้สาระ (เช่น p-value = 0.0000000 ... ) ปฏิสัมพันธ์ระหว่างการรวมช่องว่างมีแนวโน้มที่จะสร้างผลลัพธ์เหล่านี้ ฉันได้พิจารณาการสร้างสคริปต์เพื่อวนผ่านช่องว่างระหว่างหลังคาและกำหนดกลุ่มภายในแต่ละช่องว่างแม้ว่าการแสดงผลลัพธ์เหล่านี้สู่สาธารณะจะเป็นปัญหา

วิธีที่ดีที่สุดในการหาจำนวนการจัดกลุ่มภายในคลัสเตอร์คืออะไร?

ป้อนคำอธิบายรูปภาพที่นี่


1
แอรอนคุณบอกว่าคุณลองใช้โมแรนฉันคุณสนใจที่จะวัดว่าคุณลักษณะของต้นอ่อนเปรียบเทียบกับคุณลักษณะของต้นอ่อนใกล้เคียง (เช่นคุณกำลังจัดการกับรูปแบบจุดที่มีเครื่องหมาย ) ดูเหมือนว่าชื่อเรื่องจะบอกเป็นนัยว่าคุณสนใจเฉพาะที่ตั้งของต้นอ่อนที่สัมพันธ์กันและไม่ใช่คุณลักษณะของพวกเขา
MannyG

@MannyG ใช่ฉันสนใจ แต่เพียงผู้เดียวในการพิจารณาว่าต้นกล้านั้นมีการรวมกลุ่มเมื่อเทียบกับที่ตั้งของต้นกล้าอื่น ๆ ภายในช่องว่างของป่า มีความสนใจเพียงสายพันธุ์เดียวและขนาดของต้นกล้าไม่น่าสนใจ
แอรอน

คำตอบ:


7

คุณไม่มีเขตข้อมูลแบบสุ่มดังนั้นการพยายามวิเคราะห์ข้อมูลทั้งหมดของคุณในครั้งเดียวจะเป็นการละเมิดสมมติฐานของสถิติใด ๆ ที่คุณเลือกที่จะทำให้เกิดปัญหา มันไม่ชัดเจนจากการโพสต์ของคุณหากข้อมูลของคุณเป็นกระบวนการจุดทำเครื่องหมาย (เช่นเส้นผ่าศูนย์กลางหรือความสูงที่เกี่ยวข้องกับสถานที่ต้นไม้แต่ละแห่ง) หากข้อมูลนี้ไม่ได้เป็นตัวแทนของกระบวนการจุดที่ทำเครื่องหมายไว้ฉันไม่รู้ว่าคุณใช้โมแรน - ฉันได้อย่างไร หากข้อมูลแสดงเฉพาะตำแหน่งเชิงพื้นที่ฉันขอแนะนำให้ใช้ Ripley's-K กับการแปลง Besag-L เพื่อสร้างมาตรฐานการคาดหวังว่างที่ศูนย์ สิ่งนี้จะช่วยให้สามารถประเมินการทำคลัสเตอร์หลายระดับ หากข้อมูลของคุณมีค่าที่เกี่ยวข้องตัวเลือกที่ดีที่สุดของคุณคือ Local Moran-I (LISA) ฉันจะดูด้วยสถิติทั้งคู่ โดยไม่คำนึงถึงทางเลือกของคุณ คุณยังจะต้องวนซ้ำแต่ละไซต์เพื่อให้ได้ผลลัพธ์ที่ถูกต้อง นี่คือตัวอย่างรหัส R สำหรับการจำลอง Monte Carlo ของ Ripley's-K / Besag's-L โดยใช้ชุดข้อมูลเรดวู้ดในตัวเรดวู้ด ควรตรงไปตรงมาพอสมควรที่จะแก้ไขสิ่งนี้เพื่อวนลูปผ่านเว็บไซต์ของคุณและสร้างกราฟสำหรับแต่ละอัน

# 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 ของการล้างของคุณ แต่คุณจะได้ผลลัพธ์ที่เอนเอียงเพราะขาดการแก้ไขเอฟเฟกต์ขอบ Jeffrey ใช้ขนาดของพื้นที่ศึกษาทั้งหมดเพื่อกำหนด rmax ของเขา
Spacedman

1
ในตัวอย่างของฉันใช่ฉันใช้พื้นที่ทั้งหมด นี่คือเหตุผลที่ฉันแนะนำให้วนลูปผ่านแต่ละไซต์ตัวอย่าง (ช่องว่าง) ทุกครั้งที่คุณเซ็ตย่อยไปยังพื้นที่ตัวอย่างเฉพาะคุณจะรันการวิเคราะห์อีกครั้ง คุณไม่สามารถรักษาพื้นที่การศึกษาทั้งหมดเป็นเขตข้อมูลสุ่มของคุณเนื่องจากคุณไม่มีการสุ่มตัวอย่างอย่างต่อเนื่อง การสุ่มตัวอย่างช่องว่างของคุณมีผลกับแผนการที่เป็นอิสระ โดยปกติแล้วฟังก์ชัน Kest ที่ฉันกำลังเรียกใช้จะใช้การแก้ไขขอบ "เส้นขอบ" มีตัวเลือกการแก้ไขขอบอื่น ๆ ฉันขอยืนยันว่าหน่วยทดสอบของคุณคือช่องว่างระหว่างหลังคาและควรวิเคราะห์เช่นนี้
Jeffrey Evans

1
ในการคิดเกี่ยวกับเรื่องนี้อีกเล็กน้อย คุณควรใช้รูปหลายเหลี่ยมที่แสดงถึงแต่ละช่องว่างเป็นหน้าต่างของคุณ หากคุณเซตปัญหาของคุณเพื่อสะท้อนถึงหน่วยทดสอบแล้ว CSR และ K จะมีอคติเนื่องจากพื้นที่ไม่ได้สะท้อนขนาดช่องว่างระหว่างหลังคาจริง นี่เป็นปัญหาในคำแนะนำของฉันและ @ Spacedman
Jeffrey Evans

2
สังเกตตัวอย่างแบบขยายของฉันใช้กริดหยาบเพียงเพราะมันเป็นวิธีที่ค่อนข้างง่ายในการสร้างสิ่งที่มีโครงสร้างที่ถูกต้อง หน้ากากของคุณควรดูเหมือนแผนที่พื้นที่ป่าเปิดของคุณ ในทางเทคนิคมันผิดที่จะลองและกำหนดหน้ากากจากข้อมูล!
Spacedman

1
@Spacedman ฉันชอบแนวทางของคุณและมีประสิทธิภาพอย่างแน่นอน ข้อกังวลเฉพาะของฉันคือช่องว่างของหลังคาเป็นหน่วยทดลอง ในแนวทางของคุณหากช่องว่างสองช่องใกล้เคียงกันแบนด์วิดท์อาจเป็นไปได้ที่จะรวมการสังเกตจากหน่วยการสุ่มตัวอย่างที่แตกต่างกัน นอกจากนี้สถิติผลลัพธ์ไม่ควรสะท้อนถึง "กลุ่ม" ของหน่วยทดลอง แต่ควรเป็นตัวแทนของแต่ละหน่วยและอนุมานเกี่ยวกับกระบวนการเชิงพื้นที่ที่ดึงมาจากรูปแบบทั่วไปทั่วทั้งหน่วยทดสอบ หากได้รับการปฏิบัติในระดับโลกมันจะแสดงถึงกระบวนการความรุนแรงแบบไม่ขยับเขยื้อนซึ่งละเมิดสมมติฐานทางสถิติ
Jeffrey Evans

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 ของจุดเหล่านั้นในหน้าต่างนั้น เราคาดว่าสิ่งนี้จะไม่ใช่ความรับผิดชอบต่อสังคมเพราะสิ่งที่ดูเหมือนจะเป็นกลุ่มภายในเซลล์ แจ้งให้ทราบล่วงหน้าฉันต้องเปลี่ยนช่วงของระยะทางให้เล็ก - ตามลำดับขนาดเซลล์ - ไม่เช่นนั้นฟังก์ชัน K จะได้รับการประเมินในระยะทางตามขนาดของรูปแบบทั้งหมด

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

ถ้าเราสร้างบางจุด CSR ในเซลล์เดียวกันเราสามารถเปรียบเทียบแปลง K-function อันนี้ควรเป็น CSR มากกว่า:

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

รูปแบบจุดสองจุดใน windows เป็นหย่อม ๆ

คุณไม่สามารถเห็นจุดต่างๆที่รวมอยู่ในเซลล์ในรูปแบบแรก แต่ถ้าคุณพล็อตมันด้วยตัวเองในหน้าต่างกราฟิกมันชัดเจน จุดในรูปแบบที่สองมีลักษณะเหมือนกันภายในเซลล์ (และไม่มีอยู่ในพื้นที่สีดำ) และฟังก์ชัน K นั้นแตกต่างอย่างชัดเจนจากKpois(r)ฟังก์ชัน CSR K สำหรับข้อมูลคลัสเตอร์และคล้ายกับข้อมูลชุดเดียวกัน


2

นอกจากโพสต์ของ Andy:

สิ่งที่คุณต้องการในการคำนวณเป็นตัวชี้วัดความเป็นเนื้อเดียวกันเชิงพื้นที่ (ที่ ergo สมมติฐาน: "เป็นจุดของคลัสเตอร์") เช่นL ริบลีส์และฟังก์ชั่น

โพสต์บล็อกนี้จะอธิบายวิธีการใน R ค่อนข้างดี ตามรหัสที่อธิบายไว้ฉันจะติดป้ายชื่อแต่ละกลุ่มในชุดข้อมูลของคุณจากนั้นคำนวณเป็นวงวนสำหรับแต่ละกลุ่มที่ซองจดหมายสำคัญผ่าน Ripley's K


ขณะนี้ฉันได้ลบคำตอบของฉัน การวิเคราะห์สั้น ๆ บางอย่างชี้ให้เห็นว่าการระบุแผนการแปลงโดยอาศัยโอกาสทาง K หมายถึงลำเอียงสถิติท้องถิ่นที่มีการจัดกลุ่มมากกว่าที่จะได้รับการแนะนำโดยบังเอิญ คำตอบนี้ยังคงใช้กับ +1 (เฉพาะการสร้างหน้าต่างจากข้อมูลนั้นเป็นปัญหามากกว่าที่คำแนะนำดั้งเดิมของฉันจะแนะนำ)
Andy W
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.