コード例 #1
0
        public ChastkovyyZnachushchist(NNData data)
        {
            InitializeComponent();

            for (int i = 0; i < data.Num; i++)
            {
                dataGridView1.Columns.Add(i.ToString(), i.ToString());
                dataGridView1.Rows.Add();
            }
            for (int i = 0; i < data.Num; i++)
            {
                for (int j = 0; j < data.Num; j++)
                {
                    if (data.Znachushchist[i, j] != "")
                    {
                        double stat = statistic(Convert.ToDouble(data.Znachushchist[i, j]), data.Length, data.kor_num);
                        if (Math.Abs(stat) <= Quantil.StudentQuantil1(data.Length - data.kor_num - 2))
                        {
                            dataGridView1.Rows[i].Cells[j].Value = stat.ToString("N5") + ", True";
                        }
                        else
                        {
                            dataGridView1.Rows[i].Cells[j].Value = stat.ToString("N5") + ", False";
                        }
                    }
                }
            }
        }
コード例 #2
0
ファイル: TwoRergessions.cs プロジェクト: strorch/mat_stat
        private void button2_Click(object sender, EventArgs e)
        {
            string RESULT = "Результат:\n";
            int    num1   = 0;
            int    num2   = 0;

            try
            {
                num1 = Convert.ToInt32(textBox1.Text);
                num2 = Convert.ToInt32(textBox2.Text);
            }
            catch
            {
                MessageBox.Show("Не введено дані!");
                return;
            }
            var First = _f.ReturnTuple(num1 - 1);
            var Second = _f.ReturnTuple(num2 - 1);
            int N1 = First.Item2, N2 = Second.Item2;

            double[] X1 = new double[N1];
            double[] Y1 = new double[N1];
            double[] X2 = new double[N2];
            double[] Y2 = new double[N2];
            for (int i = 0; i < N1; i++)
            {
                X1[i] = First.Item1[i, 0];
                Y1[i] = First.Item1[i, 1];
            }
            for (int i = 0; i < N2; i++)
            {
                X2[i] = Second.Item1[i, 0];
                Y2[i] = Second.Item1[i, 1];
            }

            double t_stat = this.Bt_stat(X1, Y1, X2, Y2);

            if (Math.Abs(t_stat) <= Quantil.StudentQuantil1(this.StepinViln(X1, Y1, X2, Y2)))
            {
                RESULT += "\n1)За наближеними формулами результат перевірки на збіг коефіцієнта В позитивний.\n  Статистика Т = " + Math.Round(t_stat, 4).ToString() + "\n";
            }
            else
            {
                RESULT += "\n1)За наближеними формулами результат перевірки на збіг коефіцієнта В негативний.\n  Статистика Т = " + Math.Round(t_stat, 4).ToString() + "\n";
            }
            double u_stat = this.Ustatistic(X1, Y1, X2, Y2);

            if (Math.Abs(u_stat) <= Quantil.NormalQuantil())
            {
                RESULT += "\n2)За наближеними формулами результат перевірки на збіг коефіцієнта A позитивний.\n  Статистика U = " + Math.Round(u_stat, 4).ToString() + "\n";
            }
            else
            {
                RESULT += "\n2)За наближеними формулами результат перевірки на збіг коефіцієнта A негативний.\n  Статистика U = " + Math.Round(u_stat, 4).ToString() + "\n";
            }
            label3.Text = RESULT;
        }
コード例 #3
0
        static public double QuantilFishera(int N1, int N2)
        {
            double res;
            double norm_kv = Quantil.NormalQuantil();
            double sig     = (1.0 / N1) + (1.0 / N2);
            double delta   = (1.0 / N1) - (1.0 / N2);

            res  = norm_kv * Math.Sqrt(sig / 2.0);
            res -= (1.0 / 6) * delta * (Math.Pow(norm_kv, 2) + 2);
            res += Math.Sqrt(sig / 2.0) * ((sig / 24) * (Math.Pow(norm_kv, 2) + 3 * norm_kv) + (1.0 / 72) * (delta * delta / sig) * (Math.Pow(norm_kv, 3) + 11 * norm_kv));
            res -= (delta * sig / 120) * (Math.Pow(norm_kv, 4) + 9 * Math.Pow(norm_kv, 2) + 8);
            res += Math.Pow(delta, 3) / (sig * 3240) * (3 * Math.Pow(norm_kv, 4) + 7 * Math.Pow(norm_kv, 2) - 16);
            res += Math.Sqrt(sig / 2.0) * ((Math.Pow(sig, 2) / 1920) * (Math.Pow(norm_kv, 5) + 20 * Math.Pow(norm_kv, 3) + 15 * norm_kv) + (Math.Pow(delta, 4) / 2880) * (Math.Pow(norm_kv, 5) + 44 * Math.Pow(norm_kv, 3) + 183 * norm_kv) + (Math.Pow(delta, 4) / (155520 * sig * sig)) * (9 * Math.Pow(norm_kv, 5) - 284 * Math.Pow(norm_kv, 3) - 1513 * norm_kv));
            res  = Math.Exp(2 * res);
            return(res);
        }
