如何在Python中计算非高斯分布的中位数和中位数周围的68%置信区间?

问题描述 投票:0回答:2

我有一个 numpy 数组的数据集,比如 a=[a1,a2,.....] 以及数据的权重 w=[w1,w2,w3...]。我使用 numpy histogram 包计算了直方图,它给了我 hist 数组。现在我想计算这个概率分布函数的中值以及围绕中值的 68% 轮廓。请记住,我的数据集不是高斯的。

有人可以帮忙吗?我正在使用Python。

python numpy scipy statistics
2个回答
8
投票

这里使用 scipy.stats.rv_discrete 的解决方案:

from __future__ import division, print_function
import numpy as np, scipy.stats as st

# example data set
a = np.arange(20)
w = a + 1

# create custom discrete random variable from data set
rv = st.rv_discrete(values=(a, w/w.sum()))

# scipy.stats.rv_discrete has methods for median, confidence interval, etc.
print("median:", rv.median())
print("68% CI:", rv.interval(0.68))

输出反映了示例数据集中权重不均匀的情况:

median: 13.0
68% CI: (7.0, 18.0)

0
投票

一个简单的选项是 NumPy 的

percentile
函数。它给出数据给定百分位数的值(使用 0 - 100)。因此,要获得常见 68% 的中位数以及下限和上限,您可以使用:

import numpy as np

lower, median, upper = np.percentile(the_array, [16, 50, 84])
© www.soinside.com 2019 - 2024. All rights reserved.