わかりました、これがうまくいくかどうかはわかりませんが、的を射ていると思います。基本的に、さまざまな合意基準の下で評価者間の合意を見つける必要があります。それは本当に大したことではありません。基本的に、コーエンのカッパの目的のために、評価者は同意するかしないかのどちらかです。
サンプルデータを作成することから始めます。
testdata <- structure(list(A=c(2,2,0,0,0,0,0,0,0),
B=c(0,0,0,0,1,0,1,0,2),
C=c(0,0,0,0,1,0,0,2,0),
D=c(0,0,2,0,0,2,1,0,0),
E=c(0,0,0,2,0,0,0,0,0)),
row.names = c(NA,9L),
class = "data.frame")
カッパの計算には、次のirr
パッケージを使用します。
library(irr)
のkappa2
関数irr
は、2*n データ フレームまたは行列を受け取り、計算を返します。データの形式が異なるため、kappa2
処理できる形式に変換する必要があります。すでにこの形式になっている場合は、はるかに簡単になります。
まず、再構築された結果を受け取るための新しいデータ フレームを作成します。
new_testdata <- data.frame(R1="",R2="",stringsAsFactors=FALSE)
ここで、単純なループが各行に行き、各評価者による評価を含むベクトルを返します。明らかに、これは割り当てられた実際の評価ではありません。ここのコードは、1 番目の評価者が 2 番目の評価者より常に高い評価を付けていることを前提としています。この特定のケースでは、合意にのみ関心があるため問題ありませんが、完全なデータがあることを願っています.
for(x in 1:dim(testdata)[1]) {
new_testdata <- rbind(new_testdata,rep(names(testdata),testdata[x,]))
}
rm(x)
new_testdata <- new_testdata[-1,] # Drop first, empty column
これで、通常のカッパを入手できます。
kappa2(ratings=new_testdata)
Cohen's Kappa for 2 Raters (Weights: unweighted)
Subjects = 9
Raters = 2
Kappa = 0.723
z = 4.56
p-value = 5.23e-06
ここで、1 つのレベルの不一致が問題として記録されない別のカッパが必要です。それは問題ありません; 基本的に、あなたがする必要があるのは、入っているものnew_testdata
を同意または不同意のバイナリ表現に変換することです。この場合、カッパには影響しません。(ただし、評価者が選択できるレベルが 2 つしかない場合、カッパに影響します。これにより、人為的に値が制限されます)。
まず、文字を数字に変換するテーブルを作成しましょう。これにより、私たちの生活が楽になります。
convtable <- data.frame(old=c("A","B","C","D","E"),
new=c(1,2,3,4,5),
stringsAsFactors=FALSE)
これを使用して、new_testdata の値を数値表現に変換できます。
new_testdata$R1 <- convtable$new[match(new_testdata$R1,convtable$old)]
new_testdata$R2 <- convtable$new[match(new_testdata$R2,convtable$old)]
2 つの列の差を取るだけで、一致を簡単に確認できます。
new_testdata$diff <- abs(new_testdata$R1-new_testdata$R2)
次に、R1 と R2 を再コード化して、合意基準 (2 つの評価の差が 1 レベル以下) を満たす場所の場合は 1 と 1 に、それ以外の場合は 1 と 0 (または 0 と 1) にします。
new_testdata[new_testdata$diff<=1,c("R1","R2")] <- c(1,1)
new_testdata[new_testdata$diff>1,c("R1","R2")] <- c(1,0)
new_testdata <- new_testdata[1:2] # Drop the difference variable
さて、カッパをもう一度実行してください。
kappa2(ratings=new_testdata)
Cohen's Kappa for 2 Raters (Weights: unweighted)
Subjects = 9
Raters = 2
Kappa = 0
z = NaN
p-value = NaN
おっと、どうしたの?ええと、あなたが私にくれたデータは、一致を+/- 1レベルとして使用する場合、基本的に完全に一致していました. 私がリンクした CrossValidated の投稿に示されているように、バイナリ応答変数でカッパを実行するときに発生する可能性のある方法論的な問題がいくつかあります。データがサンプル データよりも「均一」でない場合は、そのような異常なゼロではなく、実際のカッパ値を取得する必要があります。ただし、これは方法に関する質問であり、CrossValidated でフォローアップを依頼する必要がある場合があります。