Расчет Z-баллов по среднему и st dev
Я хотел бы спросить, имеет ли какой-либо популярный пакет, такой как: numpy, scipy и т. Д., Встроенную функцию для вычисления Z-Score, если я уже знаю критическое значение, mean и st dev.
Я делаю это обычно так:
def Zscore(xcritical, mean, stdev):
return (xcritical - mean)/stdev
#example:
xcritical = 73.06
mean = 72
stdev = 0.5
zscore = Zscore(xcritical, mean, stdev)
а позже я использую scipy.stats.norm.cdf
рассчитать вероятность того, что х ниже критического.
import scipy.stats as st
print(st.norm.cdf(zscore))
Интересно, могу ли я как-нибудь упростить это? Я знаю что есть scipy.stats.zscore
функция, но она берет образец массива, а не образец статистики.
Спасибо!
Matt
4 ответа
Запуск Python 3.9
стандартная библиотека предоставляет zscore
функция на NormalDist
объект как часть statistics
модуль:
NormalDist(mu=72, sigma=.5).zscore(73.06)
# 2.1200000000000045
В вашем вопросе я не уверен, что вы имеете в виду, когда рассчитываете вероятность того, что "x" будет ниже "xcritical", потому что вы не определили "x". В любом случае, я отвечу, как рассчитать z-показатель для значения "х".
Судя по документации по scipy.stats.norm, здесь, похоже, не существует встроенного метода для вычисления z-показателя для значения (в данном случае "xcritical") с учетом среднего значения и стандартного отклонения. Однако вы можете рассчитать то же самое, используя встроенные методы cdf и ppf. Рассмотрим следующий фрагмент (значения такие же, как вы использовали в своем сообщении, где "xcritical" - это значение, для которого вы хотите рассчитать z-показатель):
xcritical = 73.06
mean = 72
stdev = 0.5
p = norm.cdf(x=xcritical,loc=mean,scale=stdev)
z_score = norm.ppf(p)
print('The z-score for {} corresonding to {} mean and {} std deviation is: {:.3f}'.format(xcritical,mean,stdev,z_score))
Здесь мы сначала вычисляем кумулятивную вероятность 'p' получения значения 'xcritical' с учетом 'mean' и 'stdev', используя norm.cdf (). norm.cdf () вычисляет процент площади под кривой нормального распределения от отрицательной бесконечности до значения "x" (в данном случае "xritical"). Затем мы передаем эту вероятность в norm.ppf(), чтобы получить z-оценку, соответствующую этому значению 'x'. norm.ppf() - это функция процентной точки, которая выдает значение (z), соответствующее пройденной вероятности нижнего хвоста в стандартной нормальной распределенной кривой. Вывод этого кода 2.12, который совпадает с тем, что вы получите из функции Zscore ().
Надеюсь, это поможет!
Вы можете сделать это всего в одной строке; вот так:
>>> import scipy.stats as st
>>> st.norm(mean, stdev).cdf(xcritical))
Известно, что срок службы батареи в часах приблизительно нормально распределен со стандартным отклонением σ = 1,25 часа. Случайная выборка из 10 батарей имеет средний срок службы x =40,5 часов. а. Есть ли доказательства, подтверждающие утверждение о том, что время автономной работы превышает 40 часов? Используйте α = 0,5.
norm.sf, потому что я хочу знать правую часть кривой колокола, чтобы ответить, если она превышает альфа.
norm.sf(40.5, loc=40, scale=1.25/np.sqrt(10)) #recall the z score formula
p-значение = 0,102
Но: u=40; Ха: и> 40
Таким образом, значение p больше альфа, поэтому мы не можем отвергнуть нулевую гипотезу и сделать вывод, что действительно есть доказательства, подтверждающие, что срок службы батареи превышает 40 часов. P-значение 0,10> 0,05 альфа