【问题标题】:How to create a confusion matrix containing multiple judgments in R?如何在R中创建包含多个判断的混淆矩阵?
【发布时间】:2012-02-19 20:41:02
【问题描述】:

我从两位评估者那里获得了一个数据集,他们根据多个(二进制)标准判断一组视频剪辑。我想绘制一个混淆矩阵,以更好地理解他们的同意/不同意。但到目前为止,我发现的所有例子都是针对每个评委只对每个剪辑的一个标准进行评分的情况。在我的案例中,评委对每个剪辑的每个标准进行评分。

假设我有 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() 函数似乎是要走的路,但是如何格式化数据?

【问题讨论】:

    标签: r reshape crosstab confusion-matrix


    【解决方案1】:

    这可能不是最简单的解决方案。 您可以将两个评估者的数据分开, 和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 )
    

    【讨论】:

    • 谢谢!唯一的问题是,如果一个评估者没有使用特定的标准,那么混淆矩阵就会丢失一列。可以通过将 ddply 调用更改为 d 来修复
    猜你喜欢
    • 1970-01-01
    • 2021-03-25
    • 2021-03-02
    • 2017-02-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多