2016-12-05 267 views
4

我在用Python計算intraclass correlation (ICC)。我一直無法找到具有此功能的現有模塊。有沒有別的名字,還是我應該自己做?我知道這個問題被詢問a year ago由其他用戶交叉驗證,但沒有答覆。我期待比較兩位評分員之間的連續分數。Python模塊中的Intraclass Correlation?

+0

您可能還想看到[this](http://stats.stackexchange.com/q/63368/61867)問題,其中包含一些代碼。我熟悉numpy中的很多功能,但我之前沒有看到過ICC。您可能還想搜索scikit-learn和statsmodels軟件包的文檔。用任何一種方式手動執行似乎都不難。請考慮使用numpy,尤其是速度對您很重要的時候。不要忘記在這裏發佈你的答案,以幫助其他人在未來尋找這個答案! – Praveen

+0

謝謝Praveen。這也是WalR提供的。在這一點上,自己寫這本書會更快。在python中搜索實現時,ICC的大部分結果都是Intel C++ Compiler。我沒有發現它埋在神經之中。有人可能會發現在scipy/numpy中完全實現ICC是有用的。我會跟進我使用的實現或代碼。 – Hector

回答

3

你可以找到ICCBrain_Data.icc

+0

我以前沒有找到。這是ICC(3,1)的具體實現。我想看看模塊中是否存在所有ICC變體的實現。如果沒有實現,我相信我需要ICC(2,2),我可以編碼。 – Hector

+0

@Hector還有一個'icc2'的實現檢查我的編輯和祝你好運。 – Zety

+0

很棒的發現,謝謝! – Hector

3

的實現有在RICC的幾種實現。這些可以從Python通過rpy2包使用。例如:

from rpy2.robjects import DataFrame, FloatVector, IntVector 
from rpy2.robjects.packages import importr 
from math import isclose 

groups = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 
      4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8] 
values = [1, 2, 0, 1, 1, 3, 3, 2, 3, 8, 1, 4, 6, 4, 3, 
      3, 6, 5, 5, 6, 7, 5, 6, 2, 8, 7, 7, 9, 9, 9, 9, 8] 

r_icc = importr("ICC") 
df = DataFrame({"groups": IntVector(groups), 
       "values": FloatVector(values)}) 
icc_res = r_icc.ICCbare("groups", "values", data=df) 
icc_val = icc_res[0] # icc_val now holds the icc value 

# check whether icc value equals reference value 
print(isclose(icc_val, 0.728, abs_tol=0.001))