resolucion - simulador de memoria cache java
¿Cómo determino una distribución de mejor ajuste en Java? (6)
Tengo un conjunto de conjuntos de datos (entre 50 y 500 puntos, cada uno de los cuales puede tener un valor integral positivo) y necesito determinar qué distribución los describe mejor. He hecho esto manualmente para varios de ellos, pero necesito automatizar esto en el futuro.
Algunos de los conjuntos son completamente modales (cada dato tiene el valor de 15), algunos son fuertemente modales o bimodales, otros son curvas de campana (a menudo asimétricas y con diferentes grados de kertosis / agudeza), algunos son aproximadamente planos, y hay cualquier cantidad de otras posibles distribuciones (possion, power-law, etc.). Necesito una forma de determinar qué distribución describe mejor los datos y (idealmente) también me proporciona una medida de aptitud para que sepa cuán seguro estoy en el análisis.
Las bibliotecas de código abierto existentes serían ideales, seguidas de algoritmos bien documentados que yo mismo puedo implementar.
Es poco probable que buscar una distribución que se adapte a su objetivo le proporcione buenos resultados en ausencia de algún conocimiento a priori . Puede encontrar una distribución que coincidentemente es una buena opción, pero es poco probable que sea la distribución subyacente.
¿Tiene algún metadato disponible que indique lo que significan los datos? Por ejemplo, "se trata de datos abiertos de muestra de una población natural, por lo que es una especie de distribución normal", frente a "estos datos están intrínsecamente delimitados en 0 y discretos, por lo que hay que buscar el Poisson que mejor se ajuste".
No conozco ningún solucionador de distribución para Java, y no conozco ninguno que adivine qué distribución usar. Puede examinar algunas propiedades estadísticas (sesgo / etc.) Y hacer algunas conjeturas aquí, pero es más probable que termine con un ajuste accidentalmente bueno que no represente adecuadamente la distribución subyacente. Los datos reales son ruidosos y hay demasiados grados de libertad si ni siquiera sabes de qué distribución se trata.
He oído hablar de un paquete llamado Eureqa que podría llenar la factura muy bien. Solo lo he descargado; No lo he probado todavía.
Lo que estás buscando viene bajo el título general de "bondad de ajuste". Puede buscar en "prueba de bondad de ajuste".
Donald Knuth describe un par de pruebas populares de bondad de ajuste en Algoritmos Seminumerical: la prueba de chi-cuadrado y la prueba de Kolmogorov-Smirnov. Pero primero debes tener una idea de qué distribución quieres probar. Por ejemplo, si tiene datos de curvas de campana, puede intentar distribuciones normales o de Cauchy.
Mire Apache commons-math .
Si todo lo que necesita para la distribución es modelar los datos que ha muestreado, puede hacer su propia distribución en función de los datos que tenga:
1. Crea un histograma de tu muestra: aquí hay un método para seleccionar el tamaño del contenedor. Existen otros métodos para seleccionar el tamaño del contenedor, que usted puede preferir.
2. Derive la muestra CDF : piense en el histograma como su PDF y simplemente calcule la integral. Probablemente sea mejor escalar la altura de los contenedores para que el CDF tenga las características correctas ... es decir, que el valor de CDF en + Infinity sea 1.0.
Para usar la distribución con fines de modelado:
3. Dibuja X de tu distribución: Haz un sorteo Y desde U (0,1). Utilice una búsqueda inversa en su CDF del valor Y para determinar la X de manera que CDF (X) = Y. Como la CDF es invertible, X es única.