Ошибка R: индекс вне границ с помощью by(), вложенный с помощью kappam.fleiss()
У меня есть дата-фрейм, в котором я хочу вычислить соглашение между участниками (Fleiss Kappa) для нескольких оценщиков на нескольких уровнях моего фактора, "формы". Когда я запускаю свой код, я получаю следующую ошибку:
**Error in factor(ratings[i, ], levels = lev) : subscript out of bounds**
Вот пример того, как это выглядит:
form <- c("B01","B01","B01","B02","B02","B02","B03","B03","B03")
word<-c("arch","avenue","concrete","devotion","equations","moth","piling","relate","cover")
B01200<-c(1,2,3,NA,NA,NA,NA,NA,NA)
B01209<-c(3,2,1,NA,NA,NA,NA,NA,NA)
B01214<-c(1,3,2,NA,NA,NA,NA,NA,NA)
B01228<-c(NA,NA,NA,NA,NA,NA, 2,2,1)
B01235<-c(NA,NA,NA,NA,NA,NA ,1,2,3)
B01242<-c(NA,NA,NA,NA,NA,NA, 3,3,1)
B02215<-c(NA,NA,NA ,2,1,1,NA,NA,NA)
B02217<-c(NA,NA,NA,2,1,1,NA,NA,NA)
B02222<-c(NA,NA,NA, 3,1,3,NA,NA,NA)
x <- data.frame(form,word,B01200,B01209,B01214,B01228,B01235,B01242,B02215,B02217,B02222)
x$form <-factor(x$form)
by(x,x[,"form"], function(x) kappam.fleiss(x[,-c(1:2)], detail=TRUE))
Когда я смотрю на базовую структуру с помощью str(x), я не вижу, в чем проблема с моей переменной "form".
Вот что это показывает:
'data.frame': 9 obs. of 11 variables:
$ form : Factor w/ 3 levels "B01","B02","B03": 1 1 1 2 2 2 3 3 3
$ word : Factor w/ 9 levels "architects","avenue",..: 1 2 3 5 6 7 8 9 4
$ B01200: num 1 2 3 NA NA NA NA NA NA
$ B01209: num 3 2 1 NA NA NA NA NA NA
$ B01214: num 1 3 2 NA NA NA NA NA NA
$ B01228: num NA NA NA NA NA NA 2 2 1
$ B01235: num NA NA NA NA NA NA 1 2 3
$ B01242: num NA NA NA NA NA NA 3 3 1
$ B02215: num NA NA NA 2 1 1 NA NA NA
$ B02217: num NA NA NA 2 1 1 NA NA NA
$ B02222: num NA NA NA 3 1 3 NA NA NA
Что я делаю неправильно?
Спасибо!
1 ответ
"Пропущенные данные пропускаются в виде списка" в пакете irr, также kappam.fleiss()
функция, чтобы правильно рассчитать значения каппа. По сути, это означает, что по крайней мере один из ваших случаев должен быть оценен всеми читателями для выполнения функции без ошибок (т.е. NA
). В ваших данных ни одна из строк не подходит для этого (т.е. в каждом случае есть хотя бы один NA
).
Чтобы прояснить это на примере:
- Работает:
kappam.fleiss(data.frame(c(1,3,4), c(1,3,3)))
- Еще работает:
kappam.fleiss(data.frame(c(1,3,4), c(1,3,NA)))
- Все еще работает (но только дает вам NaN):
kappam.fleiss(data.frame(c(1,NA,4), c(1,3,NA)))
- Выдает ошибку (как в вашем случае):
kappam.fleiss(data.frame(c(1,NA,4), c(NA,3,NA)))
В зависимости от того, что вы хотите сделать, вы можете реструктурировать свои данные или разделить их и протестировать подмножества отдельно?