35 votos

¿Pruebas estadísticas para los patrones espaciales de la línea?

Hay un montón de pruebas para el punto del espacio de patrones que pueden ser utilizados para determinar si los puntos están distribuidos al azar o no, pero ¿hay alguna establecido pruebas espaciales de la línea de los patrones? (Estoy pensando en líneas rectas, con un sólo punto inicial y final y no de los nodos intermedios.)

Los datos que desea analizar son OD (origen-destino), las líneas de humanos y el movimiento de los animales.

Hasta el momento, una idea era tratar líneas 4D puntos y el uso de punto patrón de pruebas, pero no estoy segura de si es apropiado.

La prueba ideal sería posible determinar si hay grupos de líneas o no.

Instintivamente, yo diría que muchas de las líneas que parten de un mismo origen, pero tienen todos los tipos de destinos diferentes, no debe ser considerado como un clúster. Por otro lado, muchas de las líneas que se ejecutan (cerca) en paralelo durante un tiempo más largo sería un clúster. enter image description here

19voto

Dan Puntos 16

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

14voto

Mat Puntos 196

Es posible que desee buscar en Fréchet distancia. Yo sólo recientemente se enteró de esto después de una reciente pregunta buscando una implementación de python.

Esta es una métrica para encontrar espacial similitud de linestrings. Es una idea similar a la distancia de Hausdorff, el equivalente para los polígonos medidas de similitud, pero para linestrings con una dirección.

El Fréchet distancia se define como la longitud mínima de una correa de conexión a un perro en una trayectoria con su dueño en una segunda trayectoria, por lo tanto nunca se mueve hacia atrás

Este parámetro tendrá un valor pequeño para dos curvas que se encuentran muy cerca, casi en paralelo, alineados de la misma manera, y con una longitud similar.

Que no responde a la identificación de clúster parte, aunque.

Hay una presentación completa aquí. Su situación parece, algunos de los casos de uso mencionados en las secciones 46-49

Esta medida tiene un montón de no-geoespacial usos, tales como

  • la detección de sub-patrones comunes en la secuenciación de genes
  • reconocimiento de escritura a mano
  • la detección de la correlación de los períodos en series de tiempo como el precio de las acciones de historias

así, mientras que un montón de papeles en la bibliografía cubrir este tema, la mayoría de ellos no son geoespacial. También la mayoría de estos documentos están bajo algoritmia / matemáticas / ciencias de la computación, en lugar de geoespacial / ciencias de la tierra y están dirigidas en consecuencia.

Sin embargo, este papel parecía prometedor:-

Buchin, K., Buchin, M., y Wang, Y. (2009). Algoritmos exactos para el parcial de la curva de contrapartida a través de la Fréchet distancia. En Actas del 20 de ACM-SIAM Simposio sobre Discreto Algoritmos, páginas 645-654

Algunos de los artículos de sonido más en la intención de lo que está después de la identificación de cluster y la asignación de trayectorias para grupos, sino que se ilustra con los datos de series de tiempo o de otro tipo no geoespacial ejemplos. Sin embargo, se puede señalar que en interesantes direcciones.

4voto

AlpinePWD Puntos 1

Puedes dar un poco más de detalle sobre el tipo de datos que están trabajando? Son solo una serie de líneas de tensión dialéctica o forman una red? ¿Has utilizado alguna de las herramientas de ArcGIS para el patrón espacial de análisis? Muchos de los métodos de ArcGIS (Ripley K, NN índice, Morans I) al utilizar el centroide de las líneas/polígonos cuando se utiliza en la falta de punto de datos. Sin embargo, aquí usted puede necesitar considerar la división de cada línea en las secciones iguales para evitar las líneas muy largas de no ser considerado debido a su centro de gravedad está muy lejos.

La otra cosa que pensar es, conceptualmente lo que es un grupo de líneas? Usted puede tener muchas líneas originarios de cerca uno del otro, pero luego sus puntos finales podrían estar dispersos. Del mismo modo, usted puede obtener muchas líneas que empiezan y terminan muy cerca uno del otro, pero luego se vuelve muy dispersos entre sus inicio/final de puntos.

