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 Prognoz() { 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]); } } } var xMatrix = withoutResultParameter.Select(o => o.ToArray()).ToArray(); var transpWithoutMatrix = MatrixFunction.TransposeMatrix(xMatrix); RegressionAnalysis ra = new RegressionAnalysis(dataMatrix, resultParameterNumber); var result = ra.RegressionCoefficients; double s = ra.ResidualDispersion; double t = 4.587; double[] a = new double[2]; a[0] = MatrixFunction.ScalarProductOfVectors(x0, result) - t * s * Math.Sqrt(MatrixFunction.ScalarProductOfVectors(MatrixFunction.TransposeMatrixVectorProduct(x0, MatrixFunction.InverseMatrix(MatrixFunction.MultiplicateMatrix(transpWithoutMatrix, xMatrix))), x0)); a[1] = MatrixFunction.ScalarProductOfVectors(x0, result) + t * s * Math.Sqrt(MatrixFunction.ScalarProductOfVectors(MatrixFunction.TransposeMatrixVectorProduct(x0, MatrixFunction.InverseMatrix(MatrixFunction.MultiplicateMatrix(transpWithoutMatrix, xMatrix))), x0)); Value = a; }
private void CalcElasticityCoefficients() { double[] result = new double[dataMatrix.Length]; var tm = MatrixFunction.TransposeMatrix(dataMatrix); double y = tm[tm.Length - 1].Average(); result[tm.Length - 1] = RegressionCoefficients[tm.Length - 1]; for (int i = 0; i < tm.Length - 1; ++i) { result[i] = RegressionCoefficients[i] * tm[i].Average() / y; } ElasticityCoefficients = result; }
private void CalcConfidenceIntervalsOfCoefficients() { double[] sb = new double[parametersCount]; var temperory = MatrixFunction.InverseMatrix(MatrixFunction.MultiplicateMatrix(MatrixFunction.TransposeMatrix(xMatrix), xMatrix)); for (int j = 0; j < parametersCount; j++) { sb[j] = ResidualDispersion * temperory[j][j]; } double t = 4.587; ConfidenceIntervalsOfCoefficients = new Tuple <double, double> [parametersCount]; for (int i = 0; i < parametersCount; ++i) { ConfidenceIntervalsOfCoefficients[i] = new Tuple <double, double>(RegressionCoefficients[i] - t * sb[i], RegressionCoefficients[i] + t * sb[i]); } }
private void CalcRegressionCoefficientsSignificance() { double[] sb = new double[parametersCount]; var temperory = MatrixFunction.InverseMatrix(MatrixFunction.MultiplicateMatrix(MatrixFunction.TransposeMatrix(xMatrix), xMatrix)); for (int j = 0; j < parametersCount; j++) { sb[j] = ResidualDispersion * temperory[j][j]; } RegressionCoefficientsSignificance = new double[parametersCount]; for (int i = 0; i < parametersCount; ++i) { RegressionCoefficientsSignificance[i] = RegressionCoefficients[i] / sb[i]; } }