Как создать путаницу, содержащую несколько суждений в R? - PullRequest
4 голосов
/ 20 февраля 2012

У меня есть набор данных от двух оценщиков, оценивающих набор видеороликов по нескольким (двоичным) критериям.Я хотел бы построить матрицу путаницы, чтобы лучше понять их согласие / несогласие.Но все примеры, которые я нашел до сих пор, относятся к случаям, когда каждый судья оценивает только один критерий за клип.В моем случае судьи оценивают каждый критерий для каждого клипа.

Скажем, у меня есть 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 () - это путь, но как отформатировать данные?

1 Ответ

3 голосов
/ 20 февраля 2012

Возможно, это не самое простое решение.Вы можете разделить данные для двух оценщиков и 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 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...