Geométrica pmf

Referencia: Gubner p.74, León-García p.102

Variable aleatoria Geométrica

Para 0 ≤ p < 1, se define como una variable aleatoria geométrica1 que inicia en 1 o estandarizada como:

P(X=k) = (1-p)^{k-1}p k= 1,2,...

Este tipo de variable se usa cuando se pregunta cuántos intentos se requieren de un experimento hasta que se obtenga un resultado específico.

ejemplo de una distribución geométrica1(p), p=0.3

# Distribución geométrica con valor p
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# INGRESO
n = 9 
p = 0.3
media = 0

# PROCEDIMIENTO
k  = np.arange(media-1, n+1)
px = stats.geom.pmf(k,p,media)

# SALIDA
print('k: ', k)
print('p(k):', px)

# grafica
plt.title('Uniforme rango hasta n='+str(n))
plt.stem(k,px)
plt.xlabel('k')
plt.margins(0.1)
plt.show()
k:    [-1  0  1  2  3  4  5  6  7  8  9]
p(k): [ 0.         0.          0.3       0.21
        0.147      0.1029      0.07203   0.050421
        0.0352947  0.02470629  0.0172944 ]

Ejemplo

León-García 3.9 p.102
Sea X el número de veces que un mensaje tienen que ser transmitido hasta que sea recibido correctamente en el receptor. Encuentre la pmf de X y la probabilidad que X sea un número par.

X es un variable aleatoria discreta, que toma valores de Sx ={1,2,3,…}. El Evento {X=k} sucede si el experimento principal encuentra las K-1 transmisiones consecutivas con error o fallas seguidas de una sin error o éxito.

p_x(k)= P[X=k] = P[00...01] = (1-p)^{k-1}p = q^{k-1}p \text{para k=1,2,...}

Se puede indicar que X tiene una distribución geométrica.

En la ecuación podemos ver que la suma es 1.

P[\text{X es par}] = \sum\limits_{k=1}^{\infty} p_x(2k) = p\sum\limits_{k=1}^{\infty} q^{2k-1} =p\frac{1}{1-1^2} = \frac{1}{1+q}

Ejemplo: Gubner E2.12 p.74.
Cuando una computadora lee un dato , lo hace primero en la memoria intermedia o caché, en caso de no encontrarla, procede a la memoria RAM.
Lectura Memoria Cache o RAM

El dato se encuentra en el cache con probabilidad p.

Encuentre la probabilidad que la primera vez que no se encuentra el dato en la memoria intermedia o caché ocurre en la k-ésisma lectura.

Suponga que la presencia del dato en el caché es independiente en cada lectura.

Solución: Sea T=k si la primera vez que no esta un dato en el cache ocurre en la k-ésima lectura.

Para i=1,2,…,

  • sea Xi =1 si la en la i-ésima lectura el dato está en caché
  • Xi=0 en otro caso

Entonces P( Xi=1) = p y p( Xi=0)=1-p.

La buscado es la primera lectura en que el cache no contiene el dato, es decir la k-ésima lectura, las primeras k-1 tenían el dato en cache.

En términos de eventos:

\{T=k\} = = \{X_1=1\}\cap ...\cap \{ X_{k-1}=1\} \cap \{X_k=0\}

dado que Xi es independiente, y tomando las probabilidades en ambos lados de la ecuación:

P(T=k) = = P(\{X_1=1\}\cap ...\cap \{ X_{k-1}=1\} \cap \{X_k=0\} ) = P(X_1=1) ...P(X_{k-1}=1).P(X_k=0) = p^{k-1}(1-p)

Ejemplo

Gubner E2.13 p.75
Continuando con el ejercicio anterior, ¿Cuál es la probabilidad que la primera lectura fallida en caché sea después de la tercera lectura de memoria?

Solución: Se requiere encontrar:

P(T>3) = \sum\limits_{k=4}^{\infty} P(T=k)

Sin embargo dado que P(T=k) =0 para k≤0, se puede reescirbir en una serie finita:

