2. Regularidad estadística y Frecuencia Relativa

Para que un modelo sea útil, se debe poder realizar predicciones del comportamiento del sistema en el futuro, es decir debe tener un comportamiento regular.

Muchos modelos de probabilidad en ingeniería se fundamentan en los promedios obtenidos en las secuencias de resultados, así las muchas repeticiones o intentos del experimento aleatorio son consistentes y tienden aproximadamente al mismo valor.

Esta es la propiedad de regularidad estadítica.

En el experimento de la urna y pelotas con S={0, 1, 2}, se pueden procesar las muestras del archivo: aleatoriosurna100.txt

muestras = [1,1,1,1,1,2,1,2,2,2,2,0,0,0,0,0,2,1,2,2,
            0,2,0,2,1,2,1,2,2,0,2,0,1,2,0,2,2,0,2,1,
            1,1,1,1,0,2,1,2,1,0,1,0,1,2,0,2,2,2,1,0,
            2,2,0,2,0,2,1,1,0,0,2,1,0,1,0,0,2,1,2,0,
            1,1,2,0,0,0,1,0,2,2,2,0,0,0,1,2,1,1,0,0]

Algoritmo en Python

Para seleccionar los valores únicos de las muestras y contar el número de veces de cada uno se puede usar la instrucción de numpy np.unique

los valores unicos:   [ 0.  1.  2.]
la cuenta de unicos:  [33 31 36]
Nk:
[[  0.  33.]
 [  1.  31.]
 [  2.  36.]]

Instrucciones en Python

# Muestras de una urna con pelotas S=[0,1,2]
# propuesta: edelros@espol.edu.ec
import numpy as np

# INGRESO
# archivotxt=input('nombre del archivo.txt: ')
archivotxt = 'aleatoriosurna100.txt'

# PROCEDIMIENTO
muestras = np.loadtxt(archivotxt)
n = len(muestras)

# cuenta los únicos
[unicos,cuenta] = np.unique(muestras,return_counts=True)

# une en tabla N, y aplica T transpuesta
N = np.asarray((unicos, cuenta)).T 

# SALIDA 
print('los eventos unicos:  ', unicos)
print('la cuenta de unicos: ', cuenta)
print('Nk:')
print(N)

El número de veces que aparece la pelota 0 en el experimento es N0(n)=33,la pelota N1(n)=31 y N2(n)=36.


Frecuencia relativa

La frecuencia relativa de un resultado k, se define como:

f_k(n)=\frac {N_k(n)}{n}

y lo que la regularidad estadística quiere decir es que fk(n) varía siempre acercandose a una constante pk cuando n tiende a ser muy grande.

lim_{n\to\infty} f_k(n) = p_k
# frecuencia relativa
fk  = cuenta/n
fkn = np.asarray((unicos, fk)).T
print(fkn)
[[ 0.    0.33]
 [ 1.    0.31]
 [ 2.    0.36]]

Tarea

Repita el experimento de la urna con n=1000 intentos, y determine las frecuencias relativas de cada pelota. Use el algoritmo de la hoja «modelo de probabilidad» para generar el archivo de aleatorios


Ejercicios

Referencia: Gubner 1.1 p.18

Se lanza una moneda 100 veces, y se anota la frecuencia relativa de las caras (0) y sellos (1). La experiencia nos indica que la frecuencia relativa debería estar alrededor de 0.5. Realice el experimento simulado y compare los resultados.

 caras de moneda: 
[0 0 1 1 1 0 0 1 0 1 0 0 0 0 0 0 0 0 1 0 
 1 0 1 1 1 0 0 1 1 0 1 1 1 0 1 0 0 1 1 1 
 0 0 1 0 1 0 1 0 0 1 0 0 1 0 0 0 0 1 0 1
 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 1 1
 0 1 1 0 0 1 0 0 0 1 0 0 1 1 1 0 0 1 1 1]
frecuencia relativa:
[[ 0.    0.55]
 [ 1.    0.45]]

# Simulador de lanza monedas [0,1]
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
intentos = 100
eventos  = 2

# PROCEDIMIENTO
# lanza moneda
caramoneda = np.random.randint(eventos,size=intentos)
# cuenta los únicos
[unicos, cuenta] = np.unique(caramoneda,return_counts=True)

# frecuencia relativa
fk  = cuenta/intentos

# une en tabla fkn, y aplica T transpuesta
fkn = np.asarray((unicos, fk)).T 

# SALIDA
print(' caras de moneda: ')
print(caramoneda)
print('frecuencia relativa:')
print(fkn)

# grafica pmf
plt.plot(caramoneda,'o--')
plt.xlabel('intentos')
plt.ylabel('caramoneda')
plt.margins(0.1)
plt.show()

Ejercicio

Referencia: Gubner 1.2 p.18, Leon-García pdf/p.21

Un experimento por si mismo es lanzar una moneda 100 veces y guardar las frecuencias relativas de cada caras.

Dado que el numero de caras puede estar en el rango entre 0 y 100, hay 101 posibilidades de respuesta.

Realice el experimento anterior 1000 veces y almacene la frecuencia relativa para cada experimento. Muestre los resultados.

# Simulador de lanza monedas [0,1]
# Ejercicio: Gubner 1.2 p.18, Leon-García pdf/p.21
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
experimentos = 1000
intentos = 100
eventos  = 2

# PROCEDIMIENTO
# Para cada experimento
resultado = np.zeros(shape=(experimentos,eventos),dtype=int)
for i in range(0,experimentos):
    
    # lanza moneda
    caramoneda = np.random.randint(eventos,size=intentos)
    n=len(caramoneda)
    [unicos, cuenta] = np.unique(caramoneda,return_counts=True)
    
    # resultado de cada experimento
    for j in range(0,eventos):
        resultado[i][j] = cuenta[j]

# Frecuencias relativas por evento
s = np.arange(eventos)
fr_cuenta = []
fr_unicos = []
for evento in s:
    unevento = resultado[:,evento]
    [unicos,cuenta] = np.unique(unevento,return_counts=True)
    fr_cuenta.append(cuenta)
    fr_unicos.append(unicos)

# SALIDA - gráfica
for evento in s:
    plt.plot(fr_unicos[evento]/100,fr_cuenta[evento],label=str(evento))
plt.xlabel('frecuencia relativa')
plt.legend()
plt.show()

Tarea

Escriba sus observaciones en el ejercicio anterior, cambiando el número de intentos en el rango de [10, 100000].

Referencia: Leon-García 1.3 p.5, Gubner p.3