経験的データを使用して次の積分を再作成しようとしています:
ここで、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