4

2 人の独立した評価者から一連の評価 (少なくとも 12 レベルのカテゴリ) があります。評価者間の信頼性を計算したいのですが、1 レベルの差を考慮してください。つまり、レベル 1 とレベル 2 は一致していると見なされますが、レベル 1 とレベル 3 はそうではありません。評価が 1 レベルの差以内にあるかどうかを知ることが重要なので、相関係数のような尺度は使用したくありません。これはできますか?

サンプル データを含めるように編集します。各セルは、AE の評価を割り当てる評価者の数 (最大 = 2) を表します。

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")

4

1 に答える 1

6

わかりました、これがうまくいくかどうかはわかりませんが、的を射ていると思います。基本的に、さまざまな合意基準の下で評価者間の合意を見つける必要があります。それは本当に大したことではありません。基本的に、コーエンのカッパの目的のために、評価者は同意するかしないかのどちらかです。

サンプルデータを作成することから始めます。

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 でフォローアップを依頼する必要がある場合があります。

于 2013-04-24T15:57:10.573 に答える