有什麼方法可以用熊貓來計算加權相關係數?我看到R有這樣一種方法。 此外,我想獲得關聯的p值。這個我也沒有在R.中找到。 有關加權關聯的解釋的鏈接:https://en.wikipedia.org/wiki/Pearson_product-moment_correlation_coefficient#Weighted_correlation_coefficient與大熊貓的加權相關係數
3
A
回答
5
我不知道任何實現這個功能的Python包,但它應該是相當直接的,可以用來實現自己的實現。使用維基百科文章的命名約定:
def m(x, w):
"""Weighted Mean"""
return np.sum(x * w)/np.sum(w)
def cov(x, y, w):
"""Weighted Covariance"""
return np.sum(w * (x - m(x, w)) * (y - m(y, w)))/np.sum(w)
def corr(x, y, w):
"""Weighted Correlation"""
return cov(x, y, w)/np.sqrt(cov(x, x, w) * cov(y, y, w))
我試圖使上述功能儘可能地匹配在維基百科的公式,但也有一些潛在的簡化和性能改進。例如,正如@Alberto Garcia-Raboso指出的那樣,m(x, w)
實際上只是np.average(x, weights=w)
,所以不需要爲它寫一個函數。
這些功能是相當簡單的,只是做了計算。在計算之前,您可能需要考慮強制輸入爲數組,即x = np.asarray(x)
,因爲如果通過列表,這些函數將不起作用。還可以執行用於驗證所有輸入具有相等長度,非空值等的附加檢查。
用法示例:
# Initialize a DataFrame.
np.random.seed([3,1415])
n = 10**6
df = pd.DataFrame({
'x': np.random.choice(3, size=n),
'y': np.random.choice(4, size=n),
'w': np.random.random(size=n)
})
# Compute the correlation.
r = corr(df['x'], df['y'], df['w'])
有關於p值的討論here。它看起來並不像通用計算,而是取決於你如何獲得權重。
相關問題
- 1. 權與大熊貓
- 2. 與大熊貓的互相關(時滯 - 相關)?
- 3. 大熊貓與熊貓
- 4. 熊貓系列與整個數據框之間的相關性
- 5. 熊貓數據幀與系列的相關性
- 6. 創建相關的熊貓系列
- 7. 追加與大熊貓
- 8. 與大熊貓
- 9. 與大熊貓
- 10. 與大熊貓
- 11. 與大熊貓
- 12. 新近度加權大熊貓
- 13. 熊貓:滾動時間加權與GROUPBY
- 14. 列出熊貓中大相關矩陣的最高相關對?
- 15. 與點大熊貓
- 16. 大熊貓與GROUPBY
- 17. 大熊貓與ISIN
- 18. 大熊貓與Matplotlib開關軸
- 19. 系列索引大熊貓
- 20. 大熊貓 - 繪圖系列
- 21. 熊貓加權平均值
- 22. 無法追加與大熊貓0.17.1 dataframes但可以與大熊貓0.14.1
- 23. 大熊貓相當於data.table
- 24. 加權Spearman等級相關係數R
- 25. 與大熊貓/ numpy的
- 26. 大熊貓與numpy的Dataframes
- 27. 回合大熊貓數據幀/系列
- 28. 大熊貓與附加條件
- 29. 值傳遞的數組與大熊貓
- 30. 在大熊貓中合併數據框與系列的麻煩
'np.average'承認一個'weights'參數,這樣就可以將'm(x,w)'定義爲'np.average(x,weights = w)'等等。 –
@ AlbertoGarcia-Raboso:謝謝,我爲此添加了一條評論。爲了保持一致性,我將代碼保持原樣,以便儘可能與鏈接維基百科文章中的公式匹配。 – root