private Data SravnDisperF(List <InitialAnalysMultidimensionalData> IAMD)
        {
            Data rez = new Data();

            rez.Name = "Збіг DC";
            double Nsum = N.Sum();
            double V    = 0;

            double[,] S = new double[n, n];
            List <double[, ]> Sd = new List <double[, ]>();

            for (int d = 0; d < IAMD.Count; d++)
            {
                Sd.Add(SdF(IAMD[d]));
            }
            for (int d = 0; d < IAMD.Count; d++)
            {
                S = Matrix.Addition(S, Matrix.MultiplicNumber(Sd[d], N[d] - 1));
            }
            S = Matrix.MultiplicNumber(S, 1.0 / (Nsum - IAMD.Count));

            double detS = Matrix.Determinant(S);

            for (int d = 0; d < IAMD.Count; d++)
            {
                V += ((N[d] - 1) / 2) * Math.Log(detS / Matrix.Determinant(Sd[d]));
            }
            rez.Q      = V;
            rez.QKvant = Hi.HIF(IAMD[0].ISA[0].alf.Q, n * (n + 1) * (IAMD.Count - 1) / 2);
            rez.H      = rez.Q <= rez.QKvant;
            return(rez);
        }
示例#2
0
        private Data SravSredF(List <InitialAnalysMultidimensionalData> IAMD)
        {
            Data rez = new Data()
            {
                Name = "Збіг середніх при розбіжності DC"
            };

            double[,] Ex = ExF(IAMD);
            double[,] V  = new double[1, 1];
            for (int d = 0; d < IAMD.Count; d++)
            {
                double[,] Exd = xdF(IAMD[d]);
                double[,] Xdx = new double[1, n];
                for (int i = 0; i < n; i++)
                {
                    Xdx[0, i] = Exd[0, i] - Ex[0, i];
                }
                double[,] SInv = Matrix.InverseMatrix(SdF(IAMD[d]));
                V = Matrix.Addition(V, Matrix.MultiplicMatrix(Xdx, Matrix.MultiplicMatrix(SInv, Matrix.TranspMatrix(Xdx))));
            }
            rez.Q      = V[0, 0];
            rez.QKvant = Hi.HIF(IAMD[0].ISA[0].alf.Q, (int)(n * (IAMD.Count - 1)));
            rez.H      = rez.Q <= rez.QKvant;
            return(rez);
        }
        public Data SravnSredF(InitialAnalysMultidimensionalData X, InitialAnalysMultidimensionalData Y)
        {
            Data rez = new Data();

            double[,] S0 = S0F(X, Y);
            double[,] S1 = S1F(X, Y);
            rez.Name     = "Рівність багатомірних середніх при рівності DC матриці";
            rez.Q        = -(N1 + N2 - 2 - n / 2) * Math.Log(Matrix.Determinant(S1) / Matrix.Determinant(S0));
            rez.QKvant   = Hi.HIF(X.ISA[0].alf.Q, n);
            rez.H        = rez.Q <= rez.QKvant;
            return(rez);
        }
        double[,] NijFound(List <InitialStatisticalAnalys> ML, List <int> MSelectGR)
        {
            double[,] rez = new double[3, 3];
            for (int i = 0; i < ML[MSelectGR[0]].l.Count; i++)
            {
                if (ML[MSelectGR[0]].unsortl[i] > ML[MSelectGR[0]].Mx.Q && ML[MSelectGR[1]].unsortl[i] > ML[MSelectGR[1]].Mx.Q)
                {
                    rez[1, 1]++;
                }
                else if (ML[MSelectGR[0]].unsortl[i] > ML[MSelectGR[0]].Mx.Q && ML[MSelectGR[1]].unsortl[i] <= ML[MSelectGR[1]].Mx.Q)
                {
                    rez[0, 1]++;
                }
                else if (ML[MSelectGR[0]].unsortl[i] <= ML[MSelectGR[0]].Mx.Q && ML[MSelectGR[1]].unsortl[i] > ML[MSelectGR[1]].Mx.Q)
                {
                    rez[1, 0]++;
                }
                else if (ML[MSelectGR[0]].unsortl[i] <= ML[MSelectGR[0]].Mx.Q && ML[MSelectGR[1]].unsortl[i] <= ML[MSelectGR[1]].Mx.Q)
                {
                    rez[0, 0]++;
                }
            }
            rez[2, 0] = rez[0, 0] + rez[0, 1];                         ///N0
            rez[2, 1] = rez[1, 0] + rez[1, 1];                         ///N1
            rez[0, 2] = rez[0, 0] + rez[1, 0];                         ///M0
            rez[1, 2] = rez[0, 1] + rez[1, 1];                         ///M1
            rez[2, 2] = rez[0, 0] + rez[0, 1] + rez[1, 0] + rez[1, 1]; ///N
            double V = rez[0, 0] + rez[1, 1];
            double W = rez[0, 1] + rez[1, 0];

            IndexFehnera     = (V - W) / (V + W);
            KoefSpolF[0]     = (rez[0, 0] * rez[1, 1] - rez[0, 1] * rez[1, 0]) / Math.Sqrt(rez[0, 2] * rez[1, 2] * rez[2, 0] * rez[2, 1]);
            KoefSpolF[1]     = Math.Pow(KoefSpolF[0], 2) * ML[MSelectGR[0]].l.Count;
            KoefSpolF[2]     = Hi.HIF(ML[MSelectGR[1]].alf.Q, 1);
            KoefSvazYoola[0] = (rez[0, 0] * rez[1, 1] - rez[0, 1] * rez[1, 0]) / (rez[0, 0] * rez[1, 1] + rez[0, 1] * rez[1, 0]);
            KoefSvazYoola[1] = (Math.Sqrt(rez[0, 0] * rez[1, 1]) - Math.Sqrt(rez[0, 1] * rez[1, 0])) /
                               (Math.Sqrt(rez[0, 0] * rez[1, 1]) + Math.Sqrt(rez[0, 1] * rez[1, 0]));
            KoefSvazYoola[2] = KoefSvazYoola[0] / (Math.Sqrt(1.0 / rez[0, 0] + 1.0 / rez[1, 0] + 1.0 / rez[0, 1] + 1.0 / rez[1, 1]) *
                                                   (1 - Math.Pow(KoefSvazYoola[0], 2)) / 2.0);
            KoefSvazYoola[3] = KoefSvazYoola[1] / (Math.Sqrt(1.0 / rez[0, 0] + 1.0 / rez[1, 0] + 1.0 / rez[0, 1] + 1.0 / rez[1, 1]) *
                                                   (1 - Math.Pow(KoefSvazYoola[1], 2)) / 4.0);
            return(rez);
        }
