在Python中,如何计算非高斯分布的中位数和中位数周围的68%置信区间?
我有一个数据集,它是一个numpy数组,比如a=[a1,a2,…],还有数据的权重w=[w1,w2,w3…]。我已经使用numpy直方图包计算了直方图,它给了我hist数组。现在我想计算这个概率分布函数的中位数,以及中位数周围68%的等高线。记住,我的数据集不是高斯分布的 有人能帮忙吗?我正在使用python。这里有一个解决方案,它使用: 输出反映了示例数据集中的不均匀权重:在Python中,如何计算非高斯分布的中位数和中位数周围的68%置信区间?,python,numpy,scipy,statistics,Python,Numpy,Scipy,Statistics,我有一个数据集,它是一个numpy数组,比如a=[a1,a2,…],还有数据的权重w=[w1,w2,w3…]。我已经使用numpy直方图包计算了直方图,它给了我hist数组。现在我想计算这个概率分布函数的中位数,以及中位数周围68%的等高线。记住,我的数据集不是高斯分布的 有人能帮忙吗?我正在使用python。这里有一个解决方案,它使用: 输出反映了示例数据集中的不均匀权重: 中值:13.0 68%可信区间:(7.0,18.0) 看看。为了确认,对于您的数据集,w1给出了a1值的可能性,等等。我
中值:13.0
68%可信区间:(7.0,18.0)
看看。为了确认,对于您的数据集,w1给出了a1值的可能性,等等。我注意到,即使答案“我觉得不错”,您也不必对问题的答案进行投票并接受。如果您认识到这些答案,您会发现人们更愿意提供帮助!毕竟,你得到了免费的帮助,通常来自专家!如果权重表示值的可能性,则您没有样本,但有总体描述(在本例中为离散随机变量),引导不是正确的做法。Re:置信区间,计算并不困难,但“仅仅是numpy.percentile”听起来并不正确。稍后将发布答案。手动计算68%的置信区间应如下所示:创建(ai,wi)对并按ai排序对。然后,从中间值开始,在每个方向上的总和(wi)增加34%。这将是维基百科计算置信区间的扩展。边缘情况/值需要仔细考虑(注意,例如Wikipedia有两个中位数情况),因此我很高兴scipy.stats有一个置信区间计算:非常感谢你。这是一种非常有用的、更干净的方法,可以做我真正需要的事情。
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))