2

xtile関数を使用してベクトル内の観測値を分位数 (この場合は、標準の 5 つの分位数、20%、40%、60%、80%、100%) で分類する古い Stata コード (Stata11) を継承しました。 .

Python でコードの一部を複製しようとしており、計算に SciPy.stats.mstats 関数mquantiles()を使用しています。

Stata のドキュメントとオンライン検索からわかる限り、Stata のxtile方法はデータの経験的 CDF を逆にしようとし、CDF がフラットであるすべての観測値の均等加重平均を使用してカットポイントを作成します。これは、分位点を分類する方法としては非常に貧弱に思えますが、実際にはそうであり、これが正しい方法である場合もあると確信しています。

私の質問はmquantiles()、同じ種類の慣習を壊す方法です。alphapこの関数には 2 つのパラメーターがあることに気付きましたbetap(ドキュメントではそれらalphaを呼び出してbetaいますが、それを機能させるには追加の 'p' が必要です。少なくとも私はそうしています... 'alpha' と ' beta' と Python 2.7.1 および SciPy 0.10.0)。しかし、SciPy のドキュメントでも、フラットな CDF 範囲で平均を生成するこれらのパラメーターの組み合わせがあるかどうかはわかりません。

この範囲の中央値またはモードとして計算するオプションのように見えますが、平均値ではありません (アルファとベータを含むこれらの SciPy 中央値/モード オプションが、観測値またはフラット CDF 値を生成する範囲)。

これらのさまざまなオプションのあいまいさを解消し、Python で Stata 規則を再作成するのに役立つドキュメントを見つけてください。「独自の分位数関数を記述してください」というだけの回答は控えてください。第一に、それは Stata や SciPy の慣例を理解するのに役立ちません。第二に、これらの数値ライブラリを考えると、独自の分位関数を作成するのは最後の手段です。私は確かにそれを行うことができますが、必要に応じて全体的に悪いでしょう.

4

1 に答える 1

7

scipy.stats.mquantiles のドキュメントは貧弱で場所が間違っていましたが、修正されたので参考になるかもしれません... http://docs.scipy.org/scipy/docs/scipy.stats.mstats_basic.mquantiles/ . そのプロセスは、あなたがアルファ/ベータ、アルファアップ/ベータアップの不一致を指摘したときに始まりました。ありがとうございました。

mquantiles の実装は R に従います。

最大の違いは、R には 9 つの個別の型があることです。scipy.stats.mquantiles は 'alphap' と 'betap' から 'm' を計算するため、scipy には連続した範囲の「型」があります (適切な言葉がないため)。

関連する統計の詳細をすべて理解しているわけではないことを認めるので、力ずくで評価することにしました。http://www.biostat.sdu.dk/~biostat/StataReferenceManual/StataRef.pdfで xtile の例を見つけ、結果を 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. ])

分割点のうちの 2 つはデータセットの値に正確に一致するため、最後は少し問題があります。Stata/xtile (少なくとも私が見つけた例では) は、分位点の分割点を提供しませんが、分位点自体を提供します。ソートされたデータセット [17,23,56,67,99,123] が与えられた場合、Stata/xtile は分類を [1,1,2,3,3,4] として与えました。これは、scipy.stat.mquantiles が上位に一致することを意味します分位の境界は、その分位のすべての値以上です。

于 2012-07-07T05:17:27.453 に答える