示例#5
0
        public UniformityCriteria(List <InitialStatisticalAnalys> ML, List <int> MSelectGR)
        {
            this.ML        = ML;
            this.MSelectGR = MSelectGR;

            N = NFound(ML, MSelectGR);
            {
                double NezCount = ML[MSelectGR[0]].l.Count;
                for (int i = 0; i < MSelectGR.Count; i++)
                {
                    if (ML[MSelectGR[i]].l.Count != NezCount)
                    {
                        Nezal = false;
                    }
                }
            }
            rDvomFound(ML[MSelectGR[0]].unsortl);
            r            = rFound(ML, MSelectGR);
            Sm2          = Sm2Found(ML, MSelectGR);
            Sv2          = Sv2Found(ML, MSelectGR);
            VarSv2Sm2[0] = Sm2 / Sv2;
            VarSv2Sm2[1] = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1, (int)(N - MSelectGR.Count));
            var tyui = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, 10, 10);

            if (Nezal == true)
            {
                KrKohrena[0] = KrKohrenaFound(ML, MSelectGR);
                KrKohrena[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);
                T            = Distributions.StudentQuantile(1 - ML[MSelectGR[0]].alf.Q / 2, ML[MSelectGR[0]].l.Count - 2);
            }
            if (MSelectGR.Count == 2)
            {
                Doubl = true;
                if (Nezal == true)
                {
                    SravnSred[1] = Distributions.StudentQuantile(ML[MSelectGR[0]].alf.Q / 2,
                                                                 ML[MSelectGR[0]].l.Count + ML[MSelectGR[1]].l.Count - 2);
                }
                else
                {
                    SravnSred[1] = Distributions.StudentQuantile(ML[MSelectGR[0]].alf.Q / 2, ML[MSelectGR[0]].l.Count - 2);
                }

                SravnSred[0]   = SimpleMx(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                SravnDisper[0] = SimpleS(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                SravnDisper[1] = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, ML[MSelectGR[0]].l.Count - 1, ML[MSelectGR[1]].l.Count - 1);

                KrSmirnKolmag[0] = 1.0 - LzFound(ZFound(ML[MSelectGR[0]], ML[MSelectGR[1]]));
                KrSmirnKolmag[1] = ML[MSelectGR[0]].alf.Q;

                KrsumRangVils[0] = KrsumRangVilsFound(r, ML[MSelectGR[0]], ML[MSelectGR[1]]);
                KrsumRangVils[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                KrUMannaUit[0] = KrUMannaUitFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                KrUMannaUit[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                RizSerRangVib[0] = RizSerRangVibFound(r, ML[MSelectGR[0]], ML[MSelectGR[1]]);
                RizSerRangVib[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                KrZnakiv[0] = KrZnakivFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
            }
            else
            {
                Doubl          = false;
                SravnSred[0]   = SimpleMx(ML, MSelectGR);
                SravnDisper[0] = SimpleS(ML, MSelectGR);
                SravnDisper[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);

                KrKruskalaUolisa[0] = KrKruskalaUolisaFound(r, ML, MSelectGR);
                KrKruskalaUolisa[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);
            }
            Round();
        }
        public Correlation_RegressionAnalysis(List <InitialStatisticalAnalys> ML, List <int> MSelectGR, string RegresTypeVib)
        {
            this.ML            = ML;
            this.MSelectGR     = MSelectGR;
            this.RegresTypeVib = RegresTypeVib;

            N = NFound(ML, MSelectGR);
            {
                double NezCount = ML[MSelectGR[0]].l.Count;
                for (int i = 0; i < MSelectGR.Count; i++)
                {
                    if (ML[MSelectGR[i]].l.Count != NezCount)
                    {
                        Nezal = false;
                    }
                }
            }
            T = Distributions.StudentQuantile(1 - ML[MSelectGR[0]].alf.Q / 2, ML[MSelectGR[0]].l.Count - 2);
            if (MSelectGR.Count == 2)
            {
                Doubl = true;
                if (Nezal == true)
                {
                    f                   = fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], 15, 7);
                    Korelation[0]       = KorelationFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    KorelationVidnoh[0] = KorelationVidnohFound(ML, MSelectGR);
                    RangKorelation[0]   = RangKorelationFound(ML, MSelectGR);
                    RangKorelation[1]   = RangKorelation[0] * Math.Sqrt((ML[MSelectGR[0]].l.Count - 2) / (1 - Math.Pow(RangKorelation[0], 2)));


                    X2f[0] = X2fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], f);
                    X2f[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, ML[MSelectGR[0]].l.Count - 2);

                    RangKoefKend[0] = RangKoefKendFound(ML, MSelectGR);//slow
                    RangKoefKend[1] = 3 * RangKoefKend[0] * Math.Sqrt((ML[MSelectGR[0]].l.Count * (ML[MSelectGR[0]].l.Count - 1)) /
                                                                      (2 * (2 * ML[MSelectGR[0]].l.Count + 5)));
                    RangKoefKend[2] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2);

                    Nij = NijFound(ML, MSelectGR);
                    int ti = (int)(12 * ML[MSelectGR[1]].Dx.Q / ML[MSelectGR[0]].Dx.Q);
                    try
                    {
                        if (Math.Abs(ti) > 20)
                        {
                            ti = 20;
                        }
                    }
                    catch
                    { ti = 20; }
                    TablPerTab(ML, MSelectGR, fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], 12, ti));

                    Q    = RegresParamFound(ML[MSelectGR[0]], ML[MSelectGR[1]], Korelation[0], RegresTypeVib, ref Szal2);
                    Szal = SzalF(ML[MSelectGR[0]], ML[MSelectGR[1]], Q, RegresTypeVib);/*
                                                                                        * AB[1] = Korelation[0] * ML[MSelectGR[1]].Gx.Q / ML[MSelectGR[0]].Gx.Q;
                                                                                        * AB[0] = ML[MSelectGR[1]].Mx.Q - AB[1] * ML[MSelectGR[0]].Mx.Q;*/
                    NachYslovRegAnal(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    // Szal = SzalFound(AB, ML[MSelectGR[0]], ML[MSelectGR[1]]);

                    /*AB[2] = Szal * Math.Sqrt(1.0 / ML[MSelectGR[0]].l.Count + Math.Pow(ML[MSelectGR[0]].Mx.Q, 2) /
                     *  (ML[MSelectGR[0]].Dx.Q * (ML[MSelectGR[0]].l.Count - 1)));
                     * AB[3] = Szal / (ML[MSelectGR[0]].Gx.Q * Math.Sqrt(ML[MSelectGR[0]].l.Count - 1));*/


                    ABTailFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    double op = Korelation[0] * (1 - Math.Pow(Korelation[0], 2)) / (2 * ML[MSelectGR[0]].l.Count);
                    double oi = (1 - Math.Pow(Korelation[0], 2)) / Math.Sqrt(ML[MSelectGR[0]].l.Count - 1);
                    double rn = Korelation[0] + op - Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2) * oi;
                    double rv = Korelation[0] + op + Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2) * oi;
                    if (rn < -1)
                    {
                        rn = 1;
                    }
                    if (rv > 1)
                    {
                        rv = 1;
                    }
                    Korelation[1] = rn;
                    Korelation[2] = rv;
                    Korelation[3] = op;
                    if (RegresTypeVib == RegresTypeName.ParabRegresion)
                    {
                        KoefDeterm = (1 - Math.Pow(Szal2, 2) / ML[MSelectGR[1]].Dx.Q) * 100;
                    }
                    else
                    {
                        KoefDeterm = Math.Pow(Korelation[0], 2) * 100;
                    }
                }
            }
            else
            {
                Doubl = false;
            }
            Round();
        }
        void TablPerTab(List <InitialStatisticalAnalys> ML, List <int> MSelectGR, double[,] f)
        {
            double[] n = new double[f.GetLength(1)];
            double[] m = new double[f.GetLength(0)];
            for (int i = 0; i < f.GetLength(0); i++)
            {
                for (int j = 0; j < f.GetLength(1); j++)
                {
                    m[i] += f[i, j] * ML[MSelectGR[0]].l.Count;
                }
            }
            for (int i = 0; i < f.GetLength(1); i++)
            {
                for (int j = 0; j < f.GetLength(0); j++)
                {
                    n[i] += f[j, i] * ML[MSelectGR[1]].l.Count;
                }
            }
            for (int i = 0; i < f.GetLength(1); i++)
            {
                for (int j = 0; j < f.GetLength(0); j++)
                {
                    NezXY[0] += Math.Pow(f[j, i] * ML[MSelectGR[0]].l.Count - n[i] * m[j] / ML[MSelectGR[0]].l.Count, 2) / (n[i] * m[j] / ML[MSelectGR[0]].l.Count);
                }
            }
            NezXY[1]        = Hi.HIF(ML[MSelectGR[0]].alf.Q, (f.GetLength(1) - 1) * (f.GetLength(0) - 1));
            KoefSpolPirs[0] = Math.Sqrt(NezXY[0] / (NezXY[0] + ML[MSelectGR[0]].l.Count));

            double P = 0, Q = 0;
            double Stsig = 0;

            for (int i = 0; i < f.GetLength(1); i++)
            {
                for (int j = 0; j < f.GetLength(0); j++)
                {
                    double t1 = 0, t2 = 0, A1 = 0, B1 = 0, A2 = 0, B2 = 0;
                    for (int k = i; k < f.GetLength(1); k++)
                    {
                        for (int l = j; l < f.GetLength(0); l++)
                        {
                            t1 += f[l, k] * ML[MSelectGR[1]].l.Count;
                            A1 += f[l, k] * ML[MSelectGR[1]].l.Count;
                            A2 += f[l - j, k - i] * ML[MSelectGR[1]].l.Count;
                            B1 += f[l, k - i] * ML[MSelectGR[1]].l.Count;
                            B2 += f[l - j, k] * ML[MSelectGR[1]].l.Count;
                        }
                        for (int l = 0; l < j; l++)
                        {
                            t2 += f[l, k] * ML[MSelectGR[1]].l.Count;
                        }
                    }
                    P     += f[j, i] * t1 * ML[MSelectGR[1]].l.Count;
                    Q     += f[j, i] * t2 * ML[MSelectGR[1]].l.Count;
                    Stsig += f[j, i] * ML[MSelectGR[1]].l.Count * Math.Pow(A1 + A2 - B1 - B2, 2);
                }
            }
            if (f.GetLength(0) == f.GetLength(1))
            {
                MeraZvazKendallaStatStyardName = "Міра зв'язку Кендалла";
                double T1 = 0, T2 = 0;
                for (int j = 0; j < f.GetLength(1); j++)
                {
                    T1 += n[j] * (n[j] - 1);
                }
                for (int j = 0; j < f.GetLength(0); j++)
                {
                    T2 += m[j] * (m[j] - 1);
                }
                T1 /= 2;
                T2 /= 2;
                MeraZvazKendallaStatStyard[0] = (P - Q) / Math.Sqrt((ML[MSelectGR[1]].l.Count * (ML[MSelectGR[1]].l.Count - 1) / 2.0 - T1) *
                                                                    (ML[MSelectGR[1]].l.Count * (ML[MSelectGR[1]].l.Count - 1) / 2.0 - T2));
                MeraZvazKendallaStatStyard[1] = Math.Sqrt((f.GetLength(1) * 4.0 + 10) / (9.0 * (Math.Pow(f.GetLength(1), 2) - f.GetLength(1))));
            }
            else
            {
                MeraZvazKendallaStatStyardName = "Статистика Стюарда";
                MeraZvazKendallaStatStyard[0]  = 2 * (P - Q) * Math.Min(f.GetLength(0), f.GetLength(1)) /
                                                 (Math.Pow(ML[MSelectGR[1]].l.Count, 2) * (Math.Min(f.GetLength(0), f.GetLength(1)) - 1));
                MeraZvazKendallaStatStyard[1] = 2 * Math.Min(f.GetLength(0), f.GetLength(1)) *
                                                Math.Sqrt(Math.Pow(ML[MSelectGR[1]].l.Count, 2) * Stsig - 4.0 * ML[MSelectGR[1]].l.Count * (P - Q)) /
                                                (Math.Pow(ML[MSelectGR[1]].l.Count, 3) * (Math.Min(f.GetLength(0), f.GetLength(1)) - 1));
            }
            double RKS = 0;

            for (int i = 0; i < f.GetLength(1); i++)
            {
                for (int j = 0; j < f.GetLength(0); j++)
                {
                    double S1 = 0, S2 = 0;
                    for (int k = 0; k < i; k++)
                    {
                        S1 += 1.5 * n[k];
                    }
                    for (int l = 0; l < j; l++)
                    {
                        S2 += 1.5 * m[l];
                    }
                    RKS += f[j, i] * ML[MSelectGR[1]].l.Count * (S1 - ML[MSelectGR[1]].l.Count / 2.0) * (S2 - ML[MSelectGR[1]].l.Count / 2.0);
                }
            }

            double Mi = 0, Ni = 0;

            for (int i = 0; i < f.GetLength(1); i++)
            {
                Ni += Math.Pow(n[i], 3) - n[i];
            }

            for (int i = 0; i < f.GetLength(0); i++)
            {
                Mi += Math.Pow(m[i], 3) - m[i];
            }
            KoefRKorSpir[0] = 12.0 * RKS / Math.Sqrt((Math.Pow(ML[MSelectGR[1]].l.Count, 3) - f.GetLength(1) - Ni) *
                                                     (Math.Pow(ML[MSelectGR[1]].l.Count, 3) - f.GetLength(1) - Mi));
            KoefRKorSpir[1] = (1 - Math.Pow(KoefRKorSpir[0], 2)) / (Math.Sqrt(ML[MSelectGR[1]].l.Count - 2));
        }
        private bool NachYslovRegAnal(InitialStatisticalAnalys gr1, InitialStatisticalAnalys gr2)
        {
            bool rez = true;

            if (!(gr1.AvtoType == gr2.AvtoType && gr2.AvtoType == "Нормальний"))
            {
                rez = false;
            }
            int M = 18;

            List <double>[] yi = new List <double> [M];
            for (int i = 0; i < M; i++)
            {
                yi[i] = new List <double>();
            }
            for (int i = 0; i < ML[MSelectGR[0]].l.Count; i++)
            {
                for (int j = 0; j < M; j++)
                {
                    if (gr1.unsortl[i] < (j + 1.0001) * gr1.Len.Q / M + gr1.Min.Q && gr1.unsortl[i] >= (j * gr1.Len.Q / M + gr1.Min.Q))
                    {
                        yi[j].Add(gr2.unsortl[i]);
                        break;
                    }
                }
            }
            ///ProvRegr
            double t1 = 0, t2 = 0;

            ///


            double[] Sxj = new double[M];
            double   S   = 0;

            for (int i = 0; i < M; i++)
            {
                double ysr = yi[i].Sum() / yi[i].Count;
                if (ysr > 0)
                {
                    for (int j = 0; j < yi[i].Count; j++)
                    {
                        t2     += Math.Pow(yi[i][j] - ysr, 2);
                        Sxj[i] += Math.Pow(yi[i][j] - ysr, 2);
                    }
                    if (yi[i].Count > 1)
                    {
                        Sxj[i] /= yi[i].Count - 1;
                    }
                    t1 += yi[i].Count * Math.Pow(ysr - Q[0].Q - Q[1].Q * ((i + 0.5) * gr1.Len.Q / M + gr1.Min.Q), 2);
                }
            }
            ProvRegrs[0] = (gr1.l.Count - M) * t1 / ((M - 1) * t2);
            ProvRegrs[1] = Distributions.FisherQuantile(gr1.alf.Q, M - 1, gr1.l.Count - M);

            double C = 0;

            for (int i = 0; i < M; i++)
            {
                S += (yi[i].Count - 1) * Sxj[i];
                if (yi[i].Count != 0)
                {
                    C += 1.0 / yi[i].Count - 1.0 / gr1.l.Count;
                }
            }
            S /= gr1.l.Count - M;
            //C -= 1 / gr1.l.Count;
            C /= 3.0 * (M - 1);
            C++;
            for (int i = 0; i < M; i++)
            {
                if (Sxj[i] != 0)
                {
                    KriterBarkleta[0] += yi[i].Count * Math.Log(Sxj[i] / S);
                }
            }
            KriterBarkleta[0] /= -C;
            KriterBarkleta[1]  = Hi.HIF(gr1.alf.Q, M - 1);



            return(rez);
        }
