2013-10-17 52 views
1

我試圖重新與經驗數據下面的積分:實證位數比較效果大小

enter image description here

其中,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) = 0u = 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 
+0

你能解決你的格式嗎? – tacaswell

+0

@tcaswell我不太清楚如何在這個問題上添加乳膠格式。你能指示我一些指導方針嗎?我試圖四處尋找,但無法找到如何去做。 – alanlujan91

+0

SO不會做tex標記(我知道)。我更關心代碼的縮進。 – tacaswell

回答

1

我的猜測是,ECDFmquantiles不要使用相同的繪製位置

mquantiles有可選關鍵字alphap=0.4, betap=0.4

puvinv在這種情況下不會往返。

但是,在大樣本中,差異應該很小。

scipy.stats.ks_2samp正在做類似的事情,但直接與numpy一起工作,沒有輔助函數。

順便說一下:這兩個分佈之間的距離測量是否有名字?

+0

我發現它被引用爲「分位數比較效應大小」,它是兩個非正態,非參數(任意)分佈之間差異的度量。 – alanlujan91