Pythonによる級内相関係数の計算

検者内・検者間の信頼性を表す指標として級内相関係数ICC; Intraclass correlation)というのがあります[1, 2]。Pythonの統計パッケージにはscipy.statsstatsmodelsがありますが、ICCは実装されていない様です。

最近の統計パッケージpingouinにはありますので紹介します。

pingouinはpipでインストールできます。

pip install pingouin

サンプルコードは以下のとおりです。

import pandas as pd
import pingouin as pg

A = [1,1,3,1,1,2,1,2,1,1]
B = [2,1,3,1,3,2,1,3,3,3]
C = [2,3,3,1,1,1,1,2,3,3]
D = [2,3,3,1,1,2,1,2,3,1]
E = [2,3,3,3,3,2,1,2,3,1]
ratings = A + B + C + D + E
raters = ['A'] * len(A) + ['B'] * len(B) + ['C'] * len(C) + \
         ['D'] * len(D) + ['E'] * len(E)
targets = list('abcdefghij') * 5
data = pd.DataFrame({'targets':targets, 'raters':raters, 'ratings':ratings})
icc = pg.intraclass_corr(data=data, targets='targets', 
                         raters='raters', ratings='ratings')
print(icc.set_index('Type'))

出力結果は以下のとおりです。

                   Description       ICC         F  df1  df2      pval  \
Type                                                                     
ICC1    Single raters absolute  0.266854  2.819923    9   40  0.011519   
ICC2      Single random raters  0.280000  3.221007    9   36  0.005798   
ICC3       Single fixed raters  0.307576  3.221007    9   36  0.005798   
ICC1k  Average raters absolute  0.645380  2.819923    9   40  0.011519   
ICC2k    Average random raters  0.660377  3.221007    9   36  0.005798   
ICC3k     Average fixed raters  0.689538  3.221007    9   36  0.005798   

              CI95%  
Type                 
ICC1   [0.03, 0.64]  
ICC2   [0.05, 0.64]  
ICC3   [0.06, 0.67]  
ICC1k   [0.13, 0.9]  
ICC2k   [0.21, 0.9]  
ICC3k  [0.23, 0.91]  

[1] Shrout, P. E., & Fleiss, J. L. (1979). Intraclass correlations: uses in assessing rater reliability. Psychological bulletin, 86(2), 420. https://pdfs.semanticscholar.org/b8d4/7b0c0b12dd77543e82e6bf6636ddd335cfea.pdf

[2] 医療系データのとり方・まとめ方、対馬栄輝・石田水里、東京図書 (2013年). https://www.amazon.co.jp/dp/4489021437