我有两个评估者的数据集,判断多个(二进制)标准上的一组视频片段。我想绘制一个混淆矩阵,以便更好地理解他们的一致意见/不同意见。但到目前为止我发现的所有例子都是针对每个裁判仅按照一个标准评分的情况。就我而言,评委会对每个片段的每个标准进行评分。
说我有4个二进制标准(A_Con..A_Mod),由两个评估者(A和B)判断,对于一组视频片段(在这种情况下为80):
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()函数是要走的路,但是如何格式化数据呢?
答案 0 :(得分:3)
这可能不是最简单的解决方案。
您可以分离两个评估者的数据,
和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 )