public static double[] StandardError([NotNull][ItemNotNull] this double[][] design, [NotNull] double[] squaredErrors, StandardErrorType heteroscedasticityConsistent)
        {
            if (design is null)
            {
                throw new ArgumentNullException(nameof(design));
            }
            if (squaredErrors is null)
            {
                throw new ArgumentNullException(nameof(squaredErrors));
            }
            if (design.Length != squaredErrors.Length)
            {
                throw new ArrayConformabilityException <double>(design, squaredErrors);
            }

            double[][] covariance = design.Covariance(squaredErrors, heteroscedasticityConsistent);

            double[] result = new double[covariance.Length];

            for (int i = 0; i < result.Length; i++)
            {
                result[i] = Math.Sqrt(covariance[i][i]);
            }

            return(result);
        }
 public StandardError(string screen_message, StandardErrorType type)
 {
     this.screen_message      = screen_message;
     this.screen_error        = type;
     this.screen_error_string = this.screen_error.ToString();
 }
        public static double[][] Covariance([NotNull][ItemNotNull] this double[][] design, [NotNull] double[] squaredErrors, StandardErrorType heteroscedasticityConsistent)
        {
            if (design is null)
            {
                throw new ArgumentNullException(nameof(design));
            }
            if (squaredErrors is null)
            {
                throw new ArgumentNullException(nameof(squaredErrors));
            }
            if (design.Length != squaredErrors.Length || design.Length == 0)
            {
                throw new ArrayConformabilityException <double>(design, squaredErrors);
            }

            switch (heteroscedasticityConsistent)
            {
            case StandardErrorType.HC0:
            {
                return(design.Covariance(squaredErrors, 1.0));
            }

            case StandardErrorType.HC1:
            {
                return(design.Covariance(squaredErrors, (double)design.Length / (design.Length - design[0].Length)));
            }

            case StandardErrorType.Ols:
            {
                return(design.Covariance(squaredErrors));
            }

            default:
            {
                throw new ArgumentException(nameof(StandardErrorType));
            }
            }
        }