Я написал программу, которая генерирует случайные данные. Если программа работает правильно, эти данные должны соответствовать определенному, известному распределению вероятности. Я хотел бы запустить программу, сделать некоторые расчеты по результату и получить значение p.
Прежде чем кто-либо еще скажет это: я понимаю, что проверка гипотез не может определить, когда программа работает правильно. Он может только обнаружить, когда он работает неправильно определенным образом. (И даже в этом случае тест «должен» провалиться X% времени, в зависимости от того, какой уровень значимости вы выберете ...)
Итак, я пытаюсь понять, какие инструменты могут быть подходящими. Особенно:
Я могу генерировать столько случайных данных, сколько захочу. Все, что мне нужно сделать, это оставить программу работающей достаточно долго. Так что я не ограничен каким-либо конкретным размером выборки.
Я заинтересован в методах, которые производят р-значение. Так что смотреть на график и говорить «да, это выглядит довольно линейно» - не интересный вариант. Если не существует какого-либо способа поставить жесткое число на «шаткость» графа. ;-)
Что я знаю до сих пор:
Я видел три основных вида упомянутых тестов, которые звучат так, будто они могут быть применимы: критерий хи-квадрат [Пирсона], тест Колмогорова-Смирнова и тест Андерсона-Дарлинга.
Похоже, что критерий хи-квадрат подходит для дискретных распределений, в то время как два других больше подходят для непрерывных распределений. (?)
Различные источники намекают на то, что тест AD "лучше", чем тест KS, но не вдаваться в подробности.
В конечном итоге все эти тесты предположительно обнаруживают «разные способы» отклонения от указанного нулевого распределения. Но я пока не знаю, в чем различия ... В общем, я ищу какое-то общее описание того, где каждый тип теста наиболее применим, и какие проблемы он обнаруживает лучше всего.
источник
Ответы:
Вот общее описание того, как работают 3 упомянутых метода.
Метод Chi-Squared работает путем сравнения количества наблюдений в корзине с числом, которое, как ожидается, будет в корзине, на основе распределения. Для дискретных распределений бункеры обычно представляют собой дискретные возможности или их комбинации. Для непрерывных распределений вы можете выбрать точки разреза для создания корзин. Многие функции, которые реализуют это, автоматически создают ячейки, но вы должны иметь возможность создавать свои собственные ячейки, если хотите сравнивать в определенных областях. Недостаток этого метода заключается в том, что различия между теоретическим распределением и эмпирическими данными, которые все еще помещают значения в одну и ту же ячейку, не будут обнаружены, примером может служить округление, если теоретически числа от 2 до 3 должны быть распределены по всему диапазону. (мы ожидаем увидеть значения, такие как 2.34296),
Статистика теста KS - это максимальное расстояние между 2 сравниваемыми функциями распределения (часто теоретическим и эмпирическим). Если 2 распределения вероятностей имеют только 1 точку пересечения, то 1 минус максимальное расстояние - это область перекрытия между 2 распределениями вероятности (это помогает некоторым людям визуализировать то, что измеряется). Подумайте о том, чтобы построить на том же графике теоретическую функцию распределения и EDF, а затем измерить расстояние между двумя «кривыми», наибольшая разница - это статистика теста, и она сравнивается с распределением значений для этого, когда значение равно нулю. Это отражает различия в форме распределения или 1 распределение смещено или растянуто по сравнению с другим.1N
В тесте Андерсона-Дарлинга также используется разность между кривыми CDF, как в тесте KS, но вместо максимальной разницы используется функция общей площади между двумя кривыми (она фактически возводит в квадрат различия, взвешивает их так, чтобы хвосты имели больше влияния, то интегрируется в область распределений). Это придает больший вес выбросам, чем KS, а также дает больший вес, если есть несколько небольших различий (по сравнению с 1 большой разницей, которую KS подчеркнул бы). Это может привести к тому, что тест окажется слишком мощным, чтобы найти различия, которые вы сочтете неважными (легкое округление и т. Д.). Как и в случае теста KS, предполагается, что вы не оценивали параметры по данным.
Вот график, чтобы показать общие идеи последних 2:
на основе этого кода R:
Верхний график показывает EDF образца из стандартной нормали по сравнению с CDF стандартной нормали с линией, показывающей статистику KS. Средний график затем показывает разницу в 2 кривых (вы можете увидеть, где происходит статистика KS). Нижняя часть - это квадрат, взвешенная разница, тест AD основан на площади под этой кривой (при условии, что я все понял правильно).
Другие тесты смотрят на корреляцию в qqplot, смотрят на наклон в qqplot, сравнивают среднее значение, var и другие характеристики на основе моментов.
источник
+1 за написание четкого и подробного вопроса. Я надеюсь, что мой ответ не слишком расстраивает. Я считаю, что проверка гипотез не является подходящим подходом в вашем случае. Проверка значимости нулевой гипотезы - разумная вещь, когда ответом может быть «да» или «нет», но вы не знаете, какой именно . (К сожалению, на самом деле это не говорит о том, что именно, но это другая проблема.) В вашем случае, я понимаю, вы хотите знать, хорош ли ваш алгоритм. Однако известно (с уверенностью), что ни одна компьютерная программа не может генерировать действительно случайные данные из любого распределения вероятностей. Во-первых, это так, потому что все компьютеры являются конечными автоматами и, следовательно, могут генерировать только псевдослучайные числа., Кроме того (исключая отсутствие истинной случайности), невозможно, чтобы сгенерированные значения точно повторяли любое непрерывное распределение. Есть несколько способов понять это, но, возможно, самый простой из них состоит в том, что в числовой строке будут «пробелы», чего нельзя сказать о любой непрерывной случайной переменной. Более того, эти промежутки не все совершенно одинаково широки или совершенно одинаково разнесены. Среди компьютерных ученых, которые работают над генерацией псевдослучайных чисел, название игры заключается в том, чтобы улучшить алгоритмы так, чтобы промежутки были меньше, более равномерными, с более длительными периодами (а также которые могли генерировать больше значений быстрее). В любом случае, эти факты устанавливают, что проверка гипотез является неправильным подходом для определения того, правильно ли ваш алгоритм следует «определенному, известному распределению вероятностей», потому что это не так. (Сожалею.)
Вместо этого, более подходящей основой является определение того, насколько близки ваши данные к теоретическому распределению. Для этого я бы рекомендовал пересмотреть графики, в частности qq-plots и pp-plots1 - β г = 1
С другой стороны, что касается оценки качества вашего алгоритма, вы можете рассчитать его время относительно других стандартных pRNG.
Надеюсь это поможет.
источник
SnowsPenultimateNormalityTest
вTeachingDemos
пакете для R. Я согласен с идеей @ gung смотреть на меру близости, а не фокусироваться на p-значении. Одна из проблем, связанных с использованием корреляции на графике qq, заключается в том, что если ваши данные имеют правильную форму, но другое среднее значение, дисперсию и т. Д., Вы все равно можете получить действительно высокую корреляцию. Альтернативой является использование статистики KS или AD в качестве меры отличия от теоретической.Я не полностью прочитал все ответы, но вижу, что они довольно тщательные и точные. Риск того, что я повторяю что-то скрытое в длинных ответах, я просто хочу сказать, что v = критерий хи-квадрат можно использовать для непрерывных данных. Это может быть не самый лучший тест, и, как и многие другие тесты, он основан на асимптотической теории и поэтому может быть неточным в небольших выборках с разреженными ячейками (это зависит также от того, как вы выполняете биннинг). Андерсон-Дарлинг более силен для проверки нормальности, чем тест KS, но KS может быть лучше для других непрерывных распределений. У Лиллефорса есть тест, который предназначен для экспоненциального распределения.
источник