У вас есть две независимые выборки (мужчины и женщины), и вы хотите сравнить кривые ROC, рассчитанные для каждой выборки. Насколько я понимаю, из http://support.sas.com/kb/45/339.html, SAS не может сравнивать кривые ROC из независимых образцов за один шаг PROC. Работу надо делать самому.
Процесс такой:
- Запустите PROC LOGISTIC, чтобы вычислить статистику ROC (чувствительность / специфичность в каждой точке отсечения) и AUC со стандартными ошибками для каждого образца.
- Постройте график статистики ROC, наложив две кривые.
- Вычислите статистику теста и 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