Probabilidad y Estadistica con Python

Técnicas de conteo:

Las técnicas de conteo son aquellas que son usadas para enumerar eventos dicíciles de cuantificar.

  • combinaciones

  • permutaciones

  • diagramas de árbol

Principio fundamental de conteo

Si una operación puede realizarse en $n_1$ formas y si por cada una de éstas, una segunda opercaión puede llevarse a cabo en $n_2$ formas, entonces las dos operaciones pueden realizarse jutas en $n_1 n_2$ formas.

Conceptos

  • Definimos una permutación como un reacomode de objetos.

  • Es todo arreglo de elementos en donde nos interesa el lugar o posición que ocupa cada uno de los elementos que constituyen dicho arreglo.

  • El orden o la forma en que se asignan las funciones sí importa.

Factorial

La función factorial se denota como $n!$, se utiliza en las permutaciones y combinaciones.

El factorial de un entero positivo $n$, el factorial de $n$ o $n$ factorial se define en principio como el producto de todos los números enteros positivos desde 1 (es decir, los números naturales) hasta n.

La función factorial es formalmente definida mediante el producto:

$n! = 1 \times 2 \times 3 \times ... \times n$

La multiplicación anterior se puede simbolizar también utilizando el operador productorio:

$n!=\prod_{k=1}^n k \!$

Ejemplo:

$7! = 1 \times 2 \times 3 \times 4 \times 5 \times 6 \times 7 = 5040$


In [1]:
1*2*3*4*5*6*7


Out[1]:
5040

In [2]:
def producto(secuencia):
    prod = 1
    for n in secuencia:
        prod *= n
    return prod


def factorial_prod(n):
    return producto(range(1, n+1))


factorial_prod(7)


Out[2]:
5040

También es posible definirlo mediante la relación de recurrencia:

$$ n! = \begin{cases} 1 & \text{si } n = 0, \\ (n-1)!\times n & \text{si } n > 0 \end{cases}$$

In [3]:
def factorial_rec(n):
    if n == 0:
        return 1
    elif n > 0:
        return factorial_rec(n-1) * n
    

factorial_rec(7)


Out[3]:
5040

Permutaciones

Una permutación es la variación del orden o de la disposición de los elementos de un conjunto.

Por ejemplo, en el conjunto $\{1, 2, 3\}$, cada ordenación posible de sus elementos, sin repetirlos, es una permutación. Existe un total de 6 permutaciones para estos elementos: $\{(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1) \}$


In [4]:
import itertools as it


conjunto = [1, 2, 3]
r = 3
permutaciones = list(it.permutations(conjunto, r))

def imprimir(secuencia):
    for elemento in secuencia:
        print(elemento)
        
        
print('Total de permutaciones: %s\n' % len(permutaciones))
imprimir(permutaciones)


Total de permutaciones: 6

(1, 2, 3)
(1, 3, 2)
(2, 1, 3)
(2, 3, 1)
(3, 1, 2)
(3, 2, 1)

Cuando $n$ y $r$ son enteros positivos y $r\leq n$ (de lo contrario no se puede realizar)

$nPr = \frac{n!}{(n-r)!} \text{si } 0 \leq r \leq n$

Donde:

  • $P$ es permutación de.

  • $r$ es parte del conjunto de elementos.

  • $n$ es el total de los elementos del conjunto.

Cuando $r$ es igual a $n$ (es decir, cuando se trata de permutar todos los $n$ objetos) la fórmula se reduce a:

$nPn = n!$

Ya que $0! = 1$

Ejemplo:

¿Cuantas representaciones deiferenes serán posibles formar, si se desea que consten de Presidente, Secretario, Tesorero, Primer Vocal y Segundo Vocal?, sí esta representación puede ser formada de entre 25 miembros del sindicato de una pequeña empresa.

Por principio multiplicativo
$$25·24·23·22·21= 6,375,600$$

maneras de formar una representación de este sindicato que consiste de presidente, secretario, etc.

Por formula:

$n = 25$; $r=5$

$25P5 = \frac{25!}{(25-5)!} = \frac{25!}{20!} = \frac{(25·24·23·22·21·...·1)}{(20·19·18·...·1)} = 6,375, 600$


In [5]:
# Seleccionar implementación de "factorial" a utilizar:
#f = factorial_prod
f = factorial_rec

def nPr(n, r):
    if 0 <= r <= n:
        return f(n) / f(n-r)
    else:
        return 0


nPr(25, 5)


Out[5]:
6375600.0

Combinaciones

Tenemos una colección de $n$ objetos. Donde una combinación de estos $n$ objetos, tomados $r$ a la vez, es cualquier selección de $r$ objetos, donde el orden no cuenta. Es decir, una combinación $r$ de un conjunto de $n$ objetos es cualquier subconjunto de $r$ elementos.

$(^n_r) = \frac{n!}{r!(n-r)!} \text{si } 0 \leq r \leq n$