P(T>3) = 1-P(T \leq 3) = \sum\limits_{k=1}^{3} P(T=k) = 1-(1-p)[1+p+p^2]

Bernoulli pmf

Referencia: Gubner 2.2 p.68, León-García E3.7 p.101

Variable aleatoria discreta Bernoulli

En un experimento enfocado en situación de «éxito» o «fracaso», por ejemplo un equipo que funciona o no. La variable aleatoria Bernoulli IA es igual a 1 si ocurre un éxito en el grupo A y valor cero en otro caso. La función indicador es por ejemplo:

I_A(\omega) = \begin{cases} 0 && ,\omega\text{ no está en A} \\ 1 && , \omega\text{ está en A} \end{cases}

(Revisar modulación Delta-Sigma y la función np.sign(ω))

la distribución de probabilidad pmf toma solo dos valores:

p(k)= \begin{cases} 1-p && , k = 0 \\p &&, k = 1 \end{cases}

Note que p0(0) + p1(1) =1

# Distribución bernoulli con valor p
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as st

# ingreso
n = 3 
p = 0.7
media = 0

# PROCEDIMIENTO
k  = np.arange(media-1, n+1)
px = st.bernoulli.pmf(k,p,media)

# SALIDA
print('k: ', k)
print('p(k):', px)

# grafica
plt.title('bernoulli rango hasta n='+str(n))
plt.stem(k,px)
plt.margins(0.1)
plt.show()
k:  [-1  0  1  2  3]
p(k): [ 0.   0.3  0.7  0.   0. ]


Ejemplo

Las variables aleatorias Bernoulli son buenas para modelar el resultado de un experimento con dos posibles resultados, representados numéricamente como 0 y 1.

  • lanzamiento de una moneda
  • la prueba de un bloque de un disco de computadora bueno o defectuoso
  • si un radar detecta o no una aeronave furtiva
  • si un paquete de Internet se descarta debido a la congestión de un router

Uniforme pmf

Referencia: Gubner 2.2 p.68, León-García E3.7 p.101

Variable aleatoria discreta uniforme

Cuando los resultados de un experimento son igualmente probables o totalmente aleatorios, el modelo se realiza con una variable aleatoria uniforme.

X está distribuida uniformemente si:

P(X=k) = \frac{1}{n} k=1,...,n.

la distribución de probabilidad pmf toma solo dos valores:

p(k)= \begin{cases} \frac{1}{n}, & \text{k=1,...,n} \\0, & \text{en otro caso} \end{cases}

Por ejemplo: el caso de un dado de 6 caras

# Distribución bernoulli con valor p y rango (-1 a 3)
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# INGRESO
n    = 6 
low  = 1
high = low+n

# PROCEDIMIENTO
k = np.arange(low-2, n+2)
p = stats.randint.pmf(k,low,high)

# SALIDA
print('k: ', k)
print('p(k):', p)

# grafica
plt.title('Uniforme rango hasta n='+str(n))
plt.stem(k,p)
plt.margins(0.1)
plt.show()
k:    [-1  0  1  2  3  4  5  6  7]
p(k): [ 0.          0.          0.16666667
        0.16666667  0.16666667  0.16666667
        0.16666667  0.16666667  0.        ]

Ejemplo

Gubner 2.6. Diez teléfonos inalámbricos en la vecindad,
Leon-García 3.7. Generador de números aleatorios

Diez vecinos tienen cada uno un teléfono inalámbrico de la misma marca y modelo. Suponga que el numero de personas que usa el teléfono inalámbrico al mismo tiempo es totalmente aleatorio. Encuentre la probabilidad que más de la mitad de lso teléfonos se encuentran en uso al mismo tiempo.

Para modelar, el número de teléfonos inalámbricos en uso al mismo tiempo tiene una variable aleatoria discreta uniforme X, que puede tomar valores 0, … , 19. Se incluye el cero al considerar que no hay teléfonos en uso.

P(X>5)= \sum\limits_{i=6}^{10} p_x(i) = \sum\limits_{i=6}^{10} \frac{1}{11}=\frac{5}{11}
# Distribución bernoulli con valor p y rango (-1 a 3)
import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# INGRESO
n    = 11 
low  = 0
high = low+n

