public static LinearRegression Calculate(double[,] xy)
        {
            int    length = xy.GetLength(0);
            double yAvg, sxy, sxx, syy, sserr;
            double xAvg = yAvg = sxy = sxx = syy = sserr = 0;

            for (int i = 0; i < length; i++)
            {
                xAvg += xy[i, 0];
                yAvg += xy[i, 1];
            }
            xAvg /= length;
            yAvg /= length;

            for (int i = 0; i < length; i++)
            {
                double xdiff = xy[i, 0] - xAvg;
                double ydiff = xy[i, 1] - yAvg;
                sxy += xdiff * ydiff;
                sxx += xdiff * xdiff;
                syy += ydiff * ydiff;
            }
            double           m          = sxy / sxx;
            double           b          = yAvg - m * xAvg;
            LinearRegression regression = new LinearRegression(m, b);

            for (int i = 0; i < length; i++)
            {
                sserr += Math.Pow(xy[i, 1] - regression.GetY(xy[i, 0]), 2);
            }
            regression.RSquared = 1 - (sserr / syy);
            return(regression);
        }
        public static LinearRegression Calculate(double[,] xy)
        {
            int length = xy.GetLength(0);
            double yAvg, sxy, sxx, syy, sserr;
            double xAvg = yAvg = sxy = sxx = syy = sserr = 0;

            for (int i = 0; i < length; i++)
            {
                xAvg += xy[i, 0];
                yAvg += xy[i, 1];
            }
            xAvg /= length;
            yAvg /= length;

            for (int i = 0; i < length; i++)
            {
                double xdiff = xy[i, 0] - xAvg;
                double ydiff = xy[i, 1] - yAvg;
                sxy += xdiff*ydiff;
                sxx += xdiff*xdiff;
                syy += ydiff*ydiff;
            }
            double m = sxy/sxx;
            double b = yAvg - m*xAvg;
            LinearRegression regression = new LinearRegression(m, b);
            for (int i = 0; i < length; i++)
            {
                sserr += Math.Pow(xy[i, 1] - regression.GetY(xy[i, 0]), 2);
            }
            regression.RSquared = 1 - (sserr/syy);
            return regression;
        }
        public static LinearRegression Calculate(double[] x, double[] y)
        {
            int length = x.Length;

            if (length != y.Length)
            {
                throw new ArgumentException("X and Y Dimensions do not match");
            }
            double yAvg, sxy, sxx, syy, sserr;
            double xAvg = yAvg = sxy = sxx = syy = sserr = 0;

            for (int i = 0; i < length; i++)
            {
                xAvg += x[i];
                yAvg += y[i];
            }
            xAvg /= length;
            yAvg /= length;

            for (int i = 0; i < length; i++)
            {
                double xdiff = x[i] - xAvg;
                double ydiff = y[i] - yAvg;
                sxy += xdiff * ydiff;
                sxx += xdiff * xdiff;
                syy += ydiff * ydiff;
            }
            double           m          = sxy / sxx;
            double           b          = yAvg - m * xAvg;
            LinearRegression regression = new LinearRegression(m, b);

            for (int i = 0; i < length; i++)
            {
                sserr += Math.Pow(y[i] - regression.GetY(x[i]), 2);
            }
            regression.RSquared = 1 - (sserr / syy);
            return(regression);
        }
        public static LinearRegression Calculate(double[] x, double[] y)
        {
            int length = x.Length;
            if (length != y.Length)
            {
                throw new ArgumentException("X and Y Dimensions do not match");
            }
            double yAvg, sxy, sxx, syy, sserr;
            double xAvg = yAvg = sxy = sxx = syy = sserr = 0;

            for (int i = 0; i < length; i++)
            {
                xAvg += x[i];
                yAvg += y[i];
            }
            xAvg /= length;
            yAvg /= length;

            for (int i = 0; i < length; i++)
            {
                double xdiff = x[i] - xAvg;
                double ydiff = y[i] - yAvg;
                sxy += xdiff*ydiff;
                sxx += xdiff*xdiff;
                syy += ydiff*ydiff;
            }
            double m = sxy/sxx;
            double b = yAvg - m*xAvg;
            LinearRegression regression = new LinearRegression(m, b);
            for (int i = 0; i < length; i++)
            {
                sserr += Math.Pow(y[i] - regression.GetY(x[i]), 2);
            }
            regression.RSquared = 1 - (sserr/syy);
            return regression;
        }