close Warning: Can't synchronize with repository "(default)" (/var/svn/tolp does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #1350: aucroc.tol

File aucroc.tol, 3.2 KB (added by Pedro Gea, 13 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2Real AUCRoc(Set tasasROC, Set methodInterp)
3//////////////////////////////////////////////////////////////////////////////
4{
5  Set aux = Extract(tasasROC,1,2);
6  Set claTFP = Classify(aux, Real(Set reg1, Set reg2)
7  {
8    Real tfp1 = reg1[1];
9    Real tfp2 = reg2[1];
10    Compare(tfp1, tfp2)
11  });
12  Set graph =   EvalSet(claTFP, Set(Set class)
13  {
14    Real maxTvp = SetMax(Traspose(class)[2]);
15    Select(class, Real(Set reg){EQ(reg[2], maxTvp)})[1]
16  });
17  Set tasasROCUnique = Extract(graph,1,2);
18  If(Card(tasasROCUnique)>2,
19  {
20    Set txFP     = Traspose(tasasROCUnique)[1];
21    Set txVP     = Traspose(tasasROCUnique)[2];
22    Set setFunSet = SetOfSet(Traspose(SetOfSet(txFP, txVP)) );
23    Real get.tvp(Real tfp)
24    {
25      Set tfpSet = SetOfReal(tfp);
26      Real tvp = Interp(tfpSet, setFunSet, methodInterp)[1][2];
27      tvp
28    };
29    IntegrateQAG(get.tvp, 0, 1)
30  },
31  {
32    WriteLn("Intervalos insuficientes para calcular AUC","W");
33    0
34  })
35};
36//////////////////////////////////////////////////////////////////////////////
37PutDescription(
38"Calcula los valores area ROC (AUC) dado las tasas de aciertos de un modelo
39(TFP, TVP,TVN,TFN)",
40 AUCRoc);
41//////////////////////////////////////////////////////////////////////////////
42
43
44//////////////////////////////////////////////////////////////////////////////
45Real GiniRoc(Set tasasROC, Set methodInterp)
46//////////////////////////////////////////////////////////////////////////////
47{  2*AUCRoc(tasasROC, methodInterp) - 1  };
48//////////////////////////////////////////////////////////////////////////////
49PutDescription(
50"Calcula el indice de GINI dado las tasas de aciertos ROC de un modelo
51(TFP, TVP,TVN,TFN)",
52 GiniRoc);
53//////////////////////////////////////////////////////////////////////////////
54
55
56//////////////////////////////////////////////////////////////////////////////
57Real KSRoc(Set tasasROC, Set methodInterp)
58//////////////////////////////////////////////////////////////////////////////
59{
60  Set aux = Extract(tasasROC,1,2);
61  Set claTFP = Classify(aux, Real(Set reg1, Set reg2)
62  {
63    Real tfp1 = reg1[1];
64    Real tfp2 = reg2[1];
65    Compare(tfp1, tfp2)
66  });
67  Set graph =   EvalSet(claTFP, Set(Set class)
68  {
69    Real maxTvp = SetMax(Traspose(class)[2]);
70    Select(class, Real(Set reg){EQ(reg[2], maxTvp)})[1]
71  });
72  Set tasasROCUnique = Extract(graph,1,2);
73
74  Set txFP     = Traspose(tasasROCUnique)[1];
75  Set txVP     = Traspose(tasasROCUnique)[2];
76  Set setFunSet = SetOfSet(Traspose(SetOfSet(txFP, txVP)) );
77  Real get.tvp(Real tfp)
78  {
79    Set tfpSet = SetOfReal(tfp);
80    Real tvp = Interp(tfpSet, setFunSet, methodInterp)[1][2];
81    tvp
82  };
83  Set curvasROC = EvalSet(Range(0,1,0.0001), Set (Real k){
84    [[k,    get.tvp(k)]]
85  });
86  Matrix yTvp = SetMat(Extract(curvasROC,2));
87  Matrix yTfp = SetMat(Extract(curvasROC,1));
88  Real IndKs = MatMax(yTvp-yTfp)
89};
90//////////////////////////////////////////////////////////////////////////////
91PutDescription(
92"Calcula el indice Kolmogorov Smirnov ROC dado las tasas de aciertos de
93un modelo (TFP, TVP,TVN,TFN)",
94KSRoc);
95//////////////////////////////////////////////////////////////////////////////