# PROCEDIMIENTO
k = np.arange(low-2, high+2)
p = stats.randint.pmf(k,low,high)

# mas de la mitad en uso
desde  = n//2 +1
hasta  = n
pdesde = np.sum(p[desde:hasta])

# SALIDA
print('k: ', k)
print('p(k):', p)
print('mas de la mitad p[X>='+str(desde)+']: ',pdesde)

# grafica
plt.title('Uniforme rango hasta n='+str(n))
plt.stem(k,p)
plt.margins(0.1)
plt.show()
k:    [-2 -1  0  1  2  3  4  5  6  7  8  9 10 11 12]
p(k): [ 0.          0.          0.09090909
        0.09090909  0.09090909  0.09090909
        0.09090909  0.09090909  0.09090909
        0.09090909  0.09090909  0.09090909
        0.09090909  0.          0.        ]
mas de la mitad p[X>=6]:  0.454545454545

Distribución de probabilidad de masa pmf

Referencia: Leon-García p.99, Gubner p.67

Variables Aleatorias discretas – Distribución de Probabilidad PMF

Una variable aleatoria discreta X se define como una variable que toma valores de un espacio muestral

Sx = {x1, x2, x3, …}.

Una variable aleatoria discreta finita tiene un espacio muestral finito, es decir:

Sx = {x1, x2, x3, …, xn}.

Si el interes es encontrar las probabilidades de un evento

Ak = {w: X(w) = xk}

La Distribución de probabilidad (Probability mass function pmf) de una variable aleatoria discreta X se define como:

px = P[X = x] = P{w: X(w) = x} para un x real

La distribución de probabilidad (pmf) de px(x) satisface las tres propiedades que se requieren para calcular las probabilidades de los eventos de una variable discreta X:

1. p_x(x) \geq 0 \text{, para todo x}

2. \sum \limits_{x\in S_x}p_x(x) = \sum \limits_{k}p_x(x_k) = \sum \limits_{k}P(A_k) = 1

3. P[X \in B] = \sum \limits_{x\in B} p_x(x) \text{, donde } B \subset S_x

Ejemplo

Gubner 2.5 número de caras en tres lanzamientos de una moneda

Encuentre la distribución de probabilidad (pmf) de X, suponiendo que los lados de la moneda son igualmente probables.

Solución: Del ejemplo desarrollado antes, se obtuvo que:

Sx:  [0 1 2 3]
evento, X(evento)
[0 0 0] 3
[0 0 1] 2
[0 1 0] 2
[0 1 1] 1
[1 0 0] 2
[1 0 1] 1
[1 1 0] 1
[1 1 1] 0

Para calcular px(0) = P(X=0), e indentificando los resultados w que pertenecen al evento {w:X(w)=0} ={111}.

Entonces :

px(0) = P(X=0) = P({111}) = |{111}|/|S| = 1/8

siguiendo el mismo procedimiento:

px(1) = P(X=1) = P({011, 101, 110}) = 3/8

px(2) = P(X=2) = P({001,010,001}) = 3/8

px(3) = P(X=3) = P({000}) = 1/8

lo que permite graficar la distribución de probabilidad

import numpy as np
import matplotlib.pyplot as plt

# INGRESO
# del ejercicio de tres lanzamientos de moneda
X = [3,2,2,1,2,1,1,0]

# PROCEDIMIENTO
[unicos, cuenta] = np.unique(X, return_counts=True)
frelativa = cuenta/len(X)

# SALIDA
print('x:  ', unicos)
print('px: ', frelativa)

# grafica
plt.stem(unicos,frelativa)
plt.title('distribución de probabilidad pmf')
plt.xlabel('x')
plt.ylabel('px(x)')
plt.margins(0.1)
plt.show()
x:   [0 1 2 3]
px:  [ 0.125  0.375  0.375  0.125]

suponga ahora que la probabilidad de salida de una cara es p, y que la cara contraria es (1-p), con lo que se procederia como:

