我正在使用SVM和两组之间的10个功能执行二进制分类:45个健康组与15个不健康组,得出的auc为0.80。有没有一种方法可以进行功效分析,以估计我们需要从每组中选出多少科目才能将整体AUC提高5%?换句话说,有没有一种方法可以得出AUC相对于No.的增加百分比曲线。样本?
我在matlab中查看了sampsizepwr函数,但我认为这不会满足我的需要:
nout = sampsizepwr(testtype,p0,p1)
有人可以在这里引导我吗?我也可以尝试使用R或python。
答案 0 :(得分:0)
原则上,AUC不应更改N大小。但是,使用更大的N,您将更确定您的主题样本的AUC与总体人口相似。在这里,我模拟了15名患病者和45名健康者的“受试者”的随机抽样,然后计算AUC。我这样做了30次,得到的AUC在0.69至0.93之间。我将样本数量乘以100,AUC范围是0.8到0.82。
n = [45,15];
rng(3)
for mult = 1:100
for iter = 1:30
healthy = normrnd(0,1,n(1)*mult,1);
abnormal = normrnd(1.25,1,n(2)*mult,1);
score = [healthy;abnormal];
label = [zeros(n(1)*mult,1);ones(n(2)*mult,1)];
[~,~,~,AUC(mult,iter)] = perfcurve(label,score,1);
end
end
M = mean(AUC,2);
SD = std(AUC,[],2);
figure;
errorbar(M',SD')
xlabel('How many times to multiply N subjects')
ylabel('Mean AUC for 30 iterations (bars = SD)')
title('AUC by N subjects')
ylim([0.5 1])
box off
grid on