Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        /// <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);
        }