【问题标题】:How to compute the median and 68% confidence interval around the median of non-Gaussian distribution in Python?如何计算 Python 中非高斯分布中位数的中位数和 68% 置信区间?
【发布时间】:2018-12-05 09:05:11
【问题描述】:

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

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

【问题讨论】:

  • 只是为了确认,对于您的数据集,w1 给出了值 a1 的可能性等?
  • 我注意到,即使在“我觉得不错”的答案的情况下,您也不必赞成和接受您的问题的答案。如果您认可这样的答案,您会发现人们更愿意提供帮助!毕竟,您获得了免费帮助,通常来自专家!
  • 如果权重表示这些值的可能性有多大,那么您没有样本,而是总体的描述(这里的离散随机变量案例)和引导将不是正确的做法。回复:置信区间,计算不难,但“只是numpy.percentile”听起来不对。稍后会发布答案。
  • 68% 置信区间的手动计算应该如下工作:创建 (ai, wi) 对并按 ai 对对进行排序。然后,从中位数开始,每个方向的总和(wi)增加 34%。这将是 Wikipedia 上 weighted median 计算对置信区间的扩展。需要考虑边缘情况/值(请注意,例如,维基百科有两个中位数情况),所以我很高兴 scipy.stats 有一个置信区间计算。 :)

标签: python numpy scipy statistics


【解决方案1】:

这里是使用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)

【讨论】:

  • 非常感谢。这是真正有用且更清洁的方式来做我真正需要的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2015-10-07
  • 2011-05-28
  • 2017-11-03
  • 1970-01-01
相关资源
最近更新 更多