In [6]:
combinaciones = list(it.combinations(conjunto, r=2))

print('Total de combiaciones: %s\n' % len(combinaciones))
imprimir(combinaciones)


Total de combiaciones: 3

(1, 2)
(1, 3)
(2, 3)

Encuetre el numero $m$ de combinaciones de 3 comites que pueden formarse con 8 personas:

$m = C(n, r) = C(8, 3) = (nCr) = (^8_3) = \frac{8·7·6}{3·2·1}=\frac{336}{6}=56$


In [7]:
def nCr(n, r):
    if 0 <= r <= n:
        return f(n) / (f(n-r)*f(r))
    else:
        return 0
    
    
nCr(8, 3)


Out[7]:
56.0

Ejemplo:

  • Las combinaciones de las letras A, B, C y D tomadas en grupos de a 3 son:

In [8]:
conjunto = ['A', 'B', 'C', 'D']
permutaciones = list(it.permutations(conjunto, r))
combinaciones = list(it.combinations(conjunto, r))

imprimir(permutaciones)


('A', 'B', 'C')
('A', 'B', 'D')
('A', 'C', 'B')
('A', 'C', 'D')
('A', 'D', 'B')
('A', 'D', 'C')
('B', 'A', 'C')
('B', 'A', 'D')
('B', 'C', 'A')
('B', 'C', 'D')
('B', 'D', 'A')
('B', 'D', 'C')
('C', 'A', 'B')
('C', 'A', 'D')
('C', 'B', 'A')
('C', 'B', 'D')
('C', 'D', 'A')
('C', 'D', 'B')
('D', 'A', 'B')
('D', 'A', 'C')
('D', 'B', 'A')
('D', 'B', 'C')
('D', 'C', 'A')
('D', 'C', 'B')

In [9]:
imprimir(combinaciones)


('A', 'B', 'C')
('A', 'B', 'D')
('A', 'C', 'D')
('B', 'C', 'D')

In [10]:
print('Total de permutaciones: {0}\n'
      'Total de combinaciones: {1}'.format(len(permutaciones),
                                           len(combinaciones)))


Total de permutaciones: 24
Total de combinaciones: 4

Ejercicio:

Un agricultor cpmpra 3 vacas, 2 cerdos, y 4 galllinas a una persone que tiene 6 vacas, 5 cerdos y 8 gallinas

¿Cuantas opciones tiene a escojer el agricultor?

$(^6_3)(^5_2)(^8_4) = (20)(10)(70) = 14,000$


In [11]:
vacas = nCr(6, 3)
cerdos = nCr(5, 2)
gallinas = nCr(8, 4)
total = vacas * cerdos * gallinas

print('   vacas = {0}\n'
      '  cerdos = {1}\n'
      'gallinas = {2}\n\n'      
      '   total = {3}'.format(vacas,
                              cerdos,
                              gallinas,
                              total))


   vacas = 20.0
  cerdos = 10.0
gallinas = 70.0

   total = 14000.0

Producto Cartesiano de Conjuntos

En matemáticas, el producto cartesiano de dos o mas conjuntos es una operación que resulta en otro conjunto cuyos elementos son todos los pares ordenados que pueden formarse tomando el primer elemento del par del primer conjunto, y el segundo elemento del segundo conjunto y asi consecutivamente.

Dados los conjuntos:

$A = \{1, 2, 3 \}$

$B = \{a, b\}$

encuentre los pares ordenados de:

$A \times B$

$B \times A$

$B \times B$

  • Comprende todos los pares ordenados $(x, y)$ donde $x \in A$ y $y\in B$ $\therefore$

$A\times B = \{ (1, a), (1, b), (2, a), (2, b), (3, a), (3, b) \}$

$B\times A = \{ (a, 1), (a, 2), (a, 3), (b, 1), (b, 2), (b, 3) \}$

$B \times B = \{ (a, a), (a, b), (b, a), (b, b)\}$


In [12]:
A = [1, 2, 3]
B = ['a', 'b']
C = [4, 6, 8]
AxB = list(it.product(A, B))
BxA = list(it.product(B, A))
BxB = list(it.product(B, repeat=2))
AxBxC = list(it.product(A, B, C))

print('A x B = {0}\n'
      'B x A = {1}\n'
      'B x B = {2}\n\n'
      'A x B x C ='.format(AxB,
                           BxA,
                           BxB))
imprimir(AxBxC)


A x B = [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b'), (3, 'a'), (3, 'b')]
B x A = [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3)]
B x B = [('a', 'a'), ('a', 'b'), ('b', 'a'), ('b', 'b')]

A x B x C =
(1, 'a', 4)
(1, 'a', 6)
(1, 'a', 8)
(1, 'b', 4)
(1, 'b', 6)
(1, 'b', 8)
(2, 'a', 4)
(2, 'a', 6)
(2, 'a', 8)
(2, 'b', 4)
(2, 'b', 6)
(2, 'b', 8)
(3, 'a', 4)
(3, 'a', 6)
(3, 'a', 8)
(3, 'b', 4)
(3, 'b', 6)
(3, 'b', 8)

