Una de las cuestiones a trabajar dentro del cálculo de probabilidades en
bachillerato es el de aprender a tipificar variables y a usar la tabla
de la distribución normal. El ejercicio que se propone tiene ese
objetivo. De las posibles alternativas existentes con librerías de
python (por ejemplo se podría haber usado scipy.stats) he optado por
usar solo sympy y para hacer los gráficos se hace uso de matplotlib.
Modificando el fichero LyX/pythontex propuesto podemos cambiar el
enunciado o los apartados resueltos para resolver problemas en los que
se pida calcular probabilidades de forma directa o manejar de forma
inversa la tabla de la normal estándar.
Un enunciado posible del problema que vamos a resolver es:
Ejercicio
Sabemos que el peso del alumnado de este centro escolar siguen una
distribución normal de media 60 kg y de desviación típica
8 kg.
¿Cuál es la probabilidad de que una persona, elegida al azar, pese
menos de 64.3 kg?
¿Cuál es la probabilidad de que una persona, elegida al azar, pese
más de 64.3 kg?
¿Cuál es la probabilidad de que una persona, elegida al azar, pese
menos de 58.5 kg?
¿Cuál es la probabilidad de que una persona, elegida al azar, pese
más de 58.5 kg?
¿Y de que tenga un peso comprendido entre 58.5 y
64.3 kg?
Determinar el peso de forma que el 23.81% del alumnado
tenga un peso superior a ese.
Determinar el peso de forma que el 71.31% del alumnado
tenga un peso inferior a ese.
Determinar el peso de forma que el 24.98% del alumnado
tenga un peso inferior a ese.
Determinar el peso de forma que el 65.54% del alumnado
tenga un peso superior a ese.
Si el centro tiene unos 500 alumnos, ¿qué número de
alumnos cabe esperar que tengan un peso inferior a 64.3 kg?
Los datos de entrada para construir el ejercicio anterior y su solución
se obtienen a partir de:
#redondeo
r=4
#Media y desviación típica de la normal
me=60
dt=8
#Valores de la primera parte: cálculos de probabilidades
#debe ser un valor menor que la media
x1=58.5
#debe ser un valor mayor que la media
x2=64.3
#porcentaje de alumnado con peso superior a
#debe ser un valor mayor que la media
x3=65.7
#porcentaje de alumnado con peso inferior a
#debe ser un valor mayor que la media
x4=64.5
#porcentaje de alumnado con peso inferior a
#debe ser un valor menor que la media
x5=54.6
#porcentaje de alumnado con peso superior a
#debe ser un valor menor que la media
x6=56.8
#Tamaño de la población
n=500
Los gráficos creados para representar las campanas de Gauss se realizan
con dos funciones, solo pondré aquí el código de la primera ya que el
código de la segunda es muy parecido a este y se puede consultar en el
fichero fuente:
#Función que dibuja el área en una normal 0,1,
# es fácil cambiarla para cualquier tipo de normal
def dibuja_normal(x, cond, titulo, nombre):
Z = Normal('Z', 0, 1)
y = [N(density(Z)(i)) for i in x]
z = x[cond]
zf= np.array([density(Z)(i) for i in z],dtype=float)
fig, ax = plt.subplots(figsize=(2.25,1.5))
# Mueve los ejes izquierdo y de abajo a x = 0 e y = 0 respectivamente.
ax.spines["left"].set_position(("data", 0))
ax.spines["bottom"].set_position(("data", 0))
# Oculta los ejes de arriba y de la derecha.
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
#Quito las marcas del eje y
ax.set_yticks([])
#Dibujamos la normal
ax.plot(x, y)
#Dibujamos el área
ax.fill_between(z, 0, zf)
#Se pone el título
ax.set_title(titulo)
#Se guarda la imagen
fig.savefig(nombre)
plt.close()
A partir de los valores de entrada anteriores, la solución del problema
que se obtiene es:
Nos piden el valor de x0 de manera que
P(X>x0)=0.2381. Si tipificamos obtenemos que:
P(X>x0)=P(8X−60>8x0−60)=P(Z>z0)=0.2381
donde z0=8x0−60
P(Z>z0)=0.2381⇔P(Z≤z0)=1−P(Z>z0)=1−0.2381=0.7619
mirando en la tabla:
z0=0.7125 y de la ecuación
z0=8x0−60=0.7125⇒x0=65.7
Nos piden el valor de x0 de manera que
P(X<x0)=0.7131. Si tipificamos obtenemos que:
P(X<x0)=P(8X−60<8x0−60)=P(Z<z0)=0.7131
donde z0=8x0−60
P(Z<z0)=0.7131 mirando en la tabla:
z0=0.5625 y de la ecuación
z0=8x0−60=0.5625⇒x0=64.5
Nos piden el valor de x0 de manera que
P(X<x0)=0.2498. Si tipificamos obtenemos que:
P(X<x0)=P(8X−60<8x0−60)=P(Z<z0)=0.2498
donde z0=8x0−60
P(Z<z0)=0.2498⇒z0<0
(al ser esa probabilidad menor que 0.5)
⇒−z0>0
P(Z≤−z0)=P(Z>z0)=1−P(Z≤z0)=1−0.2498=0.7502
mirando en la tabla:
−z0=0.675⇒z0=−0.675 y de la ecuación
z0=8x0−60=−0.675⇒x0=54.6
Nos piden el valor de x0 de manera que
P(X>x0)=0.6554. Si tipificamos obtenemos que:
P(X>x0)=P(8X−60>8x0−60)=P(Z>z0)=0.6554
donde z0=8x0−60
P(Z>z0)=0.6554⇒z0<0
(al ser esa probabilidad mayor que 0.5)
⇒−z0>0
P(Z≤−z0)=P(Z>z0)=0.6554
mirando en la tabla:
−z0=0.4⇒z0=−0.4 y de la ecuación
z0=8x0−60=−0.4⇒x0=56.8
Usaremos la probabilidad que ya hemos obtenido anteriormente, ya
sabemos que P(X<64.3)=0.7045. Por tanto, el
número de personas es 0.7045⋅500=352.3 que redondeado
sale 352.0
Fichero fuente y el pdf final de una posible compilación.