1 votos

La probabilidad de las pruebas simuladas no converge con la probabilidad teórica

Premisa: La persona A elige cinco letras (sin repeticiones) del alfabeto inglés estándar (26 letras). Se pide a otras seis personas (personas B-G) que elijan independientemente (escribiendo en privado en un papel) una letra del alfabeto. Como estas elecciones son independientes, es posible que haya repeticiones en este conjunto.

La tarea consiste en calcular la probabilidad de que al menos una de las personas B-G haya elegido una letra que coincida con una de las letras elegidas por la persona A.

Teóricamente, ya que esta probabilidad debería ser igual al complemento de la probabilidad de que ninguna de las personas B-G eligiera una letra coincidente:

P(al menos una coincidencia en 6 intentos) = 1 - P(ninguna coincidencia en seis intentos) = 1 - (6C6) * P(no obtener una coincidencia en un solo intento)^6 = 1- 1 * (21/26)^6 = 0.7224

Me propuse generar un millón de ensayos aleatorios simulados para examinar la probabilidad empírica, con la esperanza de que se acercara a la probabilidad teórica calculada anteriormente. Mi procedimiento fue el siguiente:

  1. Para simular la acción de la persona A, se utilizó MATLAB para generar un millón de ensayos de cinco números aleatorios únicos entre el 1 y el 26, ambos inclusive:

for i=1:1000000 data1(i,:)=randperm(26,5); end

  1. Para simular las acciones de las personas B-G, volví a utilizar MATLAB para generar un millón de ensayos de seis números aleatorios (sin restricción de número único) entre 1 y 26, ambos inclusive:

data2 = randi([1 26],1000000,6);

  1. He comprobado la calidad de los datos, he comprobado que se cumplían todas las restricciones y los he exportado a Excel, emparejando cada ensayo del conjunto de datos uno con un ensayo del conjunto de datos dos.

  2. Observando que las selecciones de letras de la persona A se almacenan en las columnas A-E de Excel, y las selecciones de las personas B-G se almacenan en las columnas G-L (omitiendo la columna F como divisor), creé una columna en Excel que utilizaba la siguiente lógica para examinar cada fila:

=IF(OR(A1=G1,A1=H1,A1=I1,A1=J1,A1=K1,A1=L1,B1=G1,B1=H1,B1=I1,B1=J1,B1=K1,B1=L1,C1=G1,C1=H1,C1=I1,C1=J1,C1=K1,C1=L1,D1=G1,D1=H1,D1=I1,D1=J1,D1=K1,D1=L1,E1=G1,E1=H1,E1=I1,E1=J1,E1=K1,E1=L1),1,0)

NOTA: el código anterior ha sido editado según el comentario de user:lulu

  1. Una vez más, he comprobado la calidad de los resultados. Si una o más de las selecciones de B-G de una persona coincidían, la columna de análisis (columna M) mostraba un "1". En caso contrario, aparecía un cero. Funciona como es debido.

  2. Para calcular la probabilidad empírica, he realizado el siguiente cálculo en una celda aparte:

=SUM(M:M)/COUNT(M:M)

Para mi decepción, el valor era 0,67155. Repetí toda la simulación siete veces más y acabé con valores de {0,67149, 0,67161, 0,67131, 0,67092, 0,67190, 0,67116 y 0,67126}. Esto parece sugerir que la probabilidad está convergiendo a algún lugar justo por encima de 0,67.

NOTA: con la edición anterior en el paso 4, para un conjunto de pruebas, he vuelto a calcular a 0,6783. Más cerca, pero todavía fuera.

Mi pregunta es: ¿Esta discrepancia entre las probabilidades teóricas y empíricas se debe a:

  1. ¿Un problema con mi metodología de simulación en el sentido de que representé incorrectamente las premisas de la situación inicial?

  2. ¿Un problema con la metodología de simulación en el sentido de que no he realizado suficientes ensayos? (Tengo dudas sobre esto)

  3. ¿Un problema con la generación de números pseudoaleatorios?

  4. ¿Una evaluación y un cálculo incorrectos de la probabilidad teórica?

  5. ¿Hay algo más que no haya considerado?

Agradecería mucho cualquier sugerencia. Gracias.

1voto

solusipse Puntos 145

No sé por qué no lo haces todo en Matlab (o cómo pasas los datos a Excel, lo que podría introducir errores si no tienes cuidado). En Matlab puro:

rng(1); % Set seed to be able to replicate
n = 1e6;
data1 = zeros(n,5);
for i = 1:n
    data1(i,:) = randperm(26,5);
end
data2 = randi([1 26],n,6);

A continuación, utilizando un doble for bucle para mayor claridad:

s = 0;
v = zeros(5,1);
for i = 1:n
    for j = 1:5
        v(j) = any(data1(i,j)==data2(i,:));
    end
    s = s+any(v);
end
p = s/n

Esto devuelve 0.721587 que es aproximadamente $1-(21/26)^6 = 0.722364062753467...$ . Diferentes semillas iniciales darán lugar a diferentes resultados. El doble for bucle podría ser vectorizado a:

data3 = zeros(n,5);
for i = 1:5
    data3(:,i) = any(bsxfun(@eq,data1(:,i),data2),2);
end
p = sum(any(data3,2))/n

Teniendo en cuenta esto, yo diría que el problema está en tu código de Excel y/o en las filas y columnas que se están utilizando. ¿Has rellenado correctamente la columna M, es decir, los índices se corresponden con la fila correctamente? Es difícil decir más sin ver tu hoja de cálculo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X