#r #logistic-regression #concordance-index
#r #логистическая регрессия #индекс соответствия
Вопрос:
У меня есть следующий фрейм данных (my_df) в R:
race trauma y1 y2 y3
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 1 0
0 0 0 0 1
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 1 0 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 1 0
0 1 0 0 1
0 2 1 0 0
0 2 1 0 0
0 2 1 0 0
0 2 1 0 0
0 2 1 0 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 1 0
0 2 0 0 1
0 3 1 0 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 1 0
0 3 0 0 1
0 4 1 0 0
0 4 0 1 0
0 4 0 1 0
0 4 0 1 0
0 4 0 1 0
0 5 0 0 1
0 5 0 0 1
1 0 0 1 0
1 0 0 0 1
1 1 0 1 0
1 1 0 1 0
1 1 0 1 0
1 1 0 0 1
1 2 0 1 0
1 2 0 1 0
1 2 0 1 0
1 2 0 0 1
1 3 0 1 0
1 3 0 1 0
1 3 0 0 1
Выходной dput(my_df) дает
structure(list(race = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L), trauma = c(0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 0L, 0L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), happy = c(1L, 1L,
1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L,
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 1L, 2L, 2L, 2L, 2L,
3L, 3L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 3L, 2L, 2L, 3L)), class = "data.frame", row.names = c(NA,
-97L))
Я использую пакет vgam для подгонки кумулятивной логистической модели и вычисления индекса соответствия с помощью пакета pROC:
> fit = vglm(cbind(y1,y2,y3) ~ race trauma, family=cumulative(parallel=TRUE), data=my_df)
> multiclass.roc(as.numeric(cbind(my_df$y1, my_df$y2, my_df$y3)), as.numeric(predict(fit, type="response")), plot=FALSE, legacy.axes=TRUE)
Площадь под кривой ROC, то есть индекс соответствия, составляет 0,8271. Основываясь на источнике, который я пытаюсь воспроизвести (Категориальный анализ данных, Agresti, 3-е издание, стр. 314), результат должен быть 0,688. Результаты подгонки согласуются с результатами, представленными в книге. Я предполагаю, что с моим индексом соответствия что-то не так. Я не могу понять, что.
Заранее спасибо за вашу помощь.
Комментарии:
1. поделитесь выводом
dput(my_df)
в описании вашего вопроса. Используя это, другим будет легче создать вашdata.frame
в конце.2. Я сделал это. Я думал, что его можно восстановить с помощью read.table(textConnection(…)) из буфера обмена. Спасибо за предложение.