コード例 #4
0
ファイル: TwoRergessions.cs プロジェクト: strorch/mat_stat
        private void button1_Click(object sender, EventArgs e)
        {
            string RESULT = "Результат:\n";
            int    num1   = 0;
            int    num2   = 0;

            try
            {
                num1 = Convert.ToInt32(textBox1.Text);
                num2 = Convert.ToInt32(textBox2.Text);
            }
            catch
            {
                MessageBox.Show("Не введено дані!");
                return;
            }
            var First = _f.ReturnTuple(num1 - 1);
            var Second = _f.ReturnTuple(num2 - 1);
            int N1 = First.Item2, N2 = Second.Item2;

            double[] X1 = new double[N1];
            double[] Y1 = new double[N1];
            double[] X2 = new double[N2];
            double[] Y2 = new double[N2];
            for (int i = 0; i < N1; i++)
            {
                X1[i] = First.Item1[i, 0];
                Y1[i] = First.Item1[i, 1];
            }
            for (int i = 0; i < N2; i++)
            {
                X2[i] = Second.Item1[i, 0];
                Y2[i] = Second.Item1[i, 1];
            }
            double s_zal1 = regression.SzalKvLinear(X1, Y1);
            double s_zal2 = regression.SzalKvLinear(X2, Y2);
            double F;
            double S2 = ((N1 - 2) * s_zal1 + (N2 - 2) * s_zal2) / (N1 + N2 - 4);

            if (s_zal1 >= s_zal2)
            {
                F = s_zal1 / s_zal2;
            }
            else
            {
                F = s_zal2 / s_zal1;
            }
            if (F <= Quantil.QuantilFishera(N1 - 2, N2 - 2))
            {
                RESULT += "\n1)Результат перевірка на збіг залишкових дисперсій позитивний.\n  Статистика F = " + Math.Round(F, 4).ToString() +
                          "\n  Зведена оцінка дисперсії залишків S2 = " + Math.Round(S2, 4).ToString() + "\n";
            }
            else
            {
                RESULT += "\n1)Результат перевірка на збіг залишкових дисперсій негативний.\n  Статистика F = " + Math.Round(F, 4).ToString() + "\n";
            }

            double T = T_stat(X1, Y1, X2, Y2, S2);

            if (Math.Abs(T) <= Quantil.StudentQuantil(X1))
            {
                double B_stat = this.B_stat(X1, Y1, X2, Y2);
                RESULT += "\n2)Результат перевірка на збіг коефіцієнта В позитивний.\n  Статистика Т = " + Math.Round(T, 4).ToString()
                          + "\n  Статистика B = " + B_stat.ToString() + "\n";
                double at_stat = (B_stat - Bnull_stat(X1, Y1, X2, Y2)) / Snull_stat(X1, Y1, X2, Y2, S2);
                if (Math.Abs(at_stat) <= Quantil.StudentQuantil(X1))
                {
                    RESULT += "\n3)Результат перевірка на збіг коефіцієнта A позитивний, \nотже обидві регресійні прямі є ідентичними.\n  Статистика T = "
                              + Math.Round(at_stat, 4).ToString() + "\n";
                }
                else
                {
                    RESULT += "\n3)Результат перевірка на збіг коефіцієнта A негативний.\n  Статистика T = "
                              + Math.Round(at_stat, 4).ToString() + "\n";
                }
            }
            else
            {
                RESULT += "\n2)Результат перевірка на збіг коефіцієнта В негативний.\n  Статистика Т = " + Math.Round(T, 4).ToString() + "\n";
            }
            label3.Text = RESULT;
        }
