我试图用经验数据重建以下积分:
其中F,G是cdf,它们的逆是分位数函数。在
我的代码是:
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
此代码在某些分析结果下似乎能更好地工作:
^{pr2}$
我的猜测是
ECDF
和mquantiles
没有使用相同的绘图位置mquantiles
有可选关键字alphap=0.4, betap=0.4
。在在这种情况下,}不会往返。在
p
和{然而,在大样本中,差异应该很小。在
scipy.stats.ks_2samp
正在执行类似的操作,但是直接使用numpy而不使用helper函数。在顺便问一下:这两个分布之间的距离度量有名字吗?在
相关问题 更多 >
编程相关推荐