как рассчитать pvalue для одного хвостового теста в python?

Одна доля населения

Исследовательский вопрос: в предыдущие годы 52% родителей считали, что электроника и социальные сети были причиной недосыпа их подростков. Все больше родителей сегодня верят, что бессонница их подростка вызвана электроникой и социальными сетями?

Население: родители с подростком (возраст 13-18 лет) Интересующий параметр: p Нулевая гипотеза: p = 0,52 Альтернативная гипотеза: p > 0,52 (обратите внимание, что это односторонний тест)

1018 Родители

56% считают, что бессонница их подростка вызвана электроникой и социальными сетями.

это односторонний тест, и, по словам профессора, значение p должно быть 0,0053, но когда я вычисляю значение p для z-statistic = 2,5545334262132955 в python:

p_value=stats.distributions.norm.cdf(1-z_statistic)

этот код дает 0,06 на выходе

я знаю, что stats.distributions.norm.cdf дает вероятность левой части статистики, но приведенный выше код дает неправильное значение p

но когда я набираю: stats.distributions.norm.cdf(-z_statistic)

он дает результат как 0,0053,

как это возможно, помогите!!!


person Rajbeer Bhatia    schedule 24.06.2020    source источник
comment
Это неправильное место. Вы должны опубликовать это на сайте статистики StackExchange. Вот полезный совет: если у вас НЕТ КОДА, это не тот сайт.   -  person hrokr    schedule 24.06.2020


Ответы (2)


Вы аппроксимируете биномиальное распределение нормальным, начиная с n*p > 30, и zscore для проверка доли:

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

Итак, расчет такой:

import numpy as np
from scipy import stats
p0 = 0.52
p = 0.56
n = 1018
Z = (p-p0)/np.sqrt(p0*(1-p0)/n)

Z
2.5545334262132955

Ваше Z верно, stats.norm.cdf(Z) дает вам кумулятивную вероятность до Z, и, поскольку вам нужна вероятность наблюдения чего-то более экстремального, чем это, она равна:

1-stats.norm.cdf(Z)
0.0053165109918223985

Функция плотности вероятности нормального распределения симметрична, поэтому 1-stats.norm.cdf(Z) совпадает с stats.norm.cdf(-Z).

person StupidWolf    schedule 25.06.2020

Вопрос формулируется как биномиальная задача: 1018 человек принимают решение да/нет с постоянной вероятностью. В вашем случае 570 из 1018 человек придерживаются этого мнения, и эта вероятность сравнима с 52 %.

Я не знаю о Python, но я подтверждаю, что ваши учителя приводят к R:

> binom.test(570, 1018, p = .52, alternative = "greater")

    Exact binomial test

data:  570 and 1018
number of successes = 570, number of trials =
1018, p-value = 0.005843
alternative hypothesis: true probability of success is greater than 0.52
95 percent confidence interval:
 0.533735 1.000000
sample estimates:
probability of success 
             0.5599214 

Тот факт, что вы обрабатываете z-значения, наводит меня на мысль, что у вас не было проблем с Python, но вы использовали неправильный тест, поэтому я верю, что могу ответить, используя R. Вы можете найти биномиальный тест, реализованный в Python, здесь: https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.binom_test.html

person Bernhard    schedule 25.06.2020