コード例 #5
0
ファイル: RegrValid.cs プロジェクト: strorch/mat_stat
        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                MessageBox.Show("Не введено значення параметра!");
                return;
            }
            double parametr = 0;
            string RESULT   = "Розв'язання:\n";

            if (linear == true)
            {
                parametr = Convert.ToDouble(textBox1.Text);
                int    N        = X.Length;
                double x_ser    = korelation.ser_ar(X);
                double y_ser    = korelation.ser_ar(Y);
                double sigX     = Math.Sqrt(korelation.dispersion(X));
                double sigY     = Math.Sqrt(korelation.dispersion(Y));
                double kor      = korelation.koef_kor(X, Y);
                double b        = kor * sigY / sigX;
                double a        = y_ser - b * x_ser;
                double S_zal_kv = regression.SzalKvLinear(X, Y);
                double disp_a   = Math.Sqrt(S_zal_kv * (1 / N + x_ser * x_ser / (sigX * sigX * (N - 1))));
                double disp_b   = Math.Sqrt(S_zal_kv) / (sigX * Math.Sqrt(N - 1));
                if (comboBox1.Text == "a")
                {
                    double Tstat = (a - parametr) / disp_a;
                    if (Math.Abs(Tstat) < Quantil.StudentQuantil1(N - 2))
                    {
                        RESULT += "\nПараметр А значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр А не значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    linear = false;
                }
                else if (comboBox1.Text == "b")
                {
                    double Tstat = (b - parametr) / disp_b;
                    if (Math.Abs(Tstat) < Quantil.StudentQuantil1(N - 2))
                    {
                        RESULT += "\nПараметр B значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр B не значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    linear = false;
                }
                else
                {
                    MessageBox.Show("Неправильно вибрано параметри!");
                    linear = false;
                }
            }
            else if (parabolic == true)
            {
                parametr = Convert.ToDouble(textBox1.Text);
                int    N       = X.Length;
                double serX    = korelation.ser_ar(X);
                double serY    = korelation.ser_ar(Y);
                double sigmaX  = Math.Sqrt(korelation.dispersion(X));
                double sigmaY  = Math.Sqrt(korelation.dispersion(Y));
                double koefkor = korelation.koef_kor(X, Y);
                double SOME    = 0;
                for (int i = 0; i < N; i++)
                {
                    SOME += Math.Pow(regression.fi2(X, i), 2);
                }
                SOME = SOME / N;
                double S_zal_kv = Math.Sqrt(regression.SzalKvParabolic(X, Y));
                var    Params = regression.Params(X, Y);
                double BigPart1 = 0, BigPart2 = 0;
                double part2 = 0;
                double part3 = 0;
                double part4 = 0;
                for (int i = 0; i < N; i++)
                {
                    part2 += Math.Pow(X[i], 2);
                    part3 += Math.Pow(X[i], 3);
                    part4 += Math.Pow(X[i], 4);
                }
                double SomeKek = 0;
                for (int i = 0; i < N; i++)
                {
                    SomeKek += (X[i] * X[i] - part2) * (Y[i] - serY);
                }
                SomeKek  = SomeKek / N;
                BigPart1 = (part4 - part2 * part2) * koefkor * sigmaX * sigmaY - (part3 - part2 * serX) * SomeKek;
                BigPart2 = sigmaX * sigmaX * (part4 - part2 * part2) - Math.Pow(part3 - part2 * serX, 2);
                double B = BigPart1 / BigPart2;
                BigPart1 = sigmaX * sigmaX * SomeKek - (part3 - part2 * serX) * koefkor * sigmaX * sigmaY;
                BigPart2 = sigmaX * sigmaX * (part4 - part2 * part2) - Math.Pow(part3 - part2 * serX, 2);
                double C = BigPart1 / BigPart2;
                double A = serY - B * serX - C * part2;
                if (comboBox1.Text == "a")
                {
                    double stat = (Params.Item1 - parametr) * Math.Sqrt(N) / S_zal_kv;
                    if (Math.Abs(stat) <= Quantil.StudentQuantil1(N - 3))
                    {
                        RESULT += "\nПараметр А значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр А не значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    parabolic = false;
                }
                else if (comboBox1.Text == "b")
                {
                    double stat = (Params.Item2 - parametr) * sigmaX * Math.Sqrt(N) / S_zal_kv;
                    if (Math.Abs(stat) <= Quantil.StudentQuantil1(N - 3))
                    {
                        RESULT += "\nПараметр B значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр B не значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    parabolic = false;
                }
                else if (comboBox1.Text == "c")
                {
                    double stat = (Params.Item3 - parametr) * Math.Sqrt(N * SOME) / S_zal_kv;
                    if (Math.Abs(stat) <= Quantil.StudentQuantil1(N - 3))
                    {
                        RESULT += "\nПараметр C значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр C не значущий.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    parabolic = false;
                }
                else if (comboBox1.Text == "Регресія")
                {
                    if (textBox2.Text == "")
                    {
                        MessageBox.Show("Не введено значення!");
                        return;
                    }
                    int    x          = Convert.ToInt32(textBox2.Text) - 1;
                    double inter_disp = (S_zal_kv / Math.Sqrt(N)) * Math.Sqrt(1 + Math.Pow(regression.fi1(X, x) / sigmaX, 2) + Math.Pow(regression.fi2(X, x), 2) / SOME);
                    double stat       = ((A + B * X[x] + C * X[x] * X[x]) - Y[x]) / inter_disp;
                    if (Math.Abs(stat) >= Quantil.StudentQuantil1(N - 3))
                    {
                        RESULT += "\nРегресія в точці Х = " + X[x].ToString() + " значущa.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nРегресія в точці Х = " + X[x].ToString() + " не значущa.\n  Статистика Т = " + Math.Round(stat, 4).ToString() + "\n";
                    }
                    parabolic = false;
                }
                else
                {
                    MessageBox.Show("Неправильно вибрано параметри!");
                    parabolic = false;
                }
            }
            else if (kvazilinear == true)
            {
                parametr = Convert.ToDouble(textBox1.Text);
                int      N    = X.Length;
                double[] NewX = new double[N];
                double[] NewY = new double[N];
                Array.Copy(X, NewX, N);
                Array.Copy(Y, NewY, N);
                for (int i = 0; i < N; i++)
                {
                    if (NewX[i] <= 0 || NewY[i] <= 0)
                    {
                        MessageBox.Show("Неможливо порахувати логарифм!");
                        return;
                    }
                    NewX[i] = 1 / NewX[i];
                    NewY[i] = Math.Log(NewY[i]);
                }
                double x_ser    = korelation.ser_ar(NewX);
                double y_ser    = korelation.ser_ar(NewY);
                double sigX     = Math.Sqrt(korelation.dispersion(NewX));
                double sigY     = Math.Sqrt(korelation.dispersion(NewY));
                double kor      = korelation.koef_kor(NewX, NewY);
                double b        = kor * sigY / sigX;
                double a        = y_ser - b * x_ser;
                double S_zal_kv = regression.SzalKvLinear(NewX, NewY);
                double disp_a   = Math.Sqrt(S_zal_kv * (1 / N + x_ser * x_ser / (sigX * sigX * (N - 1))));
                double disp_b   = Math.Sqrt(S_zal_kv) / (sigX * Math.Sqrt(N - 1));
                if (comboBox1.Text == "a")
                {
                    double Tstat = (a - parametr) / disp_a;
                    if (Math.Abs(Tstat) < Quantil.StudentQuantil1(N - 2))
                    {
                        RESULT += "\nПараметр А значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр А не значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    linear = false;
                }
                else if (comboBox1.Text == "b")
                {
                    double Tstat = (b - parametr) / disp_b;
                    if (Math.Abs(Tstat) < Quantil.StudentQuantil1(N - 2))
                    {
                        RESULT += "\nПараметр B значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    else
                    {
                        RESULT += "\nПараметр B не значущий.\n  Статистика Т = " + Math.Round(Tstat, 4).ToString() + "\n";
                    }
                    linear = false;
                }
                else
                {
                    MessageBox.Show("Неправильно вибрано параметри!");
                    linear = false;
                }
            }
            else
            {
                MessageBox.Show("Неправильно вибрано параметри!");
                return;
            }
            label3.Text = RESULT;
        }
コード例 #6
0
        private void button29_Click(object sender, EventArgs e)
        {/*
          * if (domainUpDown1.Text == "" || domainUpDown2.Text == ""
          || comboBox1.Text == "" || domainUpDown1.Text == domainUpDown2.Text
          || ReturnByName(domainUpDown1.Text) == null
          || ReturnByName(domainUpDown2.Text) == null)
          ||{
          ||    MessageBox.Show("No parameters!");
          ||    return;
          ||}*/
            string RESULT = "";

            if (comboBox1.Text == "Багатовимірні середнi (рівні DC)")
            {
                NNData first  = ReturnByName(domainUpDown1.Text);
                NNData second = ReturnByName(domainUpDown2.Text);

                if (first.Num != second.Num)
                {
                    MessageBox.Show("not equal");
                    return;
                }
                double Vstat = Help.VStatistic(first, second);
                if (Vstat <= Quantil.XIquantil(first.Num))
                {
                    RESULT += "+" + Vstat.ToString() + "\n";
                }
                else
                {
                    RESULT += "-" + Vstat.ToString() + "\n";
                }
                label30.Text = RESULT;
            }
            else if (comboBox1.Text == "k n-вимірних середніх (розбіжні DC)")
            {
                double Vstat = Help.VStatistic(list);
                if (Vstat <= Quantil.XIquantil(list[0].Num))
                {
                    RESULT += "+" + Vstat.ToString() + "\n";
                }
                else
                {
                    RESULT += "-" + Vstat.ToString() + "\n";
                }
                label30.Text = RESULT;
            }
            else if (comboBox1.Text == "збіг DC")
            {
                double Vstat = Help.V2Statistic(list);
                if (Vstat <= Quantil.XIquantil(list[0].Num))
                {
                    RESULT += "+" + Vstat.ToString() + "\n";
                }
                else
                {
                    RESULT += "-" + Vstat.ToString() + "\n";
                }
                label30.Text = RESULT;
            }
            else
            {
                MessageBox.Show("kek");
                return;
            }
        }