Un enfoque, sin embargo, podría ser simplemente realizar una línea de análisis de densidad para las zonas con más líneas (que podrían ser considerados agrupado en algún sentido) tienen altos valores de cuadrícula, mientras que las zonas con baja densidad tienen valores bajos. Así que usted consigue un poco de un punto caliente de la salida; sin embargo, esto no dará un solo dato de Morans I o de la NNI. También no diferenciar entre la densidad como resultado de una muy irregular línea (es decir, una espiral apretado) y muchas líneas.

Lo siento esto no es una respuesta completa a su problema, pero creo que clavar el concepto completo de lo que usted está tratando de lograr puede proporcionar algunos de los mejores soluciones.

ACTUALIZACIÓN

Basado en el ejemplo que usted dio creo FelixlP la sugerencia de la creación de un punto con la línea cojinete de atributo para utilizar con el punto patrón de medidas es probablemente una buena manera de ir. Excepto que yo iba a dividir los puntos en segmentos iguales y tienen un punto con la línea cojinete en cada línea de vértice. Entonces usted necesita para mirar a medidas que vamos a tener en la proximidad de cada punto y la similitud entre los rodamientos (para detectar las líneas que están más cerca de la perpendicular).

Así que, usando el Getis-Ord GI (Hotspot análisis) sería una buena herramienta a utilizar para visualizar donde los racimos; y luego un global de Moran I para evaluar el nivel global de la agrupación.

La distancia a la que el segmento de las líneas, sin embargo el efecto que el grado de agrupación de encontrar. Si usted está buscando para grupos de 1 kilometro de la escala, entonces usted necesita para el segmento de las líneas para evitar que. Del mismo modo, si usted está buscando para los clústeres en los 100m escala, sería necesario para el segmento de las líneas según corresponda. Esto es para que no te pierdas las líneas y también para no detectar cada línea como un clúster.

3voto

Sammi Song Puntos 11

Gracias por los ejemplos.

No he visto ningún establecido métodos para calcular lo que usted está buscando, sin embargo, esto sería de mi enfoque. Es un tipo de una solución de fuerza bruta.

Calcular un mínimo rectángulo envolvente, a continuación, expanda es arbitraria, pero igual gran cantidad en cada una de las cuatro esquinas.

Encontrar el centro de masa de crear el rectángulo, calcular el azimut y la distancia de la distribución de la O-D puntos para cada línea, y hacer lo mismo con una de las esquinas del rectángulo delimitador, junto con la comparación de los azimuts de las líneas.

Prueba de paralelismo de cada una de las cuatro esquinas hacia el extremo de cada rayo. Prueba de paralelismo desde el centro de masa en el extremo de cada rayo.

Al hacer esto, usted podría comparar la desviación de las esquinas de los extremos. En el ejemplo (a) usted tendría cerca de líneas paralelas de dos de las esquinas a cada uno de los tres grupos. También se tienen cerca de líneas paralelas desde el centro de masa de los extremos de los extremos de las líneas.

Ejemplo (b) usted no tendría cerca de líneas paralelas a la hora de calcular a partir de las esquinas de los extremos de cada línea, pero las líneas no parecen aleatorios, que conducen a la una de la otra con ligeras desviaciones.

Ejemplo (c) parece ser al azar

Ejemplo (d) no es al azar, es radial.

Mirando en esta de más, yo iría en la realización de las pruebas descritas anteriormente, así como la creación de triángulo de las pruebas de solución de las esquinas de la creación rectángulo que encierra a los extremos de los rayos. Similar ángulos interiores y áreas de ayudar a verificar la agrupación, salvo que una de las líneas en el clúster es significativamente más corta que las demás.

Lo anterior es sólo uno de engañar a la opinión, y yo soy probablemente equivocado.

-1voto

Hoppe Puntos 13

Tras su descripción instintiva, ¿cuál es el criterio para 2 líneas en paralelo?

Básicamente se puede hacer una prueba en Inicio o puntos finales:
Deje Sx = (start_x_line_1 - start_x_line_2),
SY = (start_y_line_1 - start_y_line_2),
y Ex, Ey el mismo pero en sus puntos finales.

Así que si sqrt(Sx²+Sy²) y sqrt(Ex²+Ey²) está debajo de cierto umbral, puede considerar estas líneas como paralelo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X