Ejemplo n.º 1
0
        private void btnGenerateCong_Click(object sender, EventArgs e) //Boton para generar los números por el método congruencial y hacer el test de chi cuadrado (3° tab)
        {
            if (string.IsNullOrEmpty(this.txtSeedCong.Text) || string.IsNullOrEmpty(this.txtACong.Text) ||
                string.IsNullOrEmpty(this.txtCCong.Text) || string.IsNullOrEmpty(this.txtMCong.Text) || string.IsNullOrEmpty(this.txtQuantityCong.Text) ||
                (Convert.ToInt32(this.txtQuantityCong.Text) <= 0) || string.IsNullOrEmpty(this.txtIntervalQuantityRandomCon.Text))
            {
                MessageBox.Show("Ingrese todos los campos necesarios.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                if (this.txtSeedCong.Text == "0" || this.txtMCong.Text == "0")
                {
                    MessageBox.Show("Los parámetros 'Semilla' o 'M' no pueden tener valor 0. Intente nuevamente.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                int subInt = Convert.ToInt32(this.txtIntervalQuantityRandomCon.Text);

                if (subInt <= 1 || subInt > 101)
                {
                    MessageBox.Show("La cantidad de subintervalos debe estar entre los valores permitidos (2 - 100).", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

                else
                {
                    btnValorNuevo.Enabled = true;
                    generator.seed        = Convert.ToDecimal(this.txtSeedCong.Text);
                    generator.a           = Convert.ToDecimal(this.txtACong.Text);
                    generator.c           = Convert.ToDecimal(this.txtCCong.Text);
                    generator.M           = Convert.ToDecimal(this.txtMCong.Text);
                    int q = Convert.ToInt32(this.txtQuantityCong.Text);

                    this.txtGeneratedNums.Text = "";
                    rndList.Clear();
                    GenerateRandomCongruential(q);

                    //Ya generé los números empieza el test de chi cuadrado.
                    ChiCuadrado chi2      = new ChiCuadrado();
                    Intervalo[] intervals = new Intervalo[subInt];
                    intervals = chi2.getFrequencies(rndList, subInt);

                    double c      = chi2.calcEstadistico(intervals, q);
                    int    v      = subInt - 1; //No se resta m porque es 0 en este caso.
                    double tabChi = chi2.getCriticalValue(v);

                    this.txtSumChiCong.Text = c.ToString();
                    this.txtTabChiCong.Text = tabChi.ToString();

                    if (c <= tabChi)
                    {
                        this.txtResultChiCong.Text = "No se rechaza la hipótesis nula.";
                    }
                    else
                    {
                        this.txtResultChiCong.Text = "Se rechaza la hipótesis nula";
                    }


                    this.chartCongruential.Series["Freq observada"].Points.Clear();
                    this.chartCongruential.Series["Freq esperada"].Points.Clear();
                    this.dgvCongruential.Rows.Clear();
                    decimal sum = 0;
                    foreach (Intervalo interval in intervals)
                    {
                        string  intervalStr = interval.ToString();
                        int     waitedFreq  = (int)(rndList.Count / intervals.Length);
                        decimal col4        = (decimal)Math.Round(Math.Pow(interval.contador - waitedFreq, 2), 4);
                        decimal col5        = Math.Round(col4 / waitedFreq, 4);
                        sum += col5;
                        // Agrego points de grafico de frecuencia observada
                        this.chartCongruential.Series["Freq observada"].Points.AddXY(
                            intervalStr,
                            interval.contador
                            );
                        // Agrego points de grafico de frecuencia esperada
                        this.chartCongruential.Series["Freq esperada"].Points.Add(waitedFreq);
                        // Agrego fila a la tabla
                        this.dgvCongruential.Rows.Add(
                            intervalStr,
                            interval.contador,
                            waitedFreq,
                            col4,
                            col5,
                            sum
                            );
                    }
                }
            }
        }
Ejemplo n.º 2
0
        private void btnGenerateRandom_Click(object sender, EventArgs e)
        {
            if (String.IsNullOrEmpty(this.txtQuantityRandom.Text) || String.IsNullOrEmpty(this.txtIntervalQuantityRandom.Text))
            {
                MessageBox.Show("Debe llenar los parámetros obligatorios antes de generar.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int subInt = Convert.ToInt32(this.txtIntervalQuantityRandom.Text);

                if (subInt <= 1 || subInt > 101)
                {
                    MessageBox.Show("La cantidad de subintervalos debe estar entre los valores permitidos (2 - 100).", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    int q = Convert.ToInt32(this.txtQuantityRandom.Text);
                    subInt = Convert.ToInt32(this.txtIntervalQuantityRandom.Text);
                    rndList.Clear();
                    GenerateRandom(q);

                    ChiCuadrado chi2      = new ChiCuadrado();
                    Intervalo[] intervals = new Intervalo[subInt];
                    intervals = chi2.getFrequencies(rndList, subInt);

                    double c      = chi2.calcEstadistico(intervals, q);
                    int    v      = subInt - 1; //No se resta m porque es 0 en este caso.
                    double tabChi = chi2.getCriticalValue(v);

                    this.txtObtainedSChiSum.Text = c.ToString();
                    this.txtTabuledChi.Text      = tabChi.ToString();

                    if (c <= tabChi)
                    {
                        this.txtRtaRandom.Text = "No se rechaza la hipótesis nula.";
                    }
                    else
                    {
                        this.txtRtaRandom.Text = "Se rechaza la hipótesis nula";
                    }


                    this.chartFreqRandom.Series["Freq observada"].Points.Clear();
                    this.chartFreqRandom.Series["Freq esperada"].Points.Clear();
                    this.dgvChiRandom.Rows.Clear();
                    decimal sum = 0;
                    foreach (Intervalo interval in intervals)
                    {
                        string  intervalStr = interval.ToString();
                        int     waitedFreq  = (int)(rndList.Count / intervals.Length);
                        decimal col4        = (decimal)Math.Round(Math.Pow(interval.contador - waitedFreq, 2), 4);
                        decimal col5        = Math.Round(col4 / waitedFreq, 4);
                        sum += col5;
                        // Agrego points de grafico de frecuencia observada
                        this.chartFreqRandom.Series["Freq observada"].Points.AddXY(
                            intervalStr,
                            interval.contador
                            );
                        // Agrego points de grafico de frecuencia esperada
                        this.chartFreqRandom.Series["Freq esperada"].Points.Add(waitedFreq);
                        // Agrego fila a la tabla
                        this.dgvChiRandom.Rows.Add(
                            intervalStr,
                            interval.contador,
                            waitedFreq,
                            col4,
                            col5,
                            sum
                            );
                    }
                }
            }
        }