Simulación – Valores Infinitos

Aplicando la prueba de chi-square para el caso de variables aleatorias discretas con un número infinito de valores (m = ∞). En este caso la distribución puede ser geométrica o de Poisson, se utiliza un número infinito de intervalos agrupando algunos de los valores. Se agrupa los valores en intervalos siempre que el total de la probabilidad no exceda las probabilidades de algún otro valor, por lo general se utiliza valores grandes de x.

El total de la probabilidad tendrá un valor cercano o menor a las probabilidades pi de los otros valores i < X, en este procedimiento de cálculo estadístico se cuenta todos los valores empezando por X cómo un valor singular cuya probabilidad es igual a

Por ejemplo con p = 0.8 la distribución geométrica se obtiene:

De esta manera para realizar la prueba de chi-square podemos considerar la distribución de probabilidad con los valores 0, 1, 2 y > 2 con las probabilidades 0.8, 0.16, 0.32 y 0.008 para aplicar el procedimiento estándar de la prueba de chi-square.

Resultado

Implementación

int i = 0;
double sum = 0;

int n = int.Parse(textBox6.Text);
double param1 = double.Parse(textBox1.Text);
double param2 = double.Parse(textBox2.Text);

double p1 = param1;
double p2 = p1 * param2;
double p3 = p2 * param2;
double p4 = 1 - (p1 + p2 + p3);

sum = p1 + p2 + p3 + p4;

double[] e_probabilities = new double[4];
double[] probabilities = new double[4];
double[] experiments = new double[4];
double[] frequency = new double[4];

this.chart1.Series["Series1"].Points.AddXY("1", p1);
this.chart1.Series["Series1"].Points.AddXY("2", p2);
this.chart1.Series["Series1"].Points.AddXY("3", p3);
this.chart1.Series["Series1"].Points.AddXY("4...", p4);

//Expected Value - µ
double xp1 = 1 * p1;
double xp2 = 2 * p2;
double xp3 = 3 * p3;
double xp4 = 4 * p4;

double miu = xp1 + xp2 + xp3 + xp4;

//Variance - µ
double x2p1 = (1*1) * p1;
double x2p2 = (2*2) * p2;
double x2p3 = (3*3) * p3;
double x2p4 = (4*4) * p4;

double variance = x2p1 + x2p2 + x2p3 + x2p4;

variance -= (miu * miu);

experiments[0] = 0;
experiments[1] = 0;
experiments[2] = 0;
experiments[3] = 0;

e_probabilities[0] = xp1;
e_probabilities[1] = xp2;
e_probabilities[2] = xp3;
e_probabilities[3] = xp4;

probabilities[0] = p1;
probabilities[1] = p2;
probabilities[2] = p3;
probabilities[3] = p4;

while (i < n)
{
    // Any value greater than zero, x > 0 | nonnegative integers
    // A countable set of infinite values
    int r = rand.Next(1, Int32.MaxValue);
    
    if (r == 1) experiments[0]++;
    else if (r == 2) experiments[1]++;
    else if (r == 3) experiments[2]++;
    else if (r >= 4) experiments[3]++;
    i++;
}

i = 0;
foreach (var item in experiments)
{
    frequency[i++] = item / n;
}

double e_miu = 1 * frequency[0] +
               2 * frequency[1] +
               3 * frequency[2] +
               4 * frequency[3];

double e_variance = (1 * 1) * frequency[0] +
                    (2 * 2) * frequency[1] +
                    (3 * 3) * frequency[2] +
                    (4 * 4) * frequency[3];

e_variance -= (e_miu * e_miu);

//Errors
double miuError = Math.Abs(e_miu - miu) / Math.Abs(miu);
double varianceError = Math.Abs(e_variance - variance) / Math.Abs(variance);

//Chi
double chi = 0;
double alfa = 0.05;

for (i = 0; i < 4; i++)
{
    chi += Math.Pow((frequency[i] - probabilities[i]), 2) / probabilities[i];
}
textBoxAverage.Text = miu.ToString("0.000") + " (error = "+ Math.Round((miuError * 100)).ToString() + "%)";
textBoxVariance.Text = variance.ToString("0.000") + " (error = " + Math.Round((varianceError * 100)).ToString() + "%)";

labelChi.Text = "Chi-squared: \r\n" + chi.ToString("0.000") + " > " + alfa.ToString("0.000") + " ( " + ((chi > alfa) ? "YES" : "FALSE") + " )";

Descargar Proyecto