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)); }
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); }
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)); }