public double[] Correct(double[] observed) { if (observed == null || observed.Length != plexTable.Length) { throw new ArgumentException(string.Format("Argument observed should be a length {0} array, current is {1}", plexTable.Length, observed.Length)); } var x = new double[observed.Length]; double rnorm = 0.0; NonNegativeLeastSquaresCalc.NNLS(CloneTable(), observed.Length, plexTable[0].Length, observed, x, out rnorm, null, null, null); return(x); }
private SpeciesAbundanceInfo CalculateSpeciesAbundance(int maxLength, double[][] profileMatrix, PeakList <Peak> envelope, out double[] x) { double[] b = GetObservedIntensities(maxLength, envelope); x = new double[3]; double rnorm; NonNegativeLeastSquaresCalc.NNLS(profileMatrix, maxLength, 3, b, x, out rnorm, null, null, null); var result = new SpeciesAbundanceInfo(); result.O16 = x[0]; result.O181 = x[1]; result.O182 = x[2]; return(result); }
public static LinearRegressionRatioResult CalculateRatio(double[][] intensities) { double maxA = intensities[0].Max(); double maxB = intensities[1].Max(); if (maxA == 0.0) { return(new LinearRegressionRatioResult(20, 0.0)); } if (maxB == 0.0) { return(new LinearRegressionRatioResult(0.05, 0.0)); } if (intensities[0].Length == 1) // only one point { return(new LinearRegressionRatioResult(intensities[1][0] / intensities[0][0], 0.0)); } var aList = new List <double>(intensities[0]); aList.Add(0); var a = new double[1][]; a[0] = aList.ToArray(); var bList = new List <double>(intensities[1]); bList.Add(0); double[] b = bList.ToArray(); var x = new double[1]; double rnorm = 0.0; NonNegativeLeastSquaresCalc.NNLS(a, b.Length, 1, b, x, out rnorm, null, null, null); var bPredicted = new double[aList.Count]; for (int i = 0; i < aList.Count; i++) { bPredicted[i] = x[0] * aList[i]; } var result = new LinearRegressionRatioResult(); result.Ratio = x[0]; result.RSquare = StatisticsUtils.RSquare(bList.ToArray(), bPredicted); result.PointCount = bList.Count; result.TValue = StatisticsUtils.FCalculatedValueForLinearRegression(bList.ToArray(), bPredicted); if (double.IsInfinity(result.TValue) || double.IsNaN(result.TValue) || result.TValue < 0) { result.TValue = 0; } result.PValue = StatisticsUtils.FProbabilityForLinearRegression(bList.Count, result.TValue); return(result); }
public static LinearRegressionRatioResult CalculateRatioDistance(double[][] intensities) { int len = intensities[0].Length; double maxA = intensities[0].Max(); double maxB = intensities[1].Max(); if (maxA == 0.0) { return(new LinearRegressionRatioResult(20, 0.0)); } if (maxB == 0.0) { return(new LinearRegressionRatioResult(0.05, 0.0)); } if (len == 1) // only one point { return(new LinearRegressionRatioResult(intensities[1][0] / intensities[0][0], 0.0)); } var a = new double[2][]; a[0] = new double[len]; a[1] = new double[len]; for (int i = 0; i < len; i++) { a[0][i] = intensities[0][i]; a[1][i] = 1; } double[] b = new List <double>(intensities[1]).ToArray(); var x = new double[2]; double rnorm = 0.0; NonNegativeLeastSquaresCalc.NNLS(a, b.Length, 2, b, x, out rnorm, null, null, null); var bPredicted = new double[len]; for (int i = 0; i < len; i++) { bPredicted[i] = x[0] * intensities[0][i] + x[1]; } var result = new LinearRegressionRatioResult(); result.Ratio = x[0]; result.Distance = x[1]; result.RSquare = StatisticsUtils.RSquare(intensities[1], bPredicted); result.PointCount = b.Length; result.TValue = StatisticsUtils.FCalculatedValueForLinearRegression(intensities[1], bPredicted); if (double.IsInfinity(result.TValue) || double.IsNaN(result.TValue) || result.TValue < 0) { result.TValue = 0; } result.PValue = StatisticsUtils.FProbabilityForLinearRegression(len, result.TValue); return(result); }