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"; } } } } }
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; }
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); }
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; }
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; }
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; } }