Вычисление корреляций и проверка соответствия для тестирования prng

Я следую описанию теста для генераторов псевдослучайных чисел и пытаюсь реализовать тест на C. Однако есть одна вещь, на которой я зациклился. Рассматриваемый текст выглядит следующим образом:

Применяет тест корреляции к весам Хэмминга последовательных блоков из L битов. Пусть Xj будет весом Хэмминга (количество битов, равных 1) блока jth для j = 1, . . . , n. Тест вычисляет эмпирическую корреляцию между последовательными Xj,

введите здесь описание изображения

При H0, как n ⇢ infinity, p̂ * sqrt(n - 1) имеет асимптотически стандартное нормальное распределение. Это то, что используется в тесте. Тест действителен только для больших n.

Теперь мой план состоит в том, чтобы вычислить эту тестовую статистику и выполнить тест на соответствие нормальному распределению с использованием теста Андерсона-Дарлинга. Однако я немного смущен тем, как вы получаете распределение из этой статистики одного теста. Насколько я понимаю, для моего полного набора битов n я получу только один . Тогда я получу только одну тестовую статистику p̂ * sqrt(n - 1). Как я должен сравнить это с нормальным распределением? Будет ли идея разбить мой набор данных на несколько фрагментов с собственными n, вычислить тестовую статистику для каждого, а затем сравнить это распределение со стандартным нормальным? Я просто хочу убедиться, что правильно понимаю расчет .


person Davigor    schedule 06.10.2017    source источник


Ответы (2)


ЕСЛИ вы хотите выполнить perform a goodness of fit test to the normal distribution, это означает, что у вас должно быть много выборочных значений Гаусса. Таким образом, если p̂ * sqrt(n - 1) асимптотически равно N (0,1), то одиночный тестовый запуск даст одно число. Поэтому, если у вас есть программный RNG для тестирования, вы продолжаете с другими n выборками и получаете еще одно случайное число N (0,1) и т. д. Если у вас уже есть N числа, скажем, от какого-то аппаратного устройства, вы должны разделить его. в кусках, запустите тест, из каждого куска вы получите одно число, предположительно из N (0,1), и вы запустите тест распределения.

Бумага: Остерегайтесь линейных конгруэнтных генераторов с множителями вида a = +-2q +-2r ПЬЕР Л’ЭКЮЙЕР и РИЧАРД СИМАР, AACM, 1999 г.

у меня есть копия если надо

person Severin Pappadeux    schedule 06.10.2017

Проверка частотной гипотезы включает определение вероятности наблюдения статистического значения теста в предположении, что нулевая гипотеза верна. Если значение тестовой статистики высоковероятно, нулевая гипотеза не отвергается. Если значение тестовой статистики «маловероятно», нулевая гипотеза отклоняется. Значение «маловероятно» определяется как уровень достоверности теста, α.

Согласно вашему тексту, при нулевой гипотезе T = p̂ * sqrt(n - 1) асимптотически распределяется как стандартное нормальное распределение T ~ N(0, 1). Итак, чтобы провести тест при двух гипотезах:

Null: T = 0
Alternate: T <> 0

затем с вашим единственным наблюдаемым значением :

  1. Вычислите t = p̂ * sqrt(n - 1).
  2. Вычислите p = P(|T| > |t|), т. е. найдите хвостовые вероятности для N (0, 1) при значении |t|.
  3. Если p меньше вашего уровня достоверности, отклоните нулевую гипотезу в пользу альтернативной гипотезы.

В качестве примера предположим, что вы сгенерировали последовательность из n=10001 случайных чисел и на основе последовательности вычислили значение 0.025. Чтобы определить значимость этого значения на уровне значимости α = 0.05:

  1. Вычислить t = p̂ * sqrt(n - 1) = 0.025 * sqrt(10001 - 1) = 2.5
  2. Вычислить p = P(|T| > |t|) =P(|T| > 2.5) = 0.01242
  3. Начиная с p < α, данные подтверждают отклонение нулевой гипотезы.
person Brent Worden    schedule 06.10.2017