2017-12-02 209 views
1

問題Python-如何做2D數組的f測試?

我有兩個數組,我們會打電話給他們AR1和AR2(大小(192289)),代表LAT-LON標準偏差的地圖,我有一個同樣大小的數組區別。我想繪製這個差異,並且在兩個陣列之間的差異在統計上顯着的95%置信水平(α= 0.05)上的點狀模式上。

我是用我的coding-這個例子的代碼

How do I do a F-test in python

我用喬爾·科內特的解決方案,替代ar1並在X ar2和Y

F = np.var(ar1)/np.var(ar2) 
print np.var(ar1), np.var(ar2) 
print F 

0.118586507371 0.161485609461 0.734347213766

對於下一部分,我想要N-2自由度用於我的分析,其中N是陣列中的點數,在本例中爲55848(192 x 289)。 len(ar1)len(ar2)在這裏不起作用,因爲它們只給出第一維的長度,所以我嘗試將數組展平爲正確的長度。

df1 = len(np.ndarray.flatten(sdmod)) - 2 
df2 = len(np.ndarray.flatten(sdcon)) - 2 
print df1, df2 

55486 55486

然而,這個我結束了9.88365269356e-289的p值(基本爲0)前進。這是一個單一的值,正如我在這個特殊情況下所預期的那樣,統計上並不重要,但是我需要一個值爲的數組,以便進行點劃分,以便我可以查看網格中是否存在差異顯着的地方。我只是不確定如何在二維數組上執行此測試,因爲我找到的所有示例都使用了列表或其他一維數據類型,而且我以前也從未做過這樣的分析。 (我正在應我的顧問的要求,他不使用Python)。

如何執行上的兩個2 d陣列,其中的結果給出了一個類似尺寸的陣列,讓你爲每個網格點的p值的t-檢驗的問題?

我可以修改這個,如果可能的話填寫任何我可能由於缺乏對主題的理解而丟失的東西(並且讓我知道是我得到的p值看起來不正確),但是如果這樣複雜或不完整的幫助,我會刪除它。

回答

0

這取決於你的數組。如果步長足夠大,經緯度/長度數組可以分成較小的塊,則可以評估24x24的平方而不是整個數組。你可以檢查不同的尺度,看看有什麼意義。爲了實現這種嘗試沿着此線的東西:

F = np.zeros((derp.shape[0]-24, derp.shape[1]-24)) 
for a in np.arange(0, F.shape[0]): 
    for b in np.arange(0, F.shape[1]): 
     F[a,b] = np.var(ar1[a:a+24, b:b+24])/np.var(ar2[a:a+24, b:b+24]) 

這將產生類似的大小輸出(168265)陣列,因爲24×24平方的1步驟不一定意義上面的代碼進行評估了。半重疊的正方形將產生更小的步長的更明智的結果:

F = np.zeros(((derp.shape[0]-24)//12, (derp.shape[1]-24)//12)) 
for a in np.arange(0, F.shape[0]): 
    for b in np.arange(0, F.shape[1]): 
     F[a,b] = np.var(derp[a*12:a*12+24, b*12:b*12+24])/np.var(derp2[a*12:a*12+24, b*12:b*12+24]) 

這會產生(14,22)數組。

+0

感謝您的回覆。我已經嘗試過你的方法,並將p_value < (>)alpha的值賦給一個數組,其中它們的值爲1(0)。然而,在結果數組中,我的「重要」結果並不符合我所期望的ar1和ar2之間差別很大的區域。需要說明的是,df1和df2 = F中使用的尺寸大小? – ChristineB