我正在尝试查看 SAS 中各亚组的 ROC AUC 是否存在统计显着差异。我无法使用 roccontrast,因为我只有一种模型。这是我的代码:
proc logistic data=data plots(only)=roc;
by Race;
model htn (event='1') = bmi ;
ods output roccurve=ROCdata;
run;
种族有 4 个类别:西班牙裔、黑人、白人和其他
我尝试了 roccontrast,但没有用。我真的很感激任何对此的指导!
roccontrast
无法使用,因为它需要多个模型进行比较。但是,您仍然可以使用与问题链接的答案中描述的方法类似的方法按子组进行 ROC 曲线比较:
运行 PROC LOGISTIC
和
BY
声明:您已经完成了这部分。通过使用
BY
语句,您可以为每个子组(西班牙裔、黑人、白人和其他人)单独运行逻辑回归。 ODS 输出 roccurve=ROCdata;将捕获每个子组必要的 ROC 统计数据。要直观地比较每个子组的 ROC 曲线,请在 ROC 数据上使用
SGPLOT
程序。这将帮助您了解各个子组的 ROC 曲线有何不同。
proc sgplot data=ROCdata;
series x=1-Specificity y=Sensitivity / group=Race;
xaxis label="1-Specificity";
yaxis label="Sensitivity";
title "ROC Curves by Race";
run;
要统计比较子组之间的 AUC,您需要计算检验统计量。这涉及 AUC 的成对比较,并考虑其标准误差。您可以根据 ROCdata 输出计算 AUC 的标准误差,然后对每对子组执行 Z 检验。F9 或数据步骤,比较涉及计算每对子组之间 AUC 差异的 Z 分数。这是一个通用的方法:
data pairwise_comparison;
set ROCdata;
/* Assuming ROCdata has variables Race, AUC, and AUC_SE for each race category */
array races[4] $ hispanic black white other; /* Update with exact variable names */
array auc[4] hispanic_auc black_auc white_auc other_auc; /* AUCs */
array auc_se[4] hispanic_auc_se black_auc_se white_auc_se other_auc_se; /* Standard errors */
do i = 1 to 4;
do j = i+1 to 4;
race1 = races[i];
race2 = races[j];
auc_diff = auc[i] - auc[j];
se_diff = sqrt(auc_se[i]**2 + auc_se[j]**2);
z = auc_diff / se_diff;
p_value = (1 - probnorm(abs(z))) * 2; /* two-tailed test */
output;
end;
end;
run;
pairwise_comparison 数据集将包含每对子组的 Z 分数和 p 值。