Esempio n. 1
0
 public static bool TryGet <TRegression>(IList <double> listIndependent, IList <double> listDependent,
                                         int minPoints, out IIrtRegression regression, IList <Tuple <double, double> > removedValues = null)
     where TRegression : IIrtRegression, new()
 {
     return(TryGet(new TRegression(), listIndependent, listDependent,
                   minPoints, out regression, removedValues));
 }
Esempio n. 2
0
        public static double R(IIrtRegression regression)
        {
            if (regression?.XValues == null || regression.YValues == null || regression.XValues.Length == 0 || regression.YValues.Length == 0)
            {
                return(double.NaN);
            }
            var yMean                   = new Statistics(regression.YValues).Mean();
            var totalSumOfSquares       = regression.YValues.Sum(y => (y - yMean) * (y - yMean));
            var sumOfSquaresOfResiduals = regression.XValues.Select((x, i) => Math.Pow(regression.YValues[i] - regression.GetY(x), 2)).Sum();

            return(Math.Sqrt(1 - sumOfSquaresOfResiduals / totalSumOfSquares));
        }
Esempio n. 3
0
        private double GetR(IIrtRegression regression, bool includeOutliers)
        {
            var r = IrtRegression.R(regression);

            if (!double.IsNaN(r))
            {
                return(r);
            }
            var pointSet = !includeOutliers?RegularPoints.ToArray() : RegularPoints.Concat(OutlierPoints).ToArray();

            var statsX = new Statistics(pointSet.Select(point => point.X));
            var statsY = new Statistics(pointSet.Select(point => point.Y));

            return(statsY.R(statsX));
        }
Esempio n. 4
0
        public static bool TryGet(IIrtRegression existing, IList <double> listIndependent, IList <double> listDependent,
                                  int minPoints, out IIrtRegression regression, IList <Tuple <double, double> > removedValues = null)
        {
            regression = null;
            removedValues?.Clear();
            if (listIndependent.Count != listDependent.Count || listIndependent.Count < minPoints)
            {
                return(false);
            }

            var listX = new List <double>(listIndependent);
            var listY = new List <double>(listDependent);

            while (true)
            {
                regression = existing.ChangePoints(listX.ToArray(), listY.ToArray());
                if (Accept(regression, minPoints) || listX.Count <= minPoints)
                {
                    break;
                }

                var furthest    = 0;
                var maxDistance = 0.0;
                for (var i = 0; i < listY.Count; i++)
                {
                    var distance = Math.Abs(regression.GetY(listX[i]) - listY[i]);
                    if (distance > maxDistance)
                    {
                        furthest    = i;
                        maxDistance = distance;
                    }
                }

                removedValues?.Add(new Tuple <double, double>(listX[furthest], listY[furthest]));
                listX.RemoveAt(furthest);
                listY.RemoveAt(furthest);
            }

            return(Accept(regression, minPoints));
        }
Esempio n. 5
0
        public static void GetCurve(IIrtRegression regression, RetentionTimeStatistics statistics, out double[] hydroScores, out double[] predictions)
        {
            var minHydro = double.MaxValue;
            var maxHydro = double.MinValue;

            foreach (var hydroScore in statistics.ListHydroScores)
            {
                minHydro = Math.Min(minHydro, hydroScore);
                maxHydro = Math.Max(maxHydro, hydroScore);
            }
            var sortedX = regression.XValues.OrderBy(x => x).ToList();

            if (minHydro < sortedX[0])
            {
                sortedX.Insert(0, minHydro);
            }
            if (maxHydro > sortedX[sortedX.Count - 1])
            {
                sortedX.Add(maxHydro);
            }
            hydroScores = sortedX.ToArray();
            predictions = sortedX.Select(regression.GetY).ToArray();
        }
Esempio n. 6
0
 public static bool Accept(IIrtRegression regression, int minPoints)
 {
     return(regression.XValues != null && regression.XValues.Length >= minPoints && R(regression) >= RCalcIrt.MIN_IRT_TO_TIME_CORRELATION);
 }