private void CalcRegressionCoefficients()
        {
            var transpMatrix = MatrixFunction.TransposeMatrix(dataMatrix);
            int parametersCount = dataMatrix[0].Length, measuresCount = dataMatrix.Length;

            double[]        resultParameter        = transpMatrix[resultParameterNumber];
            List <double>[] withoutResultParameter = new List <double> [measuresCount];

            for (int i = 0; i < measuresCount; i++)
            {
                withoutResultParameter[i] = new List <double>();
                withoutResultParameter[i].Add(1);

                for (int j = 0; j < parametersCount; ++j)
                {
                    if (j != resultParameterNumber)
                    {
                        withoutResultParameter[i].Add(dataMatrix[i][j]);
                    }
                }
            }

            xMatrix = withoutResultParameter.Select(o => o.ToArray()).ToArray();
            var transpWithoutMatrix = MatrixFunction.TransposeMatrix(xMatrix);

            RegressionCoefficients = MatrixFunction.MatrixVectorMultiplication(MatrixFunction.MultiplicateMatrix(MatrixFunction.InverseMatrix(MatrixFunction.MultiplicateMatrix(transpWithoutMatrix, xMatrix)), transpWithoutMatrix), resultParameter);
            RegressionCoefficients = RegressionCoefficients.Take(parametersCount).ToArray();
        }
        private void CalcDispersion()
        {
            var yWithWave       = MatrixFunction.MatrixVectorMultiplication(xMatrix, RegressionCoefficients);
            var averageY        = yWithWave.Average();
            var devivationsYSum = yWithWave.Select(y => Math.Pow(y - averageY, 2)).Sum();

            ExplicatedDispersion = devivationsYSum / parametersCount;
            ResidualDispersion   = devivationsYSum / (measuresCount - parametersCount - 1);
        }