我继承了一些旧的 Stata 代码 (Stata11),它使用该xtile
函数按分位数对向量中的观察值进行分类(在这种情况下,只是标准的 5 个五分位数,20%、40%、60%、80%、100%) .
我正在尝试在 Python 中复制一段代码,并且我正在使用 SciPy.stats.mstats 函数mquantiles()
进行计算。
据我从 Stata 文档和在线搜索中可以看出,Stataxtile
方法试图反转数据的经验 CDF,并使用 CDF 平坦的所有观察值的等加权平均值来制作切点。这似乎是对分位数进行分类的一种非常糟糕的方法,但事实就是如此,我相信在某些情况下这是正确的做法。
我的问题是如何mquantiles()
产生同样的打破惯例。我注意到这个函数有两个参数,alphap
并且betap
(文档调用它们alpha
,beta
但是你需要额外的'p'才能让它工作,至少我这样做......如果我只使用'alpha'和' beta' 与 Python 2.7.1 和 SciPy 0.10.0)。但即使在 SciPy 文档中,我也看不出这些参数的组合是否会在平坦的 CDF 范围内产生平均值。
我看到了看起来像计算为这个范围的中位数或众数的选项,但不是平均值(也不清楚这些具有 alpha 和 beta 的 SciPy 中位数/众数选项是否被计算为观测值的中位数/众数或产生平坦 CDF 值的范围。)
任何有助于消除这些不同选项的歧义并找到一些帮助我在 Python 中重新创建 Stata 约定的文档都会很棒。请不要回答只是说“编写自己的分位数函数”。首先,这无助于我理解 Stata 或 SciPy 的约定,其次,鉴于这些数值库,编写我自己的分位数函数应该是最后的手段。我当然可以做到,但如果我需要,那就不好了。