/// <summary> /// Fits the underlying distribution to a given set of observations. /// </summary> /// <param name="observations">The array of observations to fit the model against. The array /// elements can be either of type double (for univariate data) or /// type double[] (for multivariate data).</param> /// <param name="weights">The weight vector containing the weight for each of the samples.</param> /// <param name="options">Optional arguments which may be used during fitting, such /// as regularization constants and additional parameters.</param> /// <remarks> /// Although both double[] and double[][] arrays are supported, /// providing a double[] for a multivariate distribution or a /// double[][] for a univariate distribution may have a negative /// impact in performance. /// </remarks> public override void Fit(double[] observations, double[] weights, IFittingOptions options) { double m, k; if (weights != null) { m = Circular.WeightedMean(observations, weights); k = Circular.WeightedConcentration(observations, weights, m); } else { m = Circular.Mean(observations); k = Circular.Concentration(observations, m); } if (options != null) { // Parse optional estimation options VonMisesOptions o = (VonMisesOptions)options; if (o.UseBiasCorrection) { double N = observations.Length; if (k < 2) { k = System.Math.Max(k - 1.0 / (2.0 * (N * k)), 0); } else { double Nm1 = N - 1; k = (Nm1 * Nm1 * Nm1 * k) / (N * N * N + N); } } } initialize(m, k); }
/// <summary> /// Estimates a new von-Mises distribution from a given set of angles. /// </summary> /// public static VonMisesDistribution Estimate(double[] angles, double[] weights, VonMisesOptions options) { VonMisesDistribution vonMises = new VonMisesDistribution(); vonMises.Fit(angles, weights, options); return(vonMises); }
/// <summary> /// Estimates a new von-Mises distribution from a given set of angles. /// </summary> /// public static VonMisesDistribution Estimate(double[] angles, VonMisesOptions options) { return(Estimate(angles, null, options)); }