/// <summary> /// Получить коэффициенты регрессии /// </summary> /// <param name="matrix"></param> /// <returns></returns> public double[] GetRegressionCoeffs() { if (regressionCoeffs != null) { return(regressionCoeffs); } double[] y = matrix[0]; double[][] xT = MatrixOperations.Transpose(xMatrix); double[][] xTx = MatrixOperations.Mult(xT, xMatrix); double[][] xTx_ = MatrixOperations.InverseSLAU(xTx); double[][] xTx_xT = MatrixOperations.Mult(xTx_, xT); return(regressionCoeffs = MatrixOperations.Mult(xTx_xT, y)); }
/// <summary> /// Получить интервал предсказания /// </summary> /// <param name="paramValues"></param> /// <returns></returns> public double GetIntervalPredication(double[] paramValues) { double tKrit = GetTKritEquationCoeffs(); double qOst = GetQost(); int k = matrix.Length - 1; int n = matrix[0].Length; double s = Math.Sqrt(qOst / (n - k - 1)); double[][] x0T = MatrixOperations.Transpose(paramValues); double[][] xTx = MatrixOperations.Mult(MatrixOperations.Transpose(xMatrix), xMatrix); double[][] xTx_ = MatrixOperations.InverseSLAU(xTx); double[][] x0TxTx_ = MatrixOperations.Mult(x0T, xTx_); double fin = MatrixOperations.Mult(x0TxTx_, paramValues)[0] + 1; return(tKrit * s * Math.Sqrt(fin)); }
/// <summary> /// Получить интервальную оценку уравнения y~ /// </summary> /// <returns></returns> public double[] GetIntervalEstimateEquation() { double tKrit = GetTKritEquationCoeffs(); double[] result = new double[matrix[0].Length]; double qOst = GetQost(); int k = matrix.Length - 1; int n = matrix[0].Length; double s = Math.Sqrt(qOst / (n - k - 1)); for (int i = 0; i < result.Length; i++) { double[][] x0T = MatrixOperations.Transpose(xMatrix[i]); double[][] xTx = MatrixOperations.Mult(MatrixOperations.Transpose(xMatrix), xMatrix); double[][] xTx_ = MatrixOperations.InverseSLAU(xTx); double[][] x0TxTx_ = MatrixOperations.Mult(x0T, xTx_); double fin = MatrixOperations.Mult(x0TxTx_, xMatrix[i])[0]; result[i] = tKrit * s * Math.Sqrt(fin); } return(result); }
/// <summary> /// Получить стандартную ошибку для коэффициентов (sbj) /// </summary> /// <returns></returns> public double[] GetStandartErrorOfRegressionCoeffs() { if (standartErrorOfRegressionCoeff != null) { return(standartErrorOfRegressionCoeff); } double qOst = GetQost(); int k = matrix.Length - 1; int n = matrix[0].Length; double s2 = qOst / (n - k - 1); double[] result = new double[k + 1]; double[][] xT = MatrixOperations.Transpose(xMatrix); double[][] xTx = MatrixOperations.Mult(xT, xMatrix); double[][] xTx_ = MatrixOperations.InverseSLAU(xTx); for (int i = 0; i < k + 1; i++) { result[i] = Math.Sqrt(s2 * xTx_[i][i]); } return(standartErrorOfRegressionCoeff = result); }