Следующая функция используется для проверки того, является ли x
выборкой, взятой из Binom(size0, prob0)
.К вашему сведению, статистический тест под капотом - это критерий хи-квадрат Пирсона .
goodness.of.fit.test <- function(x, size0, prob0) {
E <- length(x) * dbinom(0:size0, size0, prob0)
x.count <- rep(0, size0 + 1)
x.table <- table(x)
x.count[as.numeric((names(x.table)))] <- unname(x.table)
Q <- sum((x.count - E) ^ 2 / E)
df <- size0
1 - pchisq(Q, df)
}
Однако здесь есть одна загвоздка.Согласно Википедии,
Аппроксимация распределения хи-квадрат нарушается, если ожидаемые частоты слишком низкие.Обычно это приемлемо, если не более 20% событий имеют ожидаемые частоты ниже 5.
Проблема в том, что хвосты биномиального распределения в основном заполнены нулями, и я полагаю, что этопочему результат теста сильно колеблется.Я собираюсь исправить это, объединив слоты в таблице ожиданий, значение которых меньше 5, в больший слот и скорректирую x.count
соответственно.
Например, я могу получить
> E <- 100 * dbinom(0:9, 9, 0.5)
> E
[1] 0.1953125 1.7578125 7.0312500 16.4062500 24.6093750 24.6093750
[7] 16.4062500 7.0312500 1.7578125 0.1953125
> x.count
[1] 1 0 8 19 25 23 18 5 1 0
Элементы в E
, которые больше или равны 5, должны быть оставлены как есть, но те, которые слишком малы, должны быть объединены в больший слот, пока этот слот не будет иметь значение не менее 5. В этом случае первыйдва элемента 0.1953125 + 1.7578125 < 5
, поэтому нам нужно добавить 7.0312500
.Кроме того, поскольку вы объединили E[1]
, E[2]
и E[3]
в новые adjusted$E[1]
, x.count[1]
, x.count[2]
и x.count[3]
, они также должны быть объединены в adjusted$x.count[1]
.
> adjusted <- MAGIC(E, x.count)
> adjusted$E
[1] 8.984375 16.4062500 24.6093750 24.6093750 16.4062500 8.984375
> adjusted$x.count
[1] 9 19 25 23 18 6
Хотя я могу скорректировать свою руку на более короткую x
, этот подход становится невозможным, когда он перерастает в вектор с миллионами элементов.