Как я определяю хорошо-пригодное распределение в Java?

У меня есть набор наборов данных (между 50 - 500 точками, каждая из которых может принять положительное интегральное значение) и должен определить, какое распределение лучше всего описывает их. Я сделал это вручную для нескольких из них, но должен автоматизировать это продвижение.

Некоторые наборы абсолютно модальны (каждая данная величина имеет значение 15), некоторые являются решительно модальными или бимодальными, некоторые - кривые нормального распределения (часто скашиваемый и с отличающимися степенями kertosis/pointiness), некоторые являются примерно плоскими, и существует любое количество других возможных дистрибутивов (possion, закон питания, и т.д.). Мне нужен способ определить, какое распределение лучше всего описывает данные и (идеально) также предоставляет мне метрику фитнеса так, чтобы я знал, насколько уверенный я нахожусь в анализе.

Существующие библиотеки с открытым исходным кодом были бы идеальны, сопровождались бы хорошо зарегистрированными алгоритмами, которые я могу реализовать сам.

7
задан Eadwacer 2 June 2010 в 21:12
поделиться

6 ответов

Поиск подходящего распределения вряд ли даст вам хорошие результаты при отсутствии некоторых априорных знаний. Вы можете найти распределение, которое по совпадению хорошо подходит, но вряд ли будет основным распределением.

Есть ли у вас какие-либо метаданные, которые намекнули бы на то, что означают данные ? Например, «это открытые данные, отобранные из естественной совокупности, поэтому это своего рода нормальное распределение», или «эти данные по своей природе ограничены нулем и дискретны, поэтому проверьте наиболее подходящий Пуассон».

Я не знаю ни одного решателя дистрибутивов для Java, который у меня в голове, и я не знаю ни одного, который угадал бы, какой дистрибутив использовать. Вы можете изучить некоторые статистические свойства (перекос и т. Д.) И сделать здесь некоторые предположения, но вы с большей вероятностью получите случайно хорошее совпадение, которое неадекватно представляет базовое распределение. Реальные данные зашумлены, и существует слишком много степеней свободы, если вы даже не знаете, что это за распределение.

5
ответ дан 6 December 2019 в 12:46
поделиться

То, что вы ищете, подпадает под общий заголовок «степень соответствия». Вы можете выполнить поиск по запросу «критерий согласия»

. Дональд Кнут описывает пару популярных критериев согласия в получисленных алгоритмах: критерий хи-квадрат и критерий Колмогорова-Смирнова. Но сначала вы должны иметь некоторое представление о том, какой дистрибутив вы хотите протестировать. Например, если у вас есть данные колоколообразной кривой, вы можете попробовать нормальное распределение или распределение Коши.

2
ответ дан 6 December 2019 в 12:46
поделиться

Это может выходить за рамки того, что вы хотите сделать, но это кажется наиболее полным подходом (и он позволяет получить доступ к огромному количеству статистических знаний, доступных внутри R):

  1. используйте JRI , чтобы общаться со статистическим языком R
  2. использовать R внутренне, как указано в этот поток
5
ответ дан 6 December 2019 в 12:46
поделиться

Если все, что вам действительно нужно, это распределение данных, которые вы выбрали, вы можете создать собственное распределение на основе имеющихся у вас данных:

1. Создайте гистограмму своей выборки: Один из способов выбора размера ячейки - здесь .Есть другие методы выбора размера корзины, которые вы можете предпочесть.

2. Получите образец CDF : Считайте гистограмму своим PDF-файлом и просто вычислите интеграл. Вероятно, лучше всего масштабировать высоту бинов, чтобы CDF имел правильные характеристики ... а именно, чтобы значение CDF на + Infinity было 1.0.

Чтобы использовать распределение для моделирования:

3. Нарисуйте X из вашей раздачи: Сделайте ничью Y из U (0,1). Используйте обратный поиск в вашей CDF значения Y, чтобы определить X, чтобы CDF (X) = Y. Поскольку CDF обратима, X уникален.

1
ответ дан 6 December 2019 в 12:46
поделиться

Посмотрите на Apache commons-math.

3
ответ дан 6 December 2019 в 12:46
поделиться

Я слышал о пакете под названием Eureqa , который может хорошо пополнить счет. Я только скачал; Сам еще не пробовал.

0
ответ дан 6 December 2019 в 12:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: