public void CanCreateStudentT(double location, double scale, double dof) { var n = new StudentT(location, scale, dof); Assert.AreEqual(location, n.Location); Assert.AreEqual(scale, n.Scale); Assert.AreEqual(dof, n.DegreesOfFreedom); }
public void CanCreateStandardStudentT() { var n = new StudentT(); Assert.AreEqual(0.0, n.Location); Assert.AreEqual(1.0, n.Scale); Assert.AreEqual(1.0, n.DegreesOfFreedom); }
public void ValidateMode(double location, double scale, double dof) { var n = new StudentT(location, scale, dof); Assert.AreEqual(location, n.Mode); }
public void ValidateMinimum() { var n = new StudentT(); Assert.AreEqual(Double.NegativeInfinity, n.Minimum); }
public static CorrelData ComputeCorrelation(IEnumerable<double> d1, IEnumerable<double> d2) { CorrelData oRet = null; if ((d1 == null) || (d2 == null)) { return null; } double[] dd1 = d1.ToArray(); double[] dd2 = d2.ToArray(); int n = (dd1.Length < dd2.Length) ? dd1.Length : dd2.Length; if (n < 3) { return null; } oRet = new CorrelData(); oRet.Count = n; double corr = myconvert10000(Correlation.Pearson(dd1.Take(n), dd2.Take(n))); if (corr < -1.0) { corr = -1.0; } if (corr > 1.0) { corr = 1.0; } oRet.Value = corr; double xn = (double)n; double rr = (corr < 0.0) ? -corr : corr; double crit = rr * Math.Sqrt(xn - 2.0) / Math.Sqrt(1.0 - rr * rr); StudentT st = new StudentT(0.0, 1.0, xn - 2); double pb = st.CumulativeDistribution(crit); oRet.Probability = myconvert10000(1.0 - pb); double s1 = 0.5 * Math.Log((1.0 + corr) / (1.0 - corr)); double s2 = 1.96 / Math.Sqrt(xn - 3.0); double s3 = corr / Math.Sqrt(xn - 1.0); double z1 = s1 - s2 - s3; double z2 = s1 + s2 - s3; oRet.Minimum = myconvert10000(Math.Tanh(z1)); oRet.Maximum = myconvert10000(Math.Tanh(z2)); return oRet; }
/// <summary> /// Density function for a Student's T distribution for a specified number /// of degrees of freedom. /// </summary> public static double DT(double value, double df, double location = 0, double scale = 1) { var tdist = new StudentT(location, scale, df); return tdist.Density(value); }
public void CanSampleSequence() { var n = new StudentT(); var ied = n.Samples(); ied.Take(5).ToArray(); }
public void ValidateVariance(double location, double scale, double dof, double var) { var n = new StudentT(location, scale, dof); Assert.AreEqual(var, n.Variance); }
public void SetDofFailsWithNonPositiveDoF(double dof) { var n = new StudentT(); Assert.Throws<ArgumentOutOfRangeException>(() => n.DegreesOfFreedom = dof); }
public void ValidateInverseCumulativeDistribution(double location, double scale, double dof, double x, double p) { var dist = new StudentT(location, scale, dof); Assert.That(dist.InverseCumulativeDistribution(p), Is.EqualTo(x).Within(1e-6)); Assert.That(StudentT.InvCDF(location, scale, dof, p), Is.EqualTo(x).Within(1e-6)); }
public void ValidateCumulativeDistribution(double location, double scale, double dof, double x, double p) { var dist = new StudentT(location, scale, dof); Assert.That(dist.CumulativeDistribution(x), Is.EqualTo(p).Within(1e-13)); Assert.That(StudentT.CDF(location, scale, dof, x), Is.EqualTo(p).Within(1e-13)); }
public IList<LinearFitResult> Fit(double[] observations) { if (observations.Length != DesignMatrix.RowCount) { throw new ArgumentException("Wrong number of rows"); // Not L10N } var coefficients = QrFactorization.Solve(observations); var fittedValues = new double[observations.Length]; var residuals = new double[observations.Length]; for (int iRow = 0; iRow < observations.Length; iRow++) { var designRow = Enumerable.Range(0, DesignMatrix.ColumnCount).Select(index => DesignMatrix[iRow, index]).ToArray(); fittedValues[iRow] = DotProduct(designRow, coefficients); residuals[iRow] = observations[iRow] - fittedValues[iRow]; } double rss = DotProduct(residuals, residuals); int degreesOfFreedom = observations.Length - QrFactorization.NumberIndependentColumns; double resVar = rss / degreesOfFreedom; double sigma = Math.Sqrt(resVar); var covarianceUnscaled = MatrixCrossproductInverse; var scaledCovariance = covarianceUnscaled.Multiply(sigma * sigma); var indepColIndexes = QrFactorization.IndependentColumnIndexes.ToArray(); var result = new List<LinearFitResult>(); foreach (var contrastRow in ContrastValues.EnumerateRows()) { double standardError = 0; for (int iRow = 0; iRow < indepColIndexes.Length; iRow++) { for (int iCol = 0; iCol < indepColIndexes.Length; iCol++) { standardError += contrastRow[indepColIndexes[iRow]] * scaledCovariance[iRow, iCol] * contrastRow[indepColIndexes[iCol]]; } } standardError = Math.Sqrt(standardError); double foldChange = DotProduct(coefficients, contrastRow); double tValue = foldChange / standardError; double pValue; if (0 != degreesOfFreedom) { var studentT = new StudentT(0, 1.0, degreesOfFreedom); pValue = (1 - studentT.CumulativeDistribution(Math.Abs(tValue))) * 2; } else { pValue = 1; } result.Add(new LinearFitResult(foldChange) .SetDegreesOfFreedom(degreesOfFreedom) .SetTValue(tValue) .SetStandardError(standardError) .SetPValue(pValue)); } return result; }
public void SetScaleFailsWithNonPositiveScale(double scale) { var n = new StudentT(); Assert.That(() => n.Scale = scale, Throws.ArgumentException); }
public void SetDofFailsWithNonPositiveDoF(double dof) { var n = new StudentT(); Assert.That(() => n.DegreesOfFreedom = dof, Throws.ArgumentException); }
public void ValidateStdDev(double location, double scale, double dof, double sdev) { var n = new StudentT(location, scale, dof); Assert.AreEqual(sdev, n.StdDev); }
public void ValidateToString() { var n = new StudentT(1.0, 2.0, 1.0); Assert.AreEqual("StudentT(μ = 1, σ = 2, ν = 1)", n.ToString()); }
public void SetScaleFailsWithNonPositiveScale(double scale) { var n = new StudentT(); Assert.Throws<ArgumentOutOfRangeException>(() => n.Scale = scale); }
public void ValidateCumulativeDistribution(double location, double scale, double dof, double x, double c) { var n = new StudentT(location, scale, dof); AssertHelpers.AlmostEqualRelative(c, n.CumulativeDistribution(x), 13); }
public void ValidateDensityLn(double location, double scale, double dof, double x, double p) { var n = new StudentT(location, scale, dof); AssertHelpers.AlmostEqualRelative(p, n.DensityLn(x), 13); }
public void CanSample() { var n = new StudentT(); n.Sample(); }
public void ValidateMaximum() { var n = new StudentT(); Assert.AreEqual(Double.PositiveInfinity, n.Maximum); }
/// <summary> /// Run example /// </summary> /// <a href="http://en.wikipedia.org/wiki/StudentT_distribution">StudentT distribution</a> public void Run() { // 1. Initialize the new instance of the StudentT distribution class with parameters Location = 0, Scale = 1, DegreesOfFreedom = 1 var studentT = new StudentT(); Console.WriteLine(@"1. Initialize the new instance of the StudentT distribution class with parameters Location = {0}, Scale = {1}, DegreesOfFreedom = {2}", studentT.Location, studentT.Scale, studentT.DegreesOfFreedom); Console.WriteLine(); // 2. Distributuion properties: Console.WriteLine(@"2. {0} distributuion properties:", studentT); // Cumulative distribution function Console.WriteLine(@"{0} - Сumulative distribution at location '0.3'", studentT.CumulativeDistribution(0.3).ToString(" #0.00000;-#0.00000")); // Probability density Console.WriteLine(@"{0} - Probability density at location '0.3'", studentT.Density(0.3).ToString(" #0.00000;-#0.00000")); // Log probability density Console.WriteLine(@"{0} - Log probability density at location '0.3'", studentT.DensityLn(0.3).ToString(" #0.00000;-#0.00000")); // Entropy Console.WriteLine(@"{0} - Entropy", studentT.Entropy.ToString(" #0.00000;-#0.00000")); // Largest element in the domain Console.WriteLine(@"{0} - Largest element in the domain", studentT.Maximum.ToString(" #0.00000;-#0.00000")); // Smallest element in the domain Console.WriteLine(@"{0} - Smallest element in the domain", studentT.Minimum.ToString(" #0.00000;-#0.00000")); // Mean Console.WriteLine(@"{0} - Mean", studentT.Mean.ToString(" #0.00000;-#0.00000")); // Median Console.WriteLine(@"{0} - Median", studentT.Median.ToString(" #0.00000;-#0.00000")); // Mode Console.WriteLine(@"{0} - Mode", studentT.Mode.ToString(" #0.00000;-#0.00000")); // Variance Console.WriteLine(@"{0} - Variance", studentT.Variance.ToString(" #0.00000;-#0.00000")); // Standard deviation Console.WriteLine(@"{0} - Standard deviation", studentT.StdDev.ToString(" #0.00000;-#0.00000")); // 3. Generate 10 samples of the StudentT distribution Console.WriteLine(@"3. Generate 10 samples of the StudentT distribution"); for (var i = 0; i < 10; i++) { Console.Write(studentT.Sample().ToString("N05") + @" "); } Console.WriteLine(); Console.WriteLine(); // 4. Generate 100000 samples of the StudentT(0, 1, 1) distribution and display histogram Console.WriteLine(@"4. Generate 100000 samples of the StudentT(0, 1, 1) distribution and display histogram"); var data = new double[100000]; for (var i = 0; i < data.Length; i++) { data[i] = studentT.Sample(); } ConsoleHelper.DisplayHistogram(data); // 5. Generate 100000 samples of the StudentT(0, 1, 5) distribution and display histogram Console.WriteLine(@"5. Generate 100000 samples of the StudentT(0, 1, 5) distribution and display histogram"); studentT.DegreesOfFreedom = 5; for (var i = 0; i < data.Length; i++) { data[i] = studentT.Sample(); } ConsoleHelper.DisplayHistogram(data); Console.WriteLine(); // 6. Generate 100000 samples of the StudentT(0, 1, 10) distribution and display histogram Console.WriteLine(@"6. Generate 100000 samples of the StudentT(0, 1, 10) distribution and display histogram"); studentT.DegreesOfFreedom = 10; for (var i = 0; i < data.Length; i++) { data[i] = studentT.Sample(); } ConsoleHelper.DisplayHistogram(data); }
public void ValidateMean(double location, double scale, double dof, double mean) { var n = new StudentT(location, scale, dof); Assert.AreEqual(mean, n.Mean); }
/// <summary> /// Distribution function for Student's T distribution for a specified z-score /// and a number of degrees of freedom. /// </summary> public static double PT(double z, double df) { var tdist = new StudentT(0, 1, df); return tdist.CumulativeDistribution(z); }
public static double TDIST(double x, int degrees_freedom, int tails) { var dist = new StudentT(0.0, 1.0, degrees_freedom); switch (tails) { case 1: return 1d - dist.CumulativeDistribution(x); case 2: return 1d - dist.CumulativeDistribution(x) + dist.CumulativeDistribution(-x); default: throw new ArgumentOutOfRangeException("tails"); } }