我有一个 numpy 数组的数据集,比如 a=[a1,a2,.....] 以及数据的权重 w=[w1,w2,w3...]。我使用 numpy histogram 包计算了直方图,它给了我 hist 数组。现在我想计算这个概率分布函数的中值以及围绕中值的 68% 轮廓。请记住,我的数据集不是高斯的。
有人可以帮忙吗?我正在使用Python。
这里使用 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)
一个简单的选项是 NumPy 的
percentile
函数。它给出数据给定百分位数的值(使用 0 - 100)。因此,要获得常见 68% 的中位数以及下限和上限,您可以使用:
import numpy as np
lower, median, upper = np.percentile(the_array, [16, 50, 84])