Diagrama de arbol

Un diarama de arbol es una representación gráfica de un experimetno o evento, que consta de $r$ pasos, donde cada uno de los pasos tiene un número finito de ser llevadas acabo.

Ejercicio:

Cada lanzamiento de moneda resulta bien sea cara $(H)$ o sello $(T)$ sea $(C) = (H, T)$ el conjunto de resultados. Encuentre $C^3$.


In [13]:
C = ['H', 'T']
C3 = list(it.product(C, repeat=3))
m = len(C3)

print('C = %s\n\n'
      'C³ =' % C)
imprimir(C3)
print('\nm = %s' % m)


C = ['H', 'T']

C³ =
('H', 'H', 'H')
('H', 'H', 'T')
('H', 'T', 'H')
('H', 'T', 'T')
('T', 'H', 'H')
('T', 'H', 'T')
('T', 'T', 'H')
('T', 'T', 'T')

m = 8

Un médico general clasifica a sus pacientes de acuerdo a su genero (Masculino, Femenino), tipo de sangre (A, B, AB u O) y en cuanto a la presión sanguinea (normal, alta, baja). Mediante un diagrama de arbol diga en cuantas clasificaciones pueden estar los pacientes de este medico.


In [14]:
genero = ['Masculino', 'Femenino']
sangre = ['A', 'B', 'AB', 'O']
presion = ['alta', 'baja', 'normal']
producto_cartesiano = list(it.product(genero, sangre, presion))
m = len(producto_cartesiano)

imprimir(producto_cartesiano)
print('\nm = %s' % m)


('Masculino', 'A', 'alta')
('Masculino', 'A', 'baja')
('Masculino', 'A', 'normal')
('Masculino', 'B', 'alta')
('Masculino', 'B', 'baja')
('Masculino', 'B', 'normal')
('Masculino', 'AB', 'alta')
('Masculino', 'AB', 'baja')
('Masculino', 'AB', 'normal')
('Masculino', 'O', 'alta')
('Masculino', 'O', 'baja')
('Masculino', 'O', 'normal')
('Femenino', 'A', 'alta')
('Femenino', 'A', 'baja')
('Femenino', 'A', 'normal')
('Femenino', 'B', 'alta')
('Femenino', 'B', 'baja')
('Femenino', 'B', 'normal')
('Femenino', 'AB', 'alta')
('Femenino', 'AB', 'baja')
('Femenino', 'AB', 'normal')
('Femenino', 'O', 'alta')
('Femenino', 'O', 'baja')
('Femenino', 'O', 'normal')

m = 24

Teoria de conjuntos

Todos los conjuntos son subconjuntos del conjunto $U$.

Union

Denotado por $A\cup B$

Es el conjunto de todos los elementos que se encuentran en ambos conjuntos.

Intersecion

Denotado por $A\cap B$

Es el conjunto de todos los elementos que se encuentra en ambos conjuntos, es decir los que son afines.

Complemento

Denotado por $A^c$

Es el conjunto de elementos que pertencen al universo $U$ pero que no pertenecen a $A$.

Diferencia

Denotado por $A \diagdown B, A - B, A ~ B$

La diferencia entre $A$ y $B$, llamada tambien complemento relativo, es el conjunto de elementos que pertencen a $A$ pero no pertenecen a $B$.

Diferencia Simetrica.

Denotada por $A\bigoplus B = (A - B) \cup (B - A)$

Consiste en aquellos elementos que pertenecen a $A$ o $B$ pero no a ambos.

Ejemplos:

Sea:

$U = \mathbb{N} = \{1,2,3,... \}$

$A = \{ 1, 2, 3, 4 \}$

$B = \{ 3,4,5,6,7 \}$

$C = \{ 2, 3, 8, 9 \}$

$E = \{ 2, 4, 6, ... \}$

$A \bigoplus B = (A-B) \cup (B-A) = {1,2,5,6,7}$


In [15]:
U = set(range(1000))  # Infinity
A = {1, 2, 3, 4}
B = {3, 4, 5, 6, 7}
C = {2, 3, 8, 9}
E = set(range(2, 1000, 2))
  • $A \bigoplus B = \{1, 2, 5, 6, 7\}$

In [16]:
(A-B) | (B-A)


Out[16]:
{1, 2, 5, 6, 7}

In [17]:
A^B


Out[17]:
{1, 2, 5, 6, 7}
  • $A - C= \{1, 4\}$

In [18]:
A-C


Out[18]:
{1, 4}
  • $A \cup B = \{1, 2, 3, 4, 5, 6, 7\}$

In [19]:
A|B


Out[19]:
{1, 2, 3, 4, 5, 6, 7}
  • $A \cap B = \{3, 4\}$

In [20]:
A&B


Out[20]:
{3, 4}