示例#9
0
        public SimpleClass(List <InitialStatisticalAnalys> ML, List <int> MSelectGR, double BinSim)
        {
            this.ML        = ML;
            this.MSelectGR = MSelectGR;

            N     = NFound(ML, MSelectGR);
            Nezal = Nezalegni();

            r            = rFound(ML, MSelectGR);
            Sm2          = Sm2Found(ML, MSelectGR);
            Sv2          = Sv2Found(ML, MSelectGR);
            VarSv2Sm2[0] = Sm2 / Sv2;
            VarSv2Sm2[1] = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1, (int)(N - MSelectGR.Count));
            var tyui = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, 10, 10);

            if (Nezal == true)
            {
                KrKohrena[0] = KrKohrenaFound(ML, MSelectGR, BinSim);
                KrKohrena[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);
                T            = Distributions.StudentQuantile(1 - ML[MSelectGR[0]].alf.Q / 2, ML[MSelectGR[0]].l.Count - 2);
            }
            if (MSelectGR.Count == 2)
            {
                Doubl = true;
                if (Nezal == true)
                {
                    f                   = fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], 15, 7);
                    Korelation[0]       = KorelationFound(ML, MSelectGR);
                    KorelationVidnoh[0] = KorelationVidnohFound(ML, MSelectGR);
                    RangKorelation[0]   = RangKorelationFound(ML, MSelectGR);
                    RangKorelation[1]   = RangKorelation[0] * Math.Sqrt((ML[MSelectGR[0]].l.Count - 2) / (1 - Math.Pow(RangKorelation[0], 2)));


                    X2f[0] = X2fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], f);
                    X2f[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, ML[MSelectGR[0]].l.Count - 2);

                    RangKoefKend[0] = RangKoefKendFound(ML, MSelectGR);//slow
                    RangKoefKend[1] = 3 * RangKoefKend[0] * Math.Sqrt((ML[MSelectGR[0]].l.Count * (ML[MSelectGR[0]].l.Count - 1)) /
                                                                      (2 * (2 * ML[MSelectGR[0]].l.Count + 5)));
                    RangKoefKend[2] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2);

                    Nij = NijFound(ML, MSelectGR, BinSim);
                    int ti = (int)(12 * ML[MSelectGR[1]].Dx.Q / ML[MSelectGR[0]].Dx.Q);
                    try
                    {
                        if (Math.Abs(ti) > 20)
                        {
                            ti = 20;
                        }
                    }
                    catch
                    { ti = 20; }
                    TablPerTab(ML, MSelectGR, fFound(ML[MSelectGR[0]], ML[MSelectGR[1]], 12, ti));

                    RegresParam = RegresParamFound();
                    NachYslovRegAnal(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    KoefDeterm = Math.Pow(Korelation[0], 2) * 100;
                    Szal       = SzalFound(AB, ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    AB[2]      = Szal * Math.Sqrt(1.0 / ML[MSelectGR[0]].l.Count + Math.Pow(ML[MSelectGR[0]].Mx.Q, 2) /
                                                  (ML[MSelectGR[0]].Dx.Q * (ML[MSelectGR[0]].l.Count - 1)));
                    AB[3] = Szal / (ML[MSelectGR[0]].Gx.Q * Math.Sqrt(ML[MSelectGR[0]].l.Count - 1));

                    ABTailFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                    double op = Korelation[0] * (1 - Math.Pow(Korelation[0], 2)) / (2 * ML[MSelectGR[0]].l.Count);
                    double oi = (1 - Math.Pow(Korelation[0], 2)) / Math.Sqrt(ML[MSelectGR[0]].l.Count - 1);
                    double rn = Korelation[0] + op - Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2) * oi;
                    double rv = Korelation[0] + op + Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2) * oi;
                    if (rn < -1)
                    {
                        rn = 1;
                    }
                    if (rv > 1)
                    {
                        rv = 1;
                    }
                    Korelation[1] = rn;
                    Korelation[2] = rv;
                    Korelation[2] = op;
                    SravnSred[1]  = Distributions.StudentQuantile(ML[MSelectGR[0]].alf.Q / 2,
                                                                  ML[MSelectGR[0]].l.Count + ML[MSelectGR[1]].l.Count - 2);
                }
                else
                {
                    SravnSred[1] = Distributions.StudentQuantile(ML[MSelectGR[0]].alf.Q / 2, ML[MSelectGR[0]].l.Count - 2);
                }

                SravnSred[0]   = SimpleMx(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                SravnDisper[0] = SimpleS(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                SravnDisper[1] = Distributions.FisherQuantile(ML[MSelectGR[0]].alf.Q, ML[MSelectGR[0]].l.Count - 1, ML[MSelectGR[1]].l.Count - 1);

                KrSmirnKolmag[0] = 1.0 - LzFound(ZFound(ML[MSelectGR[0]], ML[MSelectGR[1]]));
                KrSmirnKolmag[1] = ML[MSelectGR[0]].alf.Q;

                KrsumRangVils[0] = KrsumRangVilsFound(r, ML[MSelectGR[0]], ML[MSelectGR[1]]);
                KrsumRangVils[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                KrUMannaUit[0] = KrUMannaUitFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
                KrUMannaUit[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                RizSerRangVib[0] = RizSerRangVibFound(r, ML[MSelectGR[0]], ML[MSelectGR[1]]);
                RizSerRangVib[1] = Distributions.NormalQuantile(1 - ML[MSelectGR[0]].alf.Q / 2.0);

                KrZnakiv[0] = KrZnakivFound(ML[MSelectGR[0]], ML[MSelectGR[1]]);
            }
            else
            {
                Doubl          = false;
                SravnSred[0]   = SimpleMx(ML, MSelectGR);
                SravnDisper[0] = SimpleS(ML, MSelectGR);
                SravnDisper[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);

                KrKruskalaUolisa[0] = KrKruskalaUolisaFound(r, ML, MSelectGR);
                KrKruskalaUolisa[1] = Hi.HIF(ML[MSelectGR[0]].alf.Q, MSelectGR.Count - 1);
            }
            Round();
        }