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); }