/// <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 void Fit(double[] observations, double[] weights, VonMisesOptions 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 if (options.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); }
public void KappaTest1() { double expected = 3.721646; double actual = Circular.Concentration(angles); Assert.AreEqual(expected, actual, 1e-6); }