นี่เป็นคำถามที่ยากเนื่องจากมีสถิติกระบวนการเชิงพื้นที่ที่พัฒนาขึ้นสำหรับคุณลักษณะของบรรทัดไม่มากนัก โดยไม่ต้องขุดลงไปในสมการและรหัสอย่างจริงจังสถิติกระบวนการชี้ไม่สามารถนำไปใช้กับคุณลักษณะเชิงเส้นได้จึงไม่ถูกต้องเชิงสถิติ นี่เป็นเพราะโมฆะที่รูปแบบที่กำหนดได้รับการทดสอบนั้นขึ้นอยู่กับเหตุการณ์ของจุดและไม่ใช่การอ้างอิงเชิงเส้นในเขตข้อมูลสุ่ม ฉันต้องบอกว่าฉันไม่รู้ด้วยซ้ำว่าโมฆะจะมีค่าเท่าความรุนแรงและการจัดเรียง / การวางแนวจะยิ่งยากขึ้นไปอีก
ฉันแค่ถ่มน้ำลายที่นี่ แต่ฉันสงสัยว่าการประเมินความหนาแน่นของเส้นคู่กับระยะทางแบบยุคลิด (หรือระยะทาง 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. สปริงเกอร์, เบอร์ลิน, ไฮเดลเบิร์ก