Example #1
0
        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));
        }
Example #2
0
        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)));
        }
Example #3
0
        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));
        }
Example #4
0
        //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));
        }
Example #5
0
        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));;
        }