4

複数の (バイナリ) 基準で一連のビデオクリップを判断する 2 人の評価者からのデータ セットを入手しました。彼らの同意/不同意をよりよく理解するために、混同マトリックスをプロットしたいと思います。しかし、これまでに見つけたすべての例は、各審査員がクリップごとに 1 つの基準のみを評価した場合のものです。私の場合、審査員は各クリップのすべての基準を評価します。

ビデオクリップのセット (この場合は 80) に対して、2 人の評価者 (A と B) によって判断される 4 つのバイナリ基準 (A_Con..A_Mod) があるとします。

str (mydata)
'data.frame':   160 obs. of  6 variables:
 $ A_Con: int  0 0 0 0 0 0 0 0 0 0 ...
 $ A_Dom: int  0 0 0 1 0 0 0 0 0 0 ...
 $ A_Met: int  0 0 0 0 0 0 1 0 0 1 ...
 $ A_Mod: int  0 0 0 1 0 1 0 0 0 1 ...
 $ Rater: Factor w/ 2 levels "A","B": 2 2 2 2 2 2 2 2 2 2 ...
 $ Clip : int  1 2 3 4 5 6 7 8 9 10 ...

これを次のように溶かすことができます:

> str(mymolten)
'data.frame':   640 obs. of  4 variables:
 $ Rater   : Factor w/ 2 levels "A","B": 2 2 2 2 2 2 2 2 2 2 ...
 $ Clip    : int  1 2 3 4 5 6 7 8 9 10 ...
 $ variable: Factor w/ 4 levels "A_Con","A_Dom",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : int  0 0 0 0 0 0 0 0 0 0 ...

しかし、それを組み合わせをカウントする混同行列にキャストする方法がわかりません(これはこれほど完璧ではありません):

                        Rater B
              A_Con  A_Dom  A_Met  A_Mod
         A_Con  19      1      0      0
Rater A  A_Dom   1     20      0      0
         A_Met   0      0     20      5
         A_Mod   0      2      0     20

table() 関数が良いようですが、データをフォーマットするにはどうすればよいでしょうか?

4

1 に答える 1

3

これは、最も単純な解決策ではない可能性があります。2 人の評価者のデータとmerge、結果の data.frames を分離できます。

# Sample data
n <- 80
d0 <- data.frame(
  A_Con = round(runif(2*n)),
  A_Dom = round(runif(2*n)),
  A_Met = round(runif(2*n)),
  A_Mod = round(runif(2*n)),
  Rater = rep(c("A","B"), n),
  Clip = rep(1:n,each=2)
)

library(reshape2)
library(plyr)
d <- melt(d0, id.vars=c("Rater","Clip"))
d <- d[ d$value==1, ]
A <- d[d$Rater=="A",] 
B <- d[d$Rater=="B",]
A <- data.frame( Clip=A$Clip, A=A$variable )
B <- data.frame( Clip=B$Clip, B=B$variable )
d <- merge(A, B, all=FALSE)
d <- ddply( d, c("A", "B"), summarize, n=length(Clip) )
dcast( d, A ~ B )
于 2012-02-19T23:15:15.470 に答える