นี่เป็นคำถามที่ยากเนื่องจากมีสถิติกระบวนการเชิงพื้นที่ที่พัฒนาขึ้นสำหรับคุณลักษณะของบรรทัดไม่มากนัก โดยไม่ต้องขุดลงไปในสมการและรหัสอย่างจริงจังสถิติกระบวนการชี้ไม่สามารถนำไปใช้กับคุณลักษณะเชิงเส้นได้จึงไม่ถูกต้องเชิงสถิติ นี่เป็นเพราะโมฆะที่รูปแบบที่กำหนดได้รับการทดสอบนั้นขึ้นอยู่กับเหตุการณ์ของจุดและไม่ใช่การอ้างอิงเชิงเส้นในเขตข้อมูลสุ่ม ฉันต้องบอกว่าฉันไม่รู้ด้วยซ้ำว่าโมฆะจะมีค่าเท่าความรุนแรงและการจัดเรียง / การวางแนวจะยิ่งยากขึ้นไปอีก
ฉันแค่ถ่มน้ำลายที่นี่ แต่ฉันสงสัยว่าการประเมินความหนาแน่นของเส้นคู่กับระยะทางแบบยุคลิด (หรือระยะทาง Hausdorff ถ้าเส้นที่ซับซ้อน) จะไม่บ่งชี้ว่ามีการจัดกลุ่มอย่างต่อเนื่อง ข้อมูลนี้สามารถสรุปให้กับเวกเตอร์ของเส้นได้โดยใช้ความแปรปรวนเพื่ออธิบายความยาว (โทมัส 2011) และกำหนดค่าคลัสเตอร์โดยใช้สถิติเช่น K-mean ฉันรู้ว่าคุณไม่ได้อยู่หลังกลุ่มที่ได้รับมอบหมาย แต่ค่าคลัสเตอร์สามารถแบ่งพาร์ติชันองศาของการทำคลัสเตอร์ได้ เห็นได้ชัดว่าสิ่งนี้จะต้องมีขนาดที่เหมาะสมที่สุดของ k ดังนั้นจึงไม่มีการกำหนดกลุ่มโดยพลการ ฉันคิดว่านี่จะเป็นวิธีที่น่าสนใจในการประเมินโครงสร้างขอบในตัวแบบเชิงทฤษฎีของกราฟ
นี่เป็นตัวอย่างการทำงานใน R ขอโทษด้วย แต่เร็วกว่าและทำซ้ำได้มากกว่าให้ตัวอย่าง QGIS และอยู่ในเขตความสะดวกสบายของฉัน :)
เพิ่มไลบรารีและใช้วัตถุ copper psp จาก spatstat เป็นตัวอย่างบรรทัด
library(spatstat)
library(raster)
library(spatialEco)
data(copper)
l <- copper$Lines
l <- rotate.psp(l, pi/2)
คำนวณความหนาแน่นของบรรทัดคำสั่งที่หนึ่งและที่สองที่ได้มาตรฐานจากนั้นประสานกับวัตถุระดับแรสเตอร์
d1st <- density(l)
d1st <- d1st / max(d1st)
d1st <- raster(d1st)
d2nd <- density(l, sigma = 2)
d2nd <- d2nd / max(d2nd)
d2nd <- raster(d2nd)
สร้างมาตรฐานความหนาแน่นของลำดับที่ 1 และ 2 ในความหนาแน่นที่รวมเข้าด้วยกัน
d <- d1st + d2nd
d <- d / cellStats(d, stat='max')
คำนวณระยะทางแบบยุคลิดแบบคว่ำมาตรฐานและบีบบังคับให้อยู่ในระดับแรสเตอร์
euclidean <- distmap(l)
euclidean <- euclidean / max(euclidean)
euclidean <- raster.invert(raster(euclidean))
coatce spatstat psp ไปยังวัตถุ Sp SpialialLinesDataFrame เพื่อใช้ใน raster :: แยก
as.SpatialLines.psp <- local({
ends2line <- function(x) Line(matrix(x, ncol=2, byrow=TRUE))
munch <- function(z) { Lines(ends2line(as.numeric(z[1:4])), ID=z[5]) }
convert <- function(x) {
ends <- as.data.frame(x)[,1:4]
ends[,5] <- row.names(ends)
y <- apply(ends, 1, munch)
SpatialLines(y)
}
convert
})
l <- as.SpatialLines.psp(l)
l <- SpatialLinesDataFrame(l, data.frame(ID=1:length(l)) )
ลงจุดผลลัพธ์
par(mfrow=c(2,2))
plot(d1st, main="1st order line density")
plot(l, add=TRUE)
plot(d2nd, main="2nd order line density")
plot(l, add=TRUE)
plot(d, main="integrated line density")
plot(l, add=TRUE)
plot(euclidean, main="euclidean distance")
plot(l, add=TRUE)
แยกค่าแรสเตอร์และคำนวณสถิติสรุปที่เกี่ยวข้องกับแต่ละบรรทัด
l.dist <- extract(euclidean, l)
l.den <- extract(d, l)
l.stats <- data.frame(min.dist = unlist(lapply(l.dist, min)),
med.dist = unlist(lapply(l.dist, median)),
max.dist = unlist(lapply(l.dist, max)),
var.dist = unlist(lapply(l.dist, var)),
min.den = unlist(lapply(l.den, min)),
med.den = unlist(lapply(l.den, median)),
max.den = unlist(lapply(l.den, max)),
var.den = unlist(lapply(l.den, var)))
ใช้ค่าเงาของคลัสเตอร์เพื่อประเมินค่า k ที่เหมาะสม (จำนวนของคลัสเตอร์) ด้วยฟังก์ชัน ultimate.k จากนั้นกำหนดค่าคลัสเตอร์ให้กับบรรทัด จากนั้นเราสามารถกำหนดสีให้กับแต่ละคลัสเตอร์และพล็อตที่ด้านบนของแรสเตอร์ความหนาแน่น
clust <- optimal.k(scale(l.stats), nk = 10, plot = TRUE)
l@data <- data.frame(l@data, cluster = clust$clustering)
kcol <- ifelse(clust$clustering == 1, "red", "blue")
plot(d)
plot(l, col=kcol, add=TRUE)
ณ จุดนี้เราสามารถทำการสุ่มของเส้นเพื่อทดสอบว่าความเข้มและระยะทางที่เกิดขึ้นนั้นสำคัญจากการสุ่มหรือไม่ คุณสามารถใช้ฟังก์ชั่น "rshift.psp" เพื่อสุ่มปรับแนวเส้นของคุณ คุณสามารถสุ่มจุดเริ่มต้นและจุดหยุดและสร้างแต่ละบรรทัดใหม่ได้
นอกจากนี้เรายังสงสัยว่า "จะเกิดอะไรขึ้นถ้า" คุณเพิ่งทำการวิเคราะห์รูปแบบจุดโดยใช้สถิติการวิเคราะห์ที่ไม่แปรผันหรือการวิเคราะห์ข้ามในจุดเริ่มต้นและจุดหยุดซึ่งไม่เปลี่ยนแปลงของเส้น ในการวิเคราะห์แบบ univariate คุณจะเปรียบเทียบผลลัพธ์ของจุดเริ่มต้นและจุดหยุดเพื่อดูว่ามีความสอดคล้องกันในการจัดกลุ่มระหว่างรูปแบบจุดสองจุดหรือไม่ สิ่งนี้สามารถทำได้ผ่าน f-hat, G-hat หรือ Ripley's-K-hat (สำหรับกระบวนการจุดที่ไม่มีเครื่องหมาย) อีกวิธีหนึ่งคือการวิเคราะห์แบบไขว้ (เช่น cross-K) ซึ่งกระบวนการสองจุดนั้นถูกทดสอบพร้อมกันโดยทำเครื่องหมายว่าเป็น [เริ่ม, หยุด] สิ่งนี้จะระบุความสัมพันธ์ของระยะทางในกระบวนการทำคลัสเตอร์ระหว่างจุดเริ่มต้นและจุดหยุด อย่างไรก็ตาม การพึ่งพาเชิงพื้นที่ (nonstaionarity) ในกระบวนการความเข้มพื้นฐานสามารถเป็นปัญหาในรูปแบบเหล่านี้ทำให้พวกเขาไม่อยู่ในรูปแบบเดียวกันและต้องการแบบจำลองที่แตกต่างกัน กระแทกแดกดันกระบวนการ inhomogeneous ถูกสร้างแบบจำลองโดยใช้ฟังก์ชั่นความเข้มซึ่งทำให้เรากลับไปที่วงกลมเต็มความหนาแน่นจึงสนับสนุนความคิดของการใช้ความหนาแน่นของสเกลแบบบูรณาการเป็นตัวชี้วัดของการจัดกลุ่ม
นี่คือตัวอย่างการทำงานที่รวดเร็วหากสถิติ Ripleys K (Besags L) สำหรับการหาค่าอัตโนมัติของกระบวนการจุดที่ไม่ได้ทำเครื่องหมายโดยใช้การเริ่มต้นให้หยุดตำแหน่งของคลาสคุณลักษณะบรรทัด รุ่นสุดท้ายคือ cross-k โดยใช้ทั้งตำแหน่งเริ่มต้นและหยุดเป็นกระบวนการทำเครื่องหมายเล็กน้อย
library(spatstat)
data(copper)
l <- copper$Lines
l <- rotate.psp(l, pi/2)
Lr <- function (...) {
K <- Kest(...)
nama <- colnames(K)
K <- K[, !(nama %in% c("rip", "ls"))]
L <- eval.fv(sqrt(K/pi)-bw)
L <- rebadge.fv(L, substitute(L(r), NULL), "L")
return(L)
}
### Ripley's K ( Besag L(r) ) for start locations
start <- endpoints.psp(l, which="first")
marks(start) <- factor("start")
W <- start$window
area <- area.owin(W)
lambda <- start$n / area
ripley <- min(diff(W$xrange), diff(W$yrange))/4
rlarge <- sqrt(1000/(pi * lambda))
rmax <- min(rlarge, ripley)
( Lenv <- plot( envelope(start, fun="Lr", r=seq(0, rmax, by=1), nsim=199, nrank=5) ) )
### Ripley's K ( Besag L(r) ) for end locations
stop <- endpoints.psp(l, which="second")
marks(stop) <- factor("stop")
W <- stop$window
area <- area.owin(W)
lambda <- stop$n / area
ripley <- min(diff(W$xrange), diff(W$yrange))/4
rlarge <- sqrt(1000/(pi * lambda))
rmax <- min(rlarge, ripley)
( Lenv <- plot( envelope(start, fun="Lr", r=seq(0, rmax, by=1), nsim=199, nrank=5) ) )
### Ripley's Cross-K ( Besag L(r) ) for start/stop
sdata.ppp <- superimpose(start, stop)
( Lenv <- plot(envelope(sdata.ppp, fun="Kcross", r=bw, i="start", j="stop", nsim=199,nrank=5,
transform=expression(sqrt(./pi)-bw), global=TRUE) ) )
อ้างอิง
โทมัส JCR (2011) อัลกอริทึมการจัดกลุ่มใหม่ตาม K-หมายถึงการใช้ส่วนของเส้นเป็นต้นแบบ ใน: San Martin C. , Kim SW (eds) ความคืบหน้าในการจดจำรูปแบบการวิเคราะห์ภาพคอมพิวเตอร์วิสัยทัศน์และแอปพลิเคชัน CIARP 2011. หมายเหตุการบรรยายในวิทยาการคอมพิวเตอร์, ปี 7042. สปริงเกอร์, เบอร์ลิน, ไฮเดลเบิร์ก