我继承一些旧的Stata代码,使用该(Stata11) xtile
通过位数功能进行分类的观察在载体(在这种情况下,仅仅是标准的5个五分位数,20%,40%,60%,80%,100% )。
我试图复制一张在Python代码中,我使用了SciPy.stats.mstats功能mquantiles()
的计算。
尽可能靠近我可以从Stata的文档和在线搜索知道的,塔塔xtile
方法试图反转数据的经验CDF,并使用所有的观测为其CDF是平的,使分割点的等权重平均值。 这似乎是一个非常差的方式进行分类分位数,但它是什么,我相信有情况下,这是正确的事情。
我的问题是如何使mquantiles()
产生相同的排序打破惯例的。 我注意到,这个函数有两个参数, alphap
和betap
(文档称他们为alpha
和beta
,但你需要额外的“P”来得到它的工作,至少我是这样......我如果我只是用得到一个错误“阿尔法”和 '测试' 与Python 2.7.1和0.10.0 SciPy的)。 但即使是在SciPy的文档,我看不出是否有这些参数在平CDF范围内产生的平均的组合。
我看到什么样子来计算作为此范围的中位数或模式,但并不意味着(这也不清楚,如果有α和β这些SciPy的中位数/模式选项被计算为观测或的中值/模式的选项将产生的平坦CDF值范围)。
任何帮助消除歧义这些不同的选项,并找到了一些资料,可以帮助我重新在Python中的Stata公约将是巨大的。 请从答案,只是说不要“写自己的分位数的功能。” 首先,它不能帮助我明白无论是塔塔或SciPy的的惯例,其次,考虑到这些数字图书馆,写我自己的分位数函数应该是最后的手段。 我当然能做到这一点,但它是坏的四周,如果我需要。
该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匹配的上分位数的结合大于或等于在该位数的所有值。