private RegressionWithOutliers(IList<double> originalTimes, IList<double> targetTimes, ISet<int> outlierIndexes) { if (originalTimes.Count != targetTimes.Count) { throw new ArgumentException("Value lists must have same length"); } OriginalTimes = originalTimes; TargetTimes = targetTimes; OutlierIndexes = outlierIndexes; var statsTarget = new Statistics(TargetTimes.Where((value, index) => !outlierIndexes.Contains(index)).ToArray()); var statsOriginal = new Statistics(OriginalTimes.Where((value, index) => !outlierIndexes.Contains(index)).ToArray()); Debug.Assert(statsTarget.Length == statsOriginal.Length); Debug.Assert(statsTarget.Length == TotalCount - outlierIndexes.Count); Slope = statsTarget.Slope(statsOriginal); Intercept = statsTarget.Intercept(statsOriginal); R = statsTarget.R(statsOriginal); if (double.IsNaN(R)) { R = 0; } }