Digamos que tengo dos o más poblaciones de muestra de vectores con valores continuos n-dimensionales. ¿Existe una forma no paramétrica de probar si estas muestras son de la misma distribución? En caso afirmativo, ¿hay alguna función en R o Python para esto?
Respuestas
¿Demasiados anuncios?Acabo de hacer mucha investigación sobre pruebas de dos muestras multivariadas cuando me di cuenta de que la prueba de Kolmogorov-Smirnov no era multivariada. Así que miré la prueba Chi, el T^2 de Hotelling, Anderson-Darling, el criterio de Cramer-von Mises, Shapiro-Wilk, etc. Hay que tener cuidado porque algunas de estas pruebas dependen de que los vectores que se comparan tengan la misma longitud. Otros solo se utilizan para rechazar la suposición de normalidad, no para comparar dos distribuciones de muestras.
La solución principal parece comparar las funciones de distribución acumulativa de las dos muestras con todas las posibles ordenaciones, lo cual, como puedes sospechar, es muy intensivo computacionalmente, del orden de minutos para una única ejecución de una muestra que contenga unos pocos miles de registros:
https://cran.r-project.org/web/packages/Peacock.test/Peacock.test.pdf
Como indica la documentación de Xiao, la prueba de Fasano y Franceschini es una variante de la prueba de Peacock:
http://adsabs.harvard.edu/abs/1987MNRAS.225..155F
La prueba de Fasano y Franceschini fue específicamente diseñada para ser menos intensiva computacionalmente, pero no he encontrado una implementación de su trabajo en R.
Para aquellos que deseen explorar los aspectos computacionales de la prueba de Peacock versus la prueba de Fasano y Franceschini, echa un vistazo a Algoritmos computacionalmente eficientes para la prueba de dos dimensiones de Kolmogorov-Smirnov
Sí, hay maneras no paramétricas de probar si dos muestras multivariadas provienen de la misma distribución conjunta. Mencionaré detalles excluyendo los mencionados por L Fischman. El problema básico que estás preguntando se puede llamar 'Problema de Dos Muestras' y actualmente se está realizando una buena cantidad de investigaciones en revistas como Journal of Machine Learning Research y Annals of Statistics y otras. Con mi poco conocimiento sobre este problema, puedo dar dirección de la siguiente manera
- Una manera reciente de probar los conjuntos de muestras multivariadas es a través de la Discrepancia Máxima de la Media (MMD); literatura relacionada: Arthur Gretton 2012, Bharath 2010 y otros. Otros métodos relacionados se pueden encontrar en estos artículos de investigación. Si estás interesado, por favor revisa los artículos citando estos artículos, para tener una imagen general del estado del arte en este problema. Y SÍ, para esto hay implementaciones en R.
Si tu interés es comparar varios conjuntos de puntos (conjuntos de muestras) con el conjunto de puntos de referencia, para ver cuán cerca se aproximan al conjunto de puntos de referencia, puedes usar f-divergencia.
- Un caso especial popular de esto es Divergencia Kullback-Leibler. Esto se utiliza en muchos regímenes de aprendizaje automático. Esto también se puede hacer de dos maneras no paramétricas; a través del enfoque de ventana de parzen (núcleo) y estimadores de PDF de Vecinos Más Cercanos.
También puede haber otras formas de abordar esto, ¡Esta respuesta de ninguna manera es un tratamiento completo de tu pregunta! ;)
El paquete de R np (no paramétrico) tiene una prueba de igualdad de densidades de datos continuos y categóricos utilizando la densidad cuadrada integrada. Li, Maasoumi y Racine(2009)
Al igual que el pdf condicional de np en la sección 6.
Ya que estoy trabajando en el mismo problema, puedo compartir algunas de mis ideas hasta ahora (que están lejos de ser expertas). Estás buscando una prueba que responda a la pregunta de si dos distribuciones de muestra son extraídas de la misma distribución o no. Una pregunta que también se hace frecuentemente en pruebas es si dos distribuciones de muestra son extraídas de una distribución con un valor esperado idéntico.
En este marco, los tamaños de las distribuciones de muestra a menudo se denominan n1n1 y n2n2, mientras que la dimensión de los datos se denomina pp.
En la prueba que se refiere solo a la ubicación, las hipótesis son: H0:μF=μGH1:μF≠μG Las implementaciones para p>>1 son:
Python: https://hotelling.readthedocs.io/en/latest/. Solo pude acceder al código a través del repositorio de GitHub: https://github.com/dionresearch/hotelling pero tal vez tengas más suerte.
R: https://www.rdocumentation.org/packages/highmean/versions/3.0. El documento respectivo es: https://academic.oup.com/biomet/article/103/3/609/1744173?login=true
Hay mucha investigación en esa área, tal vez quieras considerar trabajos conectados para una búsqueda: https://www.connectedpapers.com/main/3c14196155b1e9def9241a841e359e6054a4d44b/A-Simple-TwoSample-Test-in-High-Dimensions-Based-on-L2Norm/graph
Para el primer tipo de prueba, las hipótesis se definen de la siguiente manera: H0:F(x)=G(x)H1:F(x)≠G(x) Hubo algunos enfoques a finales de los años 80 con MST (árboles de expansión mínima) y búsqueda del vecino más cercano. Por ejemplo: https://amstat.tandfonline.com/doi/abs/10.1080/01621459.1986.10478337#.YEjb79wo9EY Creo que este enfoque ha sido descartado, pero sería feliz si se me demuestra lo contrario.
En resumen, ¡esto es difícil!
Por lo tanto, es útil alejarse de la pregunta abstracta. ¿Por qué quieres comparar estas distribuciones? Quizás este objetivo se pueda cumplir de alguna otra manera.
Por ejemplo, una razón para hacer esto es al entrenar un GAN. En esta situación, el entrenamiento es iterativo y estocástico. Por lo tanto, es suficiente usar una aproximación estocástica a la respuesta, que se puede hacer de la siguiente manera: cada vez que desees medir la distancia entre las distribuciones, elige una proyección aleatoria a una dimensión. Luego, calcula la métrica de Kolmogorov-Smirnov para las dos distribuciones proyectadas.
Disculpa, olvidé la referencia para este método, que fue inventado por alguien más inteligente que yo.
2 votos
El test de Kolmogorov-Smirnov es una herramienta no paramétrica típica para probar si dos distribuciones son iguales. No estoy familiarizado con él, pero wikipedia hace referencia a Justel, A., Peña, D. y Zamar, R. (1997) A multivariate Kolmogorov-Smirnov test of goodness of fit, Statistics & Probability Letters, 35(3), 251-259 para una extensión multivariante de este test.
1 votos
Hay una pregunta del CV que aborda esto en dos dimensiones: stats.stackexchange.com/questions/25946/…. Incluso en dos dimensiones, no hay una forma estándar de hacerlo.