public static double ComputeROCAUCTrapeziod <RealType>(IList <bool> labels, IList <RealType> sample)
            where RealType : IComparable <RealType>
        {
            int    postive_count            = ToolsCollection.CountOccurance(labels, true);
            double true_positive_increment  = 1.0 / postive_count;
            double false_positive_increment = 1.0 / (labels.Count - postive_count);

            double[]   true_positive_rates  = new double[labels.Count + 1];
            double[]   false_positive_rates = new double[labels.Count + 1];
            List <int> ordering             = ToolsMathCollection.Ordering(sample);


            for (int index = 1; index < labels.Count + 1; index++)
            {
                if (labels[ordering[index - 1]])
                {
                    true_positive_rates[index]  = true_positive_rates[index - 1] + true_positive_increment;
                    false_positive_rates[index] = false_positive_rates[index - 1];
                }
                else
                {
                    true_positive_rates[index]  = true_positive_rates[index - 1];
                    false_positive_rates[index] = false_positive_rates[index - 1] + false_positive_increment;
                }
            }
            return(IntegralEvaluatorTrapezoid.EvaluateStaticValue(false_positive_rates, true_positive_rates));
        }
Example #2
0
        public static int [] select_index_of_value(int [] array, int value)
        {
            int count = ToolsCollection.CountOccurance(array, value);

            int [] indexes_with_value       = new int [count];
            int    index_indexes_with_value = 0;

            for (int index = 0; index < array.Length; index++)
            {
                if (array[index] == value)
                {
                    indexes_with_value[index_indexes_with_value] = index;
                    index_indexes_with_value++;
                }
            }
            return(indexes_with_value);
        }
Example #3
0
        public static double TestStatic(IList <bool> labels, IList <double> sample_0)
        {
            if (sample_0.Count != labels.Count)
            {
                throw new Exception("Labels not of equal size");
            }
            //U = AUC∗nP∗nN
            int    positive_count = ToolsCollection.CountOccurance(labels, true);
            int    negative_count = sample_0.Count - positive_count;
            double auc            = ToolsMathStatistics.ComputeROCAUCTrapeziod(labels, sample_0);
            double u_statistic    = positive_count * negative_count * auc;

            //Z transform
            double expected_value = (positive_count * negative_count) / 2.0;
            double variance       = (positive_count * negative_count * (positive_count + negative_count + 1)) / 12.0;
            double z_value        = (u_statistic - expected_value) / Math.Sqrt(variance);

            return(1 - Normal.CDF(0.0, 1.0, z_value));
        }