У меня есть функция для расчета вероятностей для биномиального распределения. Пользователь может ввести выборочную вероятность. Допустим, у них было 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?
1 ответ
В документации есть комментарий, который напрямую касается этого:
If an element of x is not integer, the result of dbinom is zero, with a warning.
Так что это не числовая ошибка как таковая, а то, что если вы дадите dbinom
нецелое число, оно всегда будет возвращать 0 с предупреждением. Так что да, решение состоит в том, чтобы всегда проверять ваши входные данные, чтобы убедиться, что они являются целыми числами.
Новые вопросы
r
R — это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, используйте минимально воспроизводимые примеры, которые другие могут запустить с помощью копирования и вставки. Показать желаемый результат полностью. Используйте dput() для данных и укажите все небазовые пакеты с помощью library(). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. Для вопросов по статистике используйте https://stats.stackexchange.com.