获取SciPy的位数来匹配塔塔xtile功能(Getting SciPy quantiles to

2019-09-19 03:08发布

我继承一些旧的Stata代码,使用该(Stata11) xtile通过位数功能进行分类的观察在载体(在这种情况下,仅仅是标准的5个五分位数,20%,40%,60%,80%,100% )。

我试图复制一张在Python代码中,我使用了SciPy.stats.mstats功能mquantiles()的计算。

尽可能靠近我可以从Stata的文档和在线搜索知道的,塔塔xtile方法试图反转数据的经验CDF,并使用所有的观测为其CDF是平的,使分割点的等权重平均值。 这似乎是一个非常差的方式进行分类分位数,但它是什么,我相信有情况下,这是正确的事情。

我的问题是如何使mquantiles()产生相同的排序打破惯例的。 我注意到,这个函数有两个参数, alphapbetap (文档称他们为alphabeta ,但你需要额外的“P”来得到它的工作,至少我是这样......我如果我只是用得到一个错误“阿尔法”和 '测试' 与Python 2.7.1和0.10.0 SciPy的)。 但即使是在SciPy的文档,我看不出是否有这些参数在平CDF范围内产生的平均的组合。

我看到什么样子来计算作为此范围的中位数或模式,但并不意味着(这也不清楚,如果有α和β这些SciPy的中位数/模式选项被计算为观测或的中值/模式的选项将产生的平坦CDF值范围)。

任何帮助消除歧义这些不同的选项,并找到了一些资料,可以帮助我重新在Python中的Stata公约将是巨大的。 请从答案,只是说不要“写自己的分位数的功能。” 首先,它不能帮助我明白无论是塔塔或SciPy的的惯例,其次,考虑到这些数字图书馆,写我自己的分位数函数应该是最后的手段。 我当然能做到这一点,但它是坏的四周,如果我需要。

Answer 1:

该scipy.stats.mquantiles文档差, 的地方,现在固定的,因此可能会有所帮助...... http://docs.scipy.org/scipy/docs/scipy.stats.mstats_basic.mquantiles/ 。 这个过程开始时,你所指出的α/β,alphap / betap差异。 谢谢。

mquantiles的实施遵循R.

最大的区别来自于R具有9点离散的类型,其中,因为scipy.stats.mquantiles计算从“alphap”和“betap”,SciPy的“M”具有“类型”(缺乏一个更好的词)的连续范围。

我承认,我不明白,所有参与,所以我在强力入驻评价统计数据的来龙去脉。 我发现在xtile示例http://www.biostat.sdu.dk/~biostat/StataReferenceManual/StataRef.pdf ,并能与alphap = 0.5,和betap = 0.5(分段线性)匹配的结果。 不是绝对的,也不详尽,但我现在所拥有的。

In [1]: import scipy.stats as st

In [9]: st.mstats.mquantiles([23,56,67,123,99,17],prob=[0.5],alphap=0.5,betap=.5)
Out[9]: array([ 61.5])

In [10]: st.mstats.mquantiles([23,56,67,123,99,17],prob=[0.33,0.66],alphap=0.5,betap=.5)
Out[10]: array([ 38.84,  81.72])

In [11]: st.mstats.mquantiles([23,56,67,123,99,17],prob=[0.25,0.5,0.75],alphap=0.5,betap=.5)
Out[11]: array([ 23. ,  61.5,  99. ])

最后是一个小问题,因为两个分割点正好在数据设定值。 塔塔/ xtile(至少在我发现的例子)不给的分位数分割点,但给人的位数自己。 鉴于已排序数据集[17,23,56,67,99,123]的Stata / xtile得到分类为[1,1,2,3,3,4],这意味着对于scipy.stat.mquantiles匹配的上分位数的结合大于或等于在该位数的所有值。



文章来源: Getting SciPy quantiles to match Stata xtile function