SAS. Как сделать две ROC-кривые (двух групп сравнения) НА ОДНОМ графике?

Набор данных SAS (9.4) (d) включает 3 переменные: Y, маркер (= 0 и 1) и группу (= 1 и 2). Как сделать две ROC-кривые НА ОДНОМ участке? Я много смотрел в Интернете, но, к сожалению, не понял объяснения. Буду очень признателен за помощь! Итак, как поместить сюда групповую переменную? (P.S. А еще получите AUC с доверительными интервалами.)

одовая графика включена;

логистические данные процесса = d графиков = графиков ЭФФЕКТА = ROC;

маркер модели (событие = '1') = Y;

запустить;

ods графика выключена;

P.S. Сейчас добавлю образец.

Y - это вес человека

группа (= 1 и 2), где 1 - мужчина, 2 - женщина

маркер (= 0 и 1), где 1 означает, что вес является избыточным, а 0 означает, что вес нормальный.

Мне нужно получить две ROC-кривые (для мужчин и женщин) на одном участке для сравнения их.


person Beginner    schedule 28.03.2016    source источник
comment
Для меня это пока не имеет смысла. Ваша зависимая переменная - Marker, где 1 означает избыточный вес, а 0 - нормальный. Ваша прогнозирующая переменная Y - это вес. Итак, вы хотите узнать, является ли вес (Y) хорошим предиктором избыточного веса (Маркер)? И посмотрите, одинаковы ли кривые ROC для мужчин и женщин?   -  person Quentin    schedule 29.03.2016
comment
У вас одинаковое количество мужчин и женщин?   -  person Quentin    schedule 29.03.2016
comment
И посмотрите, одинаковы ли кривые ROC для мужчин и женщин? ДА! У вас одинаковое количество мужчин и женщин? НЕТ!   -  person Beginner    schedule 30.03.2016
comment
Думаю, я не совсем понимаю, но я попытаюсь попытаться ответить по-другому, сегодня вечером или завтра вечером. Похоже, вы хотите наложить две кривые ROC из независимых образцов (мужчин и женщин). В этой заметке поддержки есть многообещающий подход: support.sas.com/kb/45/ 339.html   -  person Quentin    schedule 30.03.2016


Ответы (2)


У вас есть две независимые выборки (мужчины и женщины), и вы хотите сравнить кривые ROC, рассчитанные для каждой выборки. Насколько я понимаю, из http://support.sas.com/kb/45/339.html, SAS не может сравнивать кривые ROC из независимых образцов за один шаг PROC. Работу надо делать самому.

Процесс такой:

  1. Запустите PROC LOGISTIC, чтобы вычислить статистику ROC (чувствительность / специфичность в каждой точке отсечения) и AUC со стандартными ошибками для каждого образца.
  2. Постройте график статистики ROC, наложив две кривые.
  3. Вычислите статистику теста и p-значение из AUC.

Ниже моя попытка привести пример. Я не обещаю, что это правильно, но это моя реализация моего понимания информации в примечании поддержки. Пожалуйста, прочтите примечание службы поддержки.

Образец данных. Я все еще не понимаю ваших данных, поэтому я сделал некоторые из них, которые я понимаю. Данные для 5 женщин и 6 мужчин. У каждого человека есть балл по диагностическому тесту и статус болезни (1/0).

data have;
  input Sex $1. Test Disease;
  cards;
F 10 0
F 20 0
F 30 1
F 40 0
F 50 1
M 10 0 
M 20 1
M 30 0
M 40 1
M 50 1
M 60 1
;
run;

Запустите PROC logistic и выведите статистику. Я использовал оператор BY вместо того, чтобы запускать отдельные шаги PROC для мужчин и женщин.

ods output ROCassociation=AUCs(where=(ROCmodel="Test"));
proc logistic data=have plots(only)=roc;
  model Disease(event='1') = Test
    /outroc=RocStats(where=(_source_="Test"))
  ;
  roc 'Test' Test;
  by Sex;
run;
ods output close;

Используйте SGPLOT для построения наложенных кривых ROC. Я использую 9.3, поэтому нужно использовать оператор графики ODS для создания квадратного графика. В 9.4 в SGPLOT появилась опция aspect = 1. Это прямолинейный сюжет, напоминающий мне, как я люблю SGPLOT и GTL. Не думаю, что когда-нибудь вернусь к GPLOT.

ods graphics / height=480px width=480px;
proc sgplot data=RocStats;
  xaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05; 
  yaxis values=(0 to 1 by 0.25) grid offsetmin=.05 offsetmax=.05;
  lineparm x=0 y=0 slope=1 / transparency=.7;
  series x=_1mspec_ y=_sensit_ / group=Sex;
run;

Вычислите тестовую статистику. В записке поддержки говорится, что это тест на большой выборке. Статистика теста соответствует распределению хи-квадрат с 1 степенью свободы.

data AUCtest(keep=AreaMale StdErrMale AreaFemale StdErrFemale ChiSq Prob);
  set AUCs (keep=Sex Area StdErr
            where=(Sex='M')
            rename=(Area=AreaMale StdErr=StdErrMale)
            )
  ;
  set AUCs (keep=Sex Area StdErr 
            where=(Sex='F')
            rename=(Area=AreaFemale StdErr=StdErrFemale)
            )
  ;
  ChiSq=(AreaMale-AreaFemale)**2/(StdErrMale**2 + StdErrFemale**2);
  Prob=1-probChi(ChiSq,1);
  format Prob pvalue6.;
run;

Опять же, не принимайте все это как истину. Используйте на свой страх и риск, я тоже на стадии обучения.

person Quentin    schedule 30.03.2016
comment
Все отлично работает! Квентин, ты очень щедрый! Большое спасибо!!! (Я считаю, что SAS излишне усложняет решение простого вопроса о medstat.) P.S. К сожалению, моей репутации недостаточно, чтобы оценить ваш ответ. - person Beginner; 30.03.2016
comment
Рад, что помог. Даже если у вас недостаточно репутации для голосования, я думаю, вы все равно можете принять ответ, щелкнув галочку рядом с ним (что принесет нам обоим некоторую репутацию :). Согласитесь, решение SAS поместить вычисления ROC в PROC LOGISTIC, а не в отдельный выделенный PROC ROC определенно вызывает ограничения. - person Quentin; 30.03.2016