1

経験的データを使用して次の積分を再作成しようとしています:

ここに画像の説明を入力

ここで、F、G は cdfs であり、それらの逆数は分位関数です。

これが私のコードです:

def eqces(u,v):
    import numpy as np
    import statsmodels.api as sm
    from scipy.stats.mstats import mquantiles

    ecdfu = sm.distributions.ECDF(u)
    ecdfv = sm.distributions.ECDF(v)
    p = np.concatenate([ecdfu.y, ecdfv.y])
    p = np.unique(p) 
    p.sort()

    qfu = mquantiles(u, p)
    qfv = mquantiles(v, p)

    uvinv = ecdfu(qfv)
    vuinv = ecdfv(qfu)

    result = abs(uvinv - p) + abs(vuinv - p)
    return np.dot(result, np.ones(p.size))

これで私はそれを期待しeqces(u,u) = 0ますu = np.random.uniform(0,1,50)が、これは一般的には当てはまりません。私が何か間違ったことをしているのか、それとも代替案を提案しているのか、誰にもわかりますか?

Edit

このコードは、いくつかの分析結果でうまく機能するようです。

def eqces(u,v): 
    ecdfu = sm.distributions.ECDF(u)
    ecdfv = sm.distributions.ECDF(v)

    p = np.concatenate([ecdfu.y, ecdfv.y])
    X = np.concatenate([ecdfu.x, ecdfv.x])

    return 2*np.dot(np.abs(ecdfu(X)-p)+np.abs(ecdfv(X)-p), np.ones(p.size))/p.size
4

1 に答える 1

1

私の推測では、同じプロット位置を使用しないECDFでくださいmquantiles

mquantilesオプションのキーワードがありますalphap=0.4, betap=0.4

puvinvこの場合、往復しません。

ただし、大きなサンプルでは、​​差は小さいはずです。

scipy.stats.ks_2samp同様のことをしていますが、ヘルパー関数なしで numpy を直接操作しています。

ところで:この2つの分布間の距離測定には名前がありますか?

于 2013-10-17T13:11:58.813 に答える