La prueba de uniformidad es algo común, sin embargo, me pregunto cuáles son los métodos para hacerlo en una nube de puntos multidimensional.
La prueba de uniformidad es algo común, sin embargo, me pregunto cuáles son los métodos para hacerlo en una nube de puntos multidimensional.
Respuestas:
El método estándar utiliza la función K de Ripley o algo derivado de ella, como una función L. Esta es una gráfica que resume el número promedio de vecinos de los puntos en función de la distancia máxima de separación ( ). Para una distribución uniforme en n dimensiones, ese promedio debe comportarse como ρ n : y siempre lo hará para pequeños ρ . Se aleja de dicho comportamiento debido a la agrupación, otras formas de no independencia espacial y efectos de borde (de donde es crucial especificar la región muestreada por los puntos). Debido a esta complicación, que empeora cuando naumenta: en la mayoría de las aplicaciones se erige una banda de confianza para la función K nula mediante simulación y la función K observada se sobreplota para detectar excursiones. Con algo de pensamiento y experiencia, las excursiones se pueden interpretar en términos de tendencias a agruparse o no a ciertas distancias.
Ejemplos de una función K y su función L asociada de Dixon (2001), ibid. La función L se construye de modo que para una distribución uniforme es la línea horizontal en cero: una buena referencia visual. Las líneas discontinuas son bandas de confianza para esta área de estudio en particular, calculadas mediante simulación. La traza gris sólida es la función L para los datos. La excursión positiva a distancias de 0-20 m indica cierta agrupación a estas distancias.
Publiqué un ejemplo trabajado en respuesta a una pregunta relacionada en /stats//a/7984 , donde un gráfico derivado de la función K para una distribución uniforme en un distribuidor bidimensional incrustado en es estimado por simulación.
En R
, los spatstat funciones kest
y k3est
calcular el K-función para y n = 3 , respectivamente. En más de 3 dimensiones, probablemente esté solo, pero los algoritmos serían exactamente los mismos. Puede realizar los cálculos a partir de una matriz de distancia tal como se calculó (con eficiencia moderada) por .stats::dist
Resulta que la pregunta es más difícil de lo que pensaba. Aún así, hice mi tarea y después de mirar alrededor, encontré dos métodos además de las funciones de Ripley para probar la uniformidad en varias dimensiones.
Hice un paquete R llamado unf
que implementa ambas pruebas. Puede descargarlo de github en https://github.com/gui11aume/unf . Una gran parte está en C, por lo que deberá compilarlo en su máquina R CMD INSTALL unf
. Los artículos en los que se basa la implementación están en formato pdf en el paquete.
El primer método proviene de una referencia mencionada por @Procrastinator ( Prueba de uniformidad multivariante y sus aplicaciones, Liang et al., 2000 ) y permite probar la uniformidad solo en el hipercubo de la unidad. La idea es diseñar estadísticas de discrepancia que sean asintóticamente gaussianas según el teorema del límite central. Esto permite calcular una estadística , que es la base de la prueba.
library(unf)
set.seed(123)
# Put 20 points uniformally in the 5D hypercube.
x <- matrix(runif(100), ncol=20)
liang(x) # Outputs the p-value of the test.
[1] 0.9470392
El segundo enfoque es menos convencional y utiliza árboles de expansión mínima . El trabajo inicial fue realizado por Friedman & Rafsky en 1979 (referencia en el paquete) para probar si dos muestras multivariadas provienen de la misma distribución. La imagen a continuación ilustra el principio.
Los puntos de dos muestras bivariadas se trazan en rojo o azul, dependiendo de su muestra original (panel izquierdo). Se calcula el árbol de expansión mínimo de la muestra agrupada en dos dimensiones (panel central). Este es el árbol con la suma mínima de longitudes de borde. El árbol se descompone en subárboles donde todos los puntos tienen las mismas etiquetas (panel derecho).
En la figura a continuación, muestro un caso en el que se agregan puntos azules, lo que reduce la cantidad de árboles al final del proceso, como puede ver en el panel derecho. Friedman y Rafsky han calculado la distribución asintótica del número de árboles que se obtienen en el proceso, lo que permite realizar una prueba.
Smith y Jain desarrollaron esta idea para crear una prueba general de uniformidad de una muestra multivariada en 1984, y Ben Pfaff la implementó en C (referencia en el paquete). La segunda muestra se genera de manera uniforme en el casco convexo aproximado de la primera muestra y la prueba de Friedman y Rafsky se realiza en el grupo de dos muestras.
La ventaja del método es que prueba la uniformidad en cada forma multivariada convexa y no solo en el hipercubo. La gran desventaja es que la prueba tiene un componente aleatorio porque la segunda muestra se genera al azar. Por supuesto, uno puede repetir la prueba y promediar los resultados para obtener una respuesta reproducible, pero esto no es útil.
Continuando con la sesión R anterior, así es como va.
pfaff(x) # Outputs the p-value of the test.
pfaff(x) # Most likely another p-value.
Siéntase libre de copiar / bifurcar el código de github.