px(0) = P(X=0) = P({111}) = (1-p)3

px(1) = P(X=1) = P({011, 101, 110}) = 3(1-p)2p

px(2) = P(X=2) = P({001,010,001}) = 3(1-p)p2

px(3) = P(X=3) = P({000}) = p3


Distribución de probabilidad del juego de apuestas

León-García E3.6 p.101

Un jugador recibe $1 si el número de caras en tres lanzamientos de una moneda es 2, $8 si el número de caras es 3, pero nada en otro caso. Encuentre la pmf de lo que gana Y.

siguiendo con el ejemplo anterior

dinero = np.arange(8+1)
pgana  = np.zeros(len(dinero),dtype=float)
pgana[8] = frelativa[3]
pgana[1] = frelativa[2]
pgana[0] = np.sum(frelativa[0:2])

# SALIDA
print('Y:  ', dinero)
print('py: ', pgana)

# grafica
plt.stem(dinero,pgana)
plt.title('distribución de probabilidad pmf')
plt.xlabel('x')
plt.ylabel('px(x)')
plt.margins(0.1)
plt.show()
Y:   [ 0 1 2 3 4 5 6 7 8 ]
py:  [ 0.5  0.375  0.  0.  0.  0.  0.  0.  0.125]

Variables Aleatorias Discretas

Referencia: Leon-García p.97, Gubner p.64

Variables Aleatorias

Una variable aleatoria se define como una función que asigna un valor numérico real X(ω) a cada resultado del experimento en un espacio muestral.

Una función es una regla para asignar un valor numérico a cada elemento de un grupo.

La espacio muestral S es el dominio de la variable aleatoria


Ejemplo

Lanzamiento de una moneda

León-García 3.1., Gubner 2.1,

Una moneda se lanza tres veces y se anota la secuencia de caras (0) o sello(1). El espacio muestral para el experimento es

S={000, 001, 010, 011, 100, 101,110, 111}

Sea X el número de caras en tres lanzamientos, X asigna a cada resultado ω en S un número del grupo SX={0,1,2,3}.

Encuentre los valores para X(ω)

# número de caras en lanzamiento de monedas
import numpy as np
import itertools as iter

# INGRESO
posibles     = 2
lanzamientos = 3

# PROCEDIMIENTO
moneda = np.arange(posibles)
n = posibles**lanzamientos

# Espacio muestral de lanzamientos
resultados = list(iter.product(moneda, repeat=lanzamientos))
S = np.asarray(resultados)

# SALIDA - Observación intermedia
print (S)
[[0 0 0]
 [0 0 1]
 [0 1 0]
 [0 1 1]
 [1 0 0]
 [1 0 1]
 [1 1 0]
 [1 1 1]]
# número de caras en cada lanzamiento 
cuenta = []
for experimento in S:
    caras = lanzamientos - np.sum(experimento)
    cuenta.append(caras)
Sx = np.unique(cuenta)

# SALIDA - Observación intermedia
print('Sx: ',Sx)
print('evento, X(evento)')
for i in range(0,n):
    print(S[i],cuenta[i])
Sx:  [0 1 2 3]
evento, X(evento)
[0 0 0] 3
[0 0 1] 2
[0 1 0] 2
[0 1 1] 1
[1 0 0] 2
[1 0 1] 1
[1 1 0] 1
[1 1 1] 0


Ref: Fig 2.2 Gubner


Ejemplo

León-García 3.2. Apuestas

Un jugador paga $1.50 para poder participar en un juego: Se lanza una moneda tres veces y se cuenta el número de caras X. El jugador recibe $1 si X=2 y $8 si X=3, $0 en los otros casos.

Sea Y el premio del jugador, Y es una función de la variable X con resultados relacionados con el espacio muestral del experimento aleatorio (juego)

Y = np.zeros(n, dtype=float)
for i in range(0,n):
    if (cuenta[i]==2):
        Y[i]=1
    if (cuenta[i]==3):
        Y[i]=8
Sy = np.unique(Y)

# SALIDA
print('Sy: ',Sy)
print('evento, X, Y')
for i in range(0,n):
    print(S[i],cuenta[i],Y[i])
Sy:  [ 0.  1.  8.]
evento, X, Y
[0 0 0] 3 8.0
[0 0 1] 2 1.0
[0 1 0] 2 1.0
[0 1 1] 1 0.0
[1 0 0] 2 1.0
[1 0 1] 1 0.0
[1 1 0] 1 0.0
[1 1 1] 0 0.0

Una función de una variable aleatoria, produce otra variable aleatoria.


Ejemplo

León-García 3.3. Apuestas lanzando una moneda
Sea X el número de caras en lel lanzamiento de una moneda.

Encuentre la probabilidad del evento {X=2}.

Encuentre la probabilidad que el jugador gane $8 en el ejemplo anterior.

X(ω)=2 si ω esta en {000,010,001}, por lo que:

P[X=2] = P[{000,010,001}] = P[{000}] + P[{010}] + P[{001}] = 3/8

El evento {Y=8} ocurre solo con el resultado cuando ω = [000], por lo que:

P[Y=8] = P[{000}] = 1/8

1. Experimento, espacio muestral, evento

Referencia: Leon-García 2.1 p21, Gubner 1.1 p.7

Experimento

Un experimento aleatorio es un experimento en que el resultado varia de forma no predecible cuando se repite bajo las mismas condiciones.

Un experimento aleatorio se especifica dado el procedimiento experimental y el grupo de uno o mas medidas y observaciones.

  • Un solo procedimiento, pero con diferentes en las observaciones
  • puede tener mas de una medida u observación
  • las medidas pueden ser valores contínuos
  • pueden ser secuenciales, o una secuencia de experimentos más simples o subexperimentos

Espacio Muestral

Se define como resultado o muestra ζ (zeta griega) de un experimento aleatorio como el resultado que no puede ser descompuesto a partir de otros resultados, o una combinación de ellos.

El espacio muestral S de un experimento aleatorio se define como el grupo de todos los resultados posibles, que se especifican como:

  • Lista de todos los resultados a={0,1,2,3}
  • Mediante una propiedad de los resultados A={x: 0≤x≤3, x es entero}

Un espacio muestral discreto es contable, ejemplo las caras de un dado.
un espacio muestral contínuo es contable infinito o no contable, ejemplo los valores de voltaje de descarga de un capacitor, o el tiempo hasta la primera falla de un equipo.

Algunas veces es conveniente incluir en el espacio muestral el resultado imposible. Ejemplo, incluir que el espacio muestral es un número real positivo para el tiempo antes de la falla de un dispositivo, aunque conocemos que no tiene tiempo de operación infinito.

Eventos

Normalmente no es de interés un resultado, muestra u observación específica, el interés se enfoca más en que ocurra un evento, lo que requiere usar subgrupos de S. Por ejemplo, que el voltaje de una señal sea negativo {señal: -∞ < señal < 0}

Dos eventos de interés especial son: evento de certeza S, y el evento imposible o nulo ∅, que no resultados o nunca ocurre.

Eventos Clase

La teoría de probabilidades usa también lo que se conoce como una clase F con los eventos de interés, que son aquellos a los que se les asigna valores de probabilidad.

Axiomas de probabilidad

Referencia: Leon-García 1.3.3 p.23, Gubner 1.4 p.36, Parsen p.9/pdf.30, Ross p.4

La teoría de probabilidad inicia con un grupo de axiomas que indican las propiedades que los valores de probabilidad deben satisfacer.

Supone que se definieron:

  1. el experimento aleatorio con todos los posibles valores en el espacio muestral S
  2. las clases y subgrupos llamados eventos
  3. cada evento A tiene asignado un valor P[A]

con lo que se satisfacen los AXIOMAS:

  • Axioma I    :  0 ≤ P[A] ≤ 1
  • Axioma II   : P[S] = 1
  • Axioma III  : Si A∩B=∅,  P[A∪B] = P[A] + P[B]

Lo que se expresa como, que la probabilidad siempre es no negativa, que la probabilidad del espacio muestral es 1, que incluye la probabilidad P[∅] que a veces se le denomina «imposible» e igual a 0.

Resultados de los axiomas

Unión de eventos finitos y separados

P\left[ \bigcup\limits_{n=1}^{N} A_n \right] = \sum\limits_{n=1}^{N} P[A_n]

Probabilidad de un complemento

P[A^c] = 1 - P[A]

Evento imposible

P[\varnothing] = 0

Monotonicidad

A \subset B ,\text{ implica } P[A] \leq P[B]

Inclusión – Exclusión

P[A \cup B] = P[A] + P[B] - P[A \cap B]

Propiedades de límites

P \left[ \bigcup\limits_{n=1}^{\infty} A_n \right] = \lim \limits_{N \rightarrow \infty} P\left[ \bigcup\limits_{n=1}^{N} A_n \right] P \left[ \bigcap\limits_{n=1}^{\infty} A_n \right] = \lim \limits_{N \rightarrow \infty} P\left[ \bigcap\limits_{n=1}^{N} A_n \right]

Union bound/countable subadditivity

P \left[ \bigcup\limits_{n=1}^{\infty} A_n \right] \leq \sum \limits_{n=1}^{\infty} P[ A_n]

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

4. Modelos de Probabilidad

Referencia: Leon-García 1.3 p.4

Muchos modelos de señales muestran variaciones impredecibles y un comportamiento aleatorio o probabilístico.

En un experimento aleatorio, repetido sobre las mismas condiciones, entrega resultados que varian de forma poco predecible. Si consideramos realizar un modelos determinístico, encontramos que no es el más apropiado al predecir siempre el mismo resultado.

Experimento aleatorio clásico

http://www.gifsanimados.org/data/media/994/bingo-imagen-animada-0002.gif

En un ánfora se colocan tres pelotas de igual tamaño numeradas con 0, 1 y 2, se agita el ánfora para que no exista un «orden» predeterminado.

Al sacar una pelota cualquiera, no se podría predecir cual será, luego se anota el número de la pelota y se la devuelve al ánfora.

El resultado del experimento, cada vez que se realiza un intento, es un número que pertenece al grupo S={0,1,2}, que formalmente se lo denomina espacio muestral

El resultado del experimento para 20 intentos, se obtiene un vector con los valores siguientes:

modeloprob01.png

Simulación en Python

Para simular el experimento con python, se puede usar el generador de enteros aleatorios np.random.randint().

# Simulador de Urna con pelotas 0,1,2 
# propuesta: edelros@espol.edu.ec
import numpy as np
import matplotlib.pyplot as plt

# INGRESO 
intentos = 20
pelotas  = 3

# PROCEDIMIENTO
aleatorios = np.random.randint(pelotas,size=intentos)

# SALIDA
print(aleatorios)

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

# SALIDA - ARCHIVO
archivotxt = 'aleatoriosurna.txt'
np.savetxt(archivo, aleatorios, fmt='%d ')
print(' ... archivo: '+archivotxt+' guardado ...')

Revise la aplicación codificar a morse

Ahora, revise el resultado obtenido al codificar un mensaje cualquiera en morse, y realice sus observaciones:

codigo morse :
'. ... .--. --- .-.. .. -- .--. ..- .-.. ... .- 
 -. -.. --- .-.. .- ... --- -.-. .. . -.. .- -..
 -.. . .-.. -.-. --- -. --- -.-. .. -- .. . -. -
 --- ' 
  1. ¿Cuál sería el conjunto posible de resultados?
  2. defina el espacio muestral S

Señal Componentes

Si diseña un equipo para transmitir el tono «la» de 440Hz, debe tomar en cuenta que no siempre es posible obtener una expresión matemática «sencilla» de una señal.

Escuche los siguientes sonidos, vea sus gráficas y realice sus observaciones:

440Hz_44100Hz_16bit_05sec.wav

440Hz_piano.wav

440Hz_violin_A4.wav

senal440Hz_pianoviolin

        • Proponga algunas expresiones matemáticas para cada una de las graficas mostradas.
        • ¿Que tienen en común cada una de las señales?
        • ¿Que tienen de diferente?

Algoritmo en Python

Para obtener la gráfica de los sonidos, se leen los datos y frecuencias de muestreo de cada uno de los archivos.wav

# Señales analógicas
import numpy as np
import matplotlib.pyplot as plt
import scipy.io.wavfile as waves

# INGRESO
archivo1 = '440Hz_44100Hz_16bit_05sec.wav'
[muestreo1, sonido1] = waves.read(archivo1)

archivo2 = '440Hz_piano.wav'
[muestreo2, sonido2] = waves.read(archivo2)

archivo3 = '440Hz_violin_A4.wav'
[muestreo3, sonido3] = waves.read(archivo3)

# SALIDA - Observacion intermedia
print('archivo, frecuencia , dimensiones:')
print('sonido1: ', muestreo1, np.shape(sonido1))
print('sonido2: ', muestreo2, np.shape(sonido2))
print('sonido3: ', muestreo3, np.shape(sonido3))

con lo que se obtiene:

archivo, frecuencia , dimensiones:
sonido1:  44100 (220500,)
sonido2:  11025 (16538,)
sonido3:  22050 (98160,)

Nota: si el archivo.wav tiene etiquetas, se descartan para el ejercicio. por lo que se presenta una advertencia «WavFileWarning».

c:\python34\lib\site-packages\scipy\io\wavfile.py:179: WavFileWarning: Chunk (non-data) not understood, skipping it.
  WavFileWarning)

Se observa que:

  • todos los «sonidos» son monofónicos,
  • las frecuencias de muestreo de cada archivo son diferentes
  • las dimensiones de cada «sonido» o cantidad de muestras indican una duración diferente

Se recomienda escuchar nuevamente cada sonido y decidir el intervalo de observación para las gráficas. Se propone usar una ventana de observación o fragmento desde de los 1.2 segundos por 11 milisegundos.

Se extraen los fragmentos de cada sonido y se determinan los tiempos a los que corresponden basados en cada dt, con lo que se grafican los fragmentos.

# PROCEDIMIENTO
# ventana de observación
inicia  = 1.2
termina = 1.211
canal   = 0

# Extraen los fragmentos de sonido
dt1 = 1/muestreo1
t1  = np.arange(inicia,termina,dt1)
muestras   = len(t1)
fragmento1 = sonido1[int(inicia/dt1):int(inicia/dt1)+muestras]

dt2 = 1/muestreo2
t2  = np.arange(inicia,termina,dt2)
muestras   = len(t2)
fragmento2 = sonido2[int(inicia/dt2):int(inicia/dt2)+muestras]

dt3 = 1/muestreo3
t3  = np.arange(inicia,termina,dt3)
muestras  = len(t3)
fragmento3 = sonido3[int(inicia/dt3):int(inicia/dt3)+muestras]

# SALIDA
# grafica
plt.subplot(311)
plt.plot(t1,fragmento1)
plt.ylabel('sonido1(t)')

plt.subplot(312)
plt.plot(t2,fragmento2)
plt.ylabel('sonido2(t)')

plt.subplot(313)
plt.plot(t3,fragmento3)
plt.ylabel('sonido3(t)')
plt.xlabel('t segundos')

plt.show()

senal440Hz_pianoviolin
Una vez obtenidas las gráficas, realice observaciones adicionales a cada una de las señales de sonido:
1.
2.
3.

Pregunta:
Para la nota musical «la», ejecutada en un violin tradicional tradicional de madera, ¿tendrá la misma forma de señal siempre?.

Considere las siguientes situaciones:
a. Tocada por diferentes músicos
b. en diferentes lugares
c. en diferentes días


Tarea

Buscar la nota «La» en otros instrumentos en formato.wav. De ser necesario realizar observaciones adicionales.

Referencia: Lathi 1.3.2 pdf/p.63, Estándar ISO16, Frecuencias de afinación de un piano