public override double Test(IList <IList <double> > samples) { double total_count = ToolsCollection.CountElements(samples); double pooled_mean = ToolsMathStatistics.MeanAll(samples); double nominator_part = 0.0; double denominator_part = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { double sample_mean = ToolsMathStatistics.Mean(samples[sample_index]); double sample_median = ToolsMathStatistics.Quantile(samples[sample_index], 0.5f); nominator_part += (sample_mean - pooled_mean) * (sample_mean - pooled_mean) * samples[sample_index].Count; for (int measurement_index = 0; measurement_index < samples[sample_index].Count; measurement_index++) { double diff = Math.Abs(sample_median - samples[sample_index][measurement_index]) - sample_mean; //This is the difference with brown forsythe test denominator_part += diff * diff; } } double degrees_of_freedom_0 = samples.Count - 1; double degrees_of_freedom_1 = total_count - samples.Count; double f_statistic = (degrees_of_freedom_1 * nominator_part) / (degrees_of_freedom_0 * denominator_part); FisherSnedecor distribution = new FisherSnedecor(degrees_of_freedom_0, degrees_of_freedom_1, new Random()); return(distribution.CumulativeDistribution(f_statistic)); }
public static Tuple <double, double> TestStatic(IList <IList <double> > samples) { int sample_size = samples[0].Count; foreach (IList <double> sample in samples) { if (sample.Count != sample_size) { throw new Exception("samples must be of equal size"); } } // Larsen Marx 4Th editiopn P779 double sample_count = samples.Count; double total_count = ToolsCollection.CountElements(samples); double total_mean = ToolsMathStatistics.MeanAll(samples); double sum_squared_all = ToolsMathStatistics.SumSquaredAll(samples); IList <double> sample_sums = ToolsMathCollection.Sums0(samples); IList <double> measurement_sums = ToolsMathCollection.Sums1(samples); // compute C double c = ToolsMath.Sqr(total_mean * total_count) / (sample_size * sample_count); double sstot = sum_squared_all - c; double ssb = 0; for (int measurement_index = 0; measurement_index < sample_size; measurement_index++) { ssb += ToolsMath.Sqr(measurement_sums[measurement_index]) / sample_count; } ssb -= c; double sstr = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { sstr += ToolsMath.Sqr(sample_sums[sample_index]) / sample_size; } sstr -= c; double sse = sstot - ssb - sstr; double degrees_of_freedom_0_samples = (sample_count - 1.0); double degrees_of_freedom_0_measurements = (sample_size - 1.0); double degrees_of_freedom_1 = degrees_of_freedom_0_samples * degrees_of_freedom_0_measurements; //F-Transform samples double f_statistic_samples = (sstr / degrees_of_freedom_0_samples) / (sse / degrees_of_freedom_1); //F-Transform measurements double f_statistic_measurements = (ssb / degrees_of_freedom_0_measurements) / (sse / degrees_of_freedom_1); return(new Tuple <double, double>( FisherSnedecor.CDF(degrees_of_freedom_0_samples, degrees_of_freedom_1, f_statistic_samples), FisherSnedecor.CDF(degrees_of_freedom_0_measurements, degrees_of_freedom_1, f_statistic_measurements))); }
public static double TestStatic(IList <IList <double> > samples) { double sample_count = samples.Count; double total_count = ToolsCollection.CountElements(samples); double total_mean = ToolsMathStatistics.MeanAll(samples); IList <double> sample_means = ToolsMathStatistics.Means0(samples); double sstr = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { sstr += samples[sample_index].Count * ToolsMath.Sqr(sample_means[sample_index] - total_mean); } double sse = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { for (int measurement_index = 0; measurement_index < samples[sample_index].Count; measurement_index++) { sse += ToolsMath.Sqr(samples[sample_index][measurement_index] - sample_means[sample_index]); } } //FTransform double degrees_of_freedom_0 = (sample_count - 1.0); double degrees_of_freedom_1 = (total_count - sample_count); double summed_variance = sstr / degrees_of_freedom_0; double total_varaiance = sse / degrees_of_freedom_1; double f_statistic = summed_variance / total_varaiance; return(FisherSnedecor.CDF(degrees_of_freedom_0, degrees_of_freedom_1, f_statistic)); }
//TODO implement 3 mean variants //http://www.itl.nist.gov/div898/handbook/eda/section3/eda35a.htm public static double TestStatic(IList <IList <double> > samples) { double total_count = ToolsCollection.CountElements(samples); double total_mean = ToolsMathStatistics.MeanAll(samples); //double[] sample_means = ToolsMathStatistics.Means0(samples); //double total_mean = ToolsMathStatistics.MedianAll(samples); double[] sample_means = ToolsMathStatistics.Medians0(samples); double summed_varriance = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { summed_varriance += samples[sample_index].Count * ToolsMath.Sqr(sample_means[sample_index] - total_mean); } double total_variance = 0.0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { for (int measurement_index = 0; measurement_index < samples[sample_index].Count; measurement_index++) { total_variance += ToolsMath.Sqr(samples[sample_index][measurement_index] - sample_means[sample_index]); } } double degrees_of_freedom_0 = samples.Count - 1; double degrees_of_freedom_1 = total_count - samples.Count; double f_statistic = (degrees_of_freedom_1 * summed_varriance) / (degrees_of_freedom_0 * total_variance); return(FisherSnedecor.CDF(degrees_of_freedom_0, degrees_of_freedom_1, f_statistic)); }
public static double TestStatic(IList <IList <double> > samples) { double pooled_varriance = ToolsMathStatistics.VariancePooled(samples); double total_count = ToolsCollection.CountElements(samples); double nom_part = 0; double denom_part = 0; for (int sample_index = 0; sample_index < samples.Count; sample_index++) { nom_part += (samples[sample_index].Count - 1.0) * Math.Log(ToolsMathStatistics.Variance(samples[sample_index])); denom_part += (1.0 / (samples[sample_index].Count - 1)); } double nominator = (total_count - samples.Count) * Math.Log(pooled_varriance) - nom_part; double denominator = 1 + ((1.0 / (3 * (samples.Count - 1))) * (denom_part - (1 / (total_count - samples.Count)))); double chi_square_statisic = nominator / denominator; double degrees_of_freedom = samples.Count - 1; return(ChiSquared.CDF(degrees_of_freedom, chi_square_statisic));; }