У меня есть функция для расчета вероятностей для биномиального распределения. Пользователь может ввести выборочную вероятность. Допустим, у них было 25 из 35. Они рассчитывают вероятность как 0,7143 и вводят ее в функцию.

Поскольку я использую pbinom(), я умножу эту вероятность на размер выборки, чтобы получить квантиль. Посмотрите на различия, когда я воспроизвожу математику здесь, сначала с вычисленным квантилем, а затем с фактическим счетом.

> 2*pbinom(.7143*35,35,.5,lower.tail = FALSE)+dbinom(.7143*35,35,.5)
[1] 0.005988121
Warning message:
In dbinom(0.7143 * 35, 35, 0.5) : non-integer x = 25.000500

> 2*pbinom(25,35,.5,lower.tail = FALSE)+dbinom(25,35,.5)
[1] 0.01133098

Разница в этой сумме в хвосте может привести к другому выводу.

Вот пример без решки с 18 из 35:

> 2*pbinom(.5143*35,35,.5,lower.tail = FALSE)+dbinom(.5143*35,35,.5)
[1] 0.7358788
Warning message:
In dbinom(0.5143 * 35, 35, 0.5) : non-integer x = 18.000500
> 2*pbinom(18,35,.5,lower.tail = FALSE)+dbinom(18,35,.5)
[1] 0.8679394

Это разница в 13% в p-значении.

Я понимаю, почему появляется предупреждающее сообщение, и я могу легко исправить это, округлив, но почему крошечная ошибка 0,0005 в квантиле так сильно влияет на вычисленное значение p?

r
1
Steven Ouellette 24 Май 2023 в 20:57

1 ответ

В документации есть комментарий, который напрямую касается этого:

If an element of x is not integer, the result of dbinom is zero, with a warning.

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

1
joran 24 Май 2023 в 21:08