进行功率分析以预测性能提高百分比

时间:2019-08-08 13:09:12

标签: python r matlab statistics

我正在使用SVM和两组之间的10个功能执行二进制分类:45个健康组与15个不健康组,得出的auc为0.80。有没有一种方法可以进行功效分析,以估计我们需要从每组中选出多少科目才能将整体AUC提高5%?换句话说,有没有一种方法可以得出AUC相对于No.的增加百分比曲线。样本?

我在matlab中查看了sampsizepwr函数,但我认为这不会满足我的需要:

nout = sampsizepwr(testtype,p0,p1)

有人可以在这里引导我吗?我也可以尝试使用R或python。

1 个答案:

答案 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

AUC by N