public static double TestStatic(IDistribution <DomainType, double> distribution, IList <DomainType> sample) { DomainType[] domain = distribution.Domain; Dictionary <DomainType, int> domain_indexing = new Dictionary <DomainType, int>(); double [] sample_densities = new double[domain.Length]; for (int domain_index = 0; domain_index < sample.Count; domain_index++) { domain_indexing[domain[domain_index]] = domain_index; } for (int sample_index = 0; sample_index < sample.Count; sample_index++) { sample_densities[domain_indexing[sample[sample_index]]] += 1.0 / sample.Count; } double d1 = 0; for (int domain_index = 0; domain_index < sample.Count; domain_index++) { double sample_density = sample_densities[domain_index]; double expectated_density = distribution.ComputeProbabilityDensity(domain[domain_index]); double error = (sample_density - expectated_density); d1 += ((error * error) / expectated_density); } int dof = domain.Length - 1; //TODO if fitted subtract distribution dof return(1 - ChiSquared.CDF(dof, d1)); }