Esta es una pregunta difícil como no sólo no han sido muchos, si alguna, de ordenación del proceso de las estadísticas desarrollado para funciones de línea. Sin seriamente la excavación en las ecuaciones y el código, punto de estadísticas de procesos no son fácilmente aplicables a elementos lineales y por lo tanto, estadísticamente válidos. Esto es debido a la nula, de que un determinado patrón de prueba en contra, se basa en los eventos de punto y no lineal de las dependencias en el campo aleatorio. Tengo que decir que yo no sé ni lo que el null sería tan lejos como la intensidad y la disposición y la orientación sería aún más difícil.
Yo sólo soy escupir bolas de aquí, pero, me pregunto si un multi-escala de evaluación de la línea de densidad junto con la distancia Euclídea (o la distancia de Hausdorff si las líneas son complejos) no indica una medida continua de la agrupación. Esta información puede entonces resumirse a la línea de vectores, el uso de varianza para dar cuenta de las diferencias en las longitudes (Thomas, 2011), y se le asigna un valor del racimo, utilizando una estadística, tales como K-means. Yo sé que usted no después de asignado agrupaciones pero el valor del racimo podría partición de grados de la agrupación. Esto, obviamente, requiere un ajuste óptimo de k de manera arbitraria, los clusters no son asignados. Estoy pensando que este sería un interesante enfoque en la evaluación de la estructura del borde en el gráfico modelos teóricos.
Aquí está un ejemplo en R, lo siento, pero es más rápido y más reproducible que la de proporcionar un QGIS ejemplo, y es más en mi zona de confort:)
Agregar las bibliotecas y el uso de cobre psp objeto de spatstat como ejemplo de la línea de
library(spatstat)
library(raster)
library(spatialEco)
data(copper)
l <- copper$Lines
l <- rotate.psp(l, pi/2)
Calcular estandarizada de 1º y 2º de línea de la orden de densidad de y, a continuación, coaccionar a trama objetos de la clase
d1st <- density(l)
d1st <- d1st / max(d1st)
d1st <- raster(d1st)
d2nd <- density(l, sigma = 2)
d2nd <- d2nd / max(d2nd)
d2nd <- raster(d2nd)
Estandarizar de 1er y 2º orden densidad en una escala integrada de la densidad
d <- d1st + d2nd
d <- d / cellStats(d, stat='max')
Calcular estandarizado invertida la distancia euclídea y coaccionar a raster de clase
euclidean <- distmap(l)
euclidean <- euclidean / max(euclidean)
euclidean <- raster.invert(raster(euclidean))
Coaccionar spatstat psp a un sp SpatialLinesDataFrame objeto de uso en la trama::extracto de
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)) )
Parcela resultados
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)
Extracto de ráster de valores y calcular las estadísticas de resumen asociados a cada línea de
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)))
El uso de clúster de la silueta de valores para evaluar óptimo de k (número de grupos), con el óptimo.k de la función, a continuación, asignar los valores de clúster a las líneas. A continuación, podemos asignar colores a cada clúster y de la parcela en la parte superior de la densidad de la trama.
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)
En este punto, se podría llevar a cabo una selección aleatoria de las líneas para probar si el resultado de la intensidad y la distancia son significativas a partir de azar. Usted puede utilizar el "mayúsi.psp" función de forma aleatoria reorientar sus líneas. También se puede simplemente cambiar aleatoriamente los puntos de inicio y finalización y recrear cada línea.
Uno también se pregunta "qué pasaría si" usted acaba de realizar un análisis de punto de patrón utilizando una univariante o cruz análisis de la estadística en los puntos de inicio y finalización, los invariantes de las líneas. En un análisis univariado se podrían comparar los resultados de los puntos de inicio y finalización para ver si hay consistencia en la agrupación entre los dos patrones de puntos. Esto podría hacerse a través de un f-hat, G-hat o Ripley's-K-hat (para de marcar el punto de procesos). Otro enfoque podría ser una Cruz de análisis (por ejemplo,., cruz-K) donde el punto dos procesos son analizados simultáneamente por los marca como [start,stop]. Esto podría indicar que la distancia de las relaciones en el proceso de agrupación entre los puntos de inicio y finalización. Sin embargo, de dependencia espacial (nonstaionarity) sobre un subyacente de la intensidad del proceso puede ser un problema en estos tipos de modelos que ellos no homogéneas y que requiere un modelo diferente. Irónicamente, no homogéneas proceso se modela con una función de la intensidad de la cual, nos lleva a un círculo a la densidad por lo que apoya la idea de utilizar una escala integrada de la densidad como una medida de la agrupación.
Este es un ejemplo práctico de si el Ripleys K (Besags L) estadística para la autocorrelación de un proceso de punto de inicio, las ubicaciones de las paradas de una clase de entidad de línea. El último modelo es una cruz-k con la ayuda de puesta en marcha y parada de los lugares como un nominal proceso marcado.
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 start 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) ) )
Referencias
Thomas J. C. R. (2011) Un Nuevo Algoritmo de Clustering Basado en K-Significa el Uso de un Segmento de Línea como Prototipo. En: San Martin C., Kim SW. (eds), los Progresos en el Reconocimiento de patrones, Análisis de Imágenes, Visión por Computadora y las Aplicaciones. CIARP de 2011. Lecture Notes in Computer Science, vol 7042. Springer, Berlín, Heidelberg