У меня есть образцы данных, для которых я хотел бы вычислить доверительный интервал, предполагая нормальное распределение.
Я нашел и установил пакеты numpy и scipy и получил numpy для возврата среднего и стандартного отклонения (numpy.mean (data) с данными в виде списка). Мы будем очень благодарны за любые советы по получению выборочного доверительного интервала.
python
numpy
statistics
confidence-interval
Bmayer0122
источник
источник
Ответы:
вы можете рассчитать таким образом.
источник
scipy
импорте не обязательно автоматически импортировать все подпакеты. Лучшеscipy.stats
явно импортировать подпакет.sp.stats.t._ppf
. Мне это не нравится без дальнейших объяснений. Лучше использоватьsp.stats.t.ppf
напрямую, если вы не уверены, что знаете, что делаете. При быстром просмотре источника обнаруживается, что изрядное количество кода пропущено_ppf
. Возможно, безобидная, но, возможно, и небезопасная попытка оптимизации?*ss.t._ppf((1+conf)/2.,n-1)
к встроенному.sem
методу фрейма данных pandas, чтобы вам не о чем беспокоитьсяapply
Вот сокращенная версия кода шасана, вычисляющая 95% доверительный интервал среднего значения массива
a
:Но использование StatsModels,
tconfint_mean
возможно, даже лучше:В основе обоих лежит предположение, что выборка (массив
a
) была построена независимо от нормального распределения с неизвестным стандартным отклонением (см. MathWorld или Википедию ).Для большого размера выборки n среднее значение выборки имеет нормальное распределение, и его доверительный интервал можно рассчитать, используя
st.norm.interval()
(как предлагается в комментарии Хайме). Но приведенные выше решения верны также для малых n, чтоst.norm.interval()
дает слишком узкие доверительные интервалы (т. Е. «Ложная уверенность»). См. Мой ответ на аналогичный вопрос для получения более подробной информации (и один из комментариев Русса здесь).Вот пример, в котором правильные параметры дают (по существу) одинаковые доверительные интервалы:
И, наконец, неверный результат с использованием
st.norm.interval()
:источник
st.t.interval(0.05)
чтобы получить 95% доверительный интервал.st.t.interval(0.95)
подходит для 95% доверительного интервала, см. Документацию дляscipy.stats.t
. Однако то, что SciPy называет аргумент,alpha
кажется далеко не идеальным.Начните с поиска z-значения для желаемого доверительного интервала в справочной таблице . Тогда доверительный интервал равен
mean +/- z*sigma
, гдеsigma
- оценочное стандартное отклонение среднего значения выборки, выраженное формулойsigma = s / sqrt(n)
, гдеs
- стандартное отклонение, вычисленное на основе данных выборки, иn
- размер вашей выборки.источник
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
в моем ответе должно быть оценочное стандартное отклонение выборочного среднего, а не оценочное стандартное отклонение распределения. Я обновил ответ, чтобы прояснить это. Спасибо что подметил это.Начиная
Python 3.8
, стандартная библиотека предоставляетNormalDist
объект как частьstatistics
модуля:Это:
Создает
NormalDist
объект из выборки данных (NormalDist.from_samples(data)
, который дает нам доступ к среднему и стандартному отклонению выборки с помощьюNormalDist.mean
иNormalDist.stdev
.Вычислить на
Z-score
основе стандартного нормального распределения (представленногоNormalDist()
) для заданной достоверности, используя обратную функцию кумулятивного распределения (inv_cdf
).Выдает доверительный интервал на основе стандартного отклонения и среднего значения выборки.
Это предполагает, что размер выборки достаточно велик (скажем, более ~ 100 точек), чтобы использовать стандартное нормальное распределение, а не распределение Стьюдента для вычисления
z
значения.источник