Preparativos

Para poder simular el juego de la loteria, nuestro primer paso es escoger un elemento aleatorio de un conjunto, lo complicado de esto es que cada objeto puede tener más o menos probabilidad.

Simulación de una variable aleatoria discreta

Este sera nuestro primer paso, vamos a crear una función que nos simule una variable aleatoria discreta finita, que puede tener n probables resultados.

#Esta funcion sirve para crear variables aleatorias discretas de n valores,
#Lo que nos pide son el vector de probas y valores.
#la posicion de la probabilidad en el vector probas, indica que la posicion
#del valor en esa posicion.
DiscretaN <- function(probas,valores) { # inicio funcion

  if (sum(probas) != 1) { #este if es un control para que no entreguen 
    #valores de probas mayores a uno, o no representen una distribucion
    return(NA)
  }

  if (length(probas) != length(valores)) { #este if es un control que 
    #indica que si mete diferente numero de probas que de valores nos
    #devuelva un na
    return(NA)
  }

  min = 0 #el inicio del primer intervalo
  max = probas[1] #fin del primer intervalo
  X = "no funciona" #control del variable final
  uniforme = runif(n = 1, min = 0,max = 1) #numero aleatorio enre 0 y 1

  for (n in 1:length(probas)) { #inicio del for

    if (uniforme >= min & uniforme <= max) { #si nuestro numero aleatorio 
      #esta en el intervalo que nos devuelva el valor de ese intervalo
      X = valores[n]
      break
    }
    #si llegamos a esta parte del for es por que no encontramos al numero 
    #aleatorio en los otros intervalos
    min = min + probas[n] #asi que el nuevo intervalo va ser el inicio del 
    #intervalo anterior mas la proba del intervalo que acaba de pasar
    max = max + probas[n+1] #mientras que el max va ser el max anterior mas
    #la proba siguiente
  } #fin del for
  return(X)
} # fin funcion

El proceso de la función se puede ajustar en los siguientes pasos:

  1. Verifica que las probabilidad de cada uno de los eventos posibles sean uno, para que represente una distribución real.
  2. Comprueba que el numero de probabilidades es el mismo que el cardinal del conjunto de los valores.
  3. Indicamos los extremos de nuestro primer intervalo de verificacion, como el inicio cero, y el final la primer probabilidad dada.
  4. Creamos un numero aleatorio en cero y uno.
  5. verificamos si nuestra uniforme se encuentra en el intervalo, si se cumple lo anterior pasamos al paso 7, si no al paso 6
  6. Cambiamos los extremos de verificación, el minimo sera el minimo anterior mas la probabilidad actual, y el maximo sera la suma del maximo anterior y la probabildad siguiente, y pasar al paso 5.
  7. Que nos devuelva el valor que corresponde de esa probabilidad.

Para mostrar el funcionamiento de esta funcion vamos a hacer una histograma de la simulacion para \(n=10,100,1000,10000\), para la variable aleatoria.

\[ f(x)= \left\{ \begin{array}{lcc} 1 & con & probabilidad\thinspace\thinspace 1/8\\ \\ 2 &con & probabilidad\thinspace\thinspace 3/16\\ \\ 3 & con & probabilidad\thinspace\thinspace 3/8 \\ \\ 4 & con & probabilidad\thinspace\thinspace 1/16 \\ \\ 5 & con & probabilidad\thinspace\thinspace 1/16 \\ \\ 6 & con & probabilidad\thinspace\thinspace 1/16 \\ \\ 7 & con & probabilidad\thinspace\thinspace 1/16 \\ \\ 8 & con & probabilidad\thinspace\thinspace 1/16 \\ \end{array} \right.\]

library(ggplot2) #libreria para graficar
library(dplyr) #libreria para el manejo de D.F.
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
Valores = c(1,2,3,4,5,6,7,8) # valores de la variable.
probas = c(1/8,3/16,3/8,1/16,1/16,1/16,1/16,1/16) #Probabilidades de la variable

# ---- 10 ----
TQM = DiscretaN(probas = probas, valores = Valores) #simulacion de n
for (i in 1:10) { #incio del for
  TQM = c(TQM,DiscretaN(probas = probas, valores = Valores)) #Simulacion para 10
}#fin del for

TQM = data.frame(TQM) #lo hacemos D.F.

# grafica de 10 ----

TQM %>% ggplot(aes(TQM)) + 
  geom_histogram(bins = 20, color = "#352F44", fill = "#5C5470") +
  labs(title = "Histograma de la variable aleatoria X",
       subtitle = "N = 10",
       y = "Numero de repeticiones",
       x = "X")+
  theme_bw() 

# ---- 100 ----
TQM = DiscretaN(probas = probas, valores = Valores)
for (i in 1:100) {
  TQM = c(TQM,DiscretaN(probas = probas, valores = Valores))
  
}

TQM = data.frame(TQM)

TQM %>% ggplot(aes(TQM)) + 
  geom_histogram(bins = 20, color = "#94A684", fill = "#AEC3AE") +
  labs(title = "Histograma de la variable aleatoria X",
       subtitle = "N = 100",
       y = "Numero de repeticiones",
       x = "X")+
  theme_bw() 

# ---- 1000 ----
TQM = DiscretaN(probas = probas, valores = Valores)
for (i in 1:1000) {
  TQM = c(TQM,DiscretaN(probas = probas, valores = Valores))
  
}

TQM = data.frame(TQM)

TQM %>% ggplot(aes(TQM)) + 
  geom_histogram(bins = 20, color = "#313866", fill = "#504099") +
  labs(title = "Histograma de la variable aleatoria X",
       subtitle = "N = 1000",
       y = "Numero de repeticiones",
       x = "X")+
  theme_bw() 

# ---- 10000 ----
TQM = DiscretaN(probas = probas, valores = Valores)
for (i in 1:10000) {
  TQM = c(TQM,DiscretaN(probas = probas, valores = Valores))
  
}

TQM = data.frame(TQM)

TQM %>% ggplot(aes(TQM)) + 
  geom_histogram(bins = 20, color = "#191D88", fill = "#1450A3") +
  labs(title = "Histograma de la variable aleatoria X",
       subtitle = "N = 10000",
       y = "Numero de repeticiones",
       x = "X")+
  theme_bw() 

Función Buscar carta.

Para poder revolver la cartas, tenemos verificar si una carta esta en la baraja, y esta función hará eso.

#Esta funcion sirve para indicar si existe la carta en el mazo que tenemos
#devuelve false si no existe la carta en el mazo
#devuelve True en el caso contrario
buscarCarta <- function(carta, baraja) { #inicio funcion

  for (i in baraja) {#incio for

    existe = carta == i #preguntamos si existe la carta
    #en caso de existir que nos devuelva TRUE
    if (existe) { #inicio if
      return(TRUE) #aqui termina la funcion en caso de existir
    } # fin if

  }# fin for
return(existe)  #en cada caso que no exista entonces que nos devuelva un False
}#fin funcion

Función ordenCartas

para poder simular el revolver las cartas, vamos a hacer que escojamos una por una, y la vamos a guardar en una variable con nombre baraja, vamos a suponer que la probabilidad cualquier carta es la la misma, asi que seria \(1/54\), y si nos llegara a repetir una carta, no la guardamos en la variable carta.

#Esta funcion nos da un ordenamiento aleatorio de la baraja de cartas
OrdenCartas <- function(cartas, n = 54) {

  if(length(cartas) != 54){ # si las cartas no son las 54 que no haga el 
    #proceso (este se puede quitar para tener un ordenamiento de cualquier vector)
    return('No estan bien las cartas')
  }
  probas = replicate(length(cartas),expr = 1/length(cartas)) #la proba de todas las cartas es igual

  baraja = DiscretaN(probas, cartas) #escogemos una carta de manera aleatoria
  while (length(baraja)<n) { # mientras no tengamos las n cartas revueltas que no termine el ciclo
    cartaN = DiscretaN(probas, cartas) #Escogemos una carta

    if (!buscarCarta(cartaN,baraja)) { #y comprobamos si esa carta no esta en la baraja
      baraja = c(baraja, cartaN) # si no esta entonces que nos incluya en la baraja
    }
  }
  return(baraja) #al final que nos devuelva la baraja
}

Simulación

Loteria = c("El gallo",
            "El diablo",
            "La dama",
            "El catrin",
            "El paraguas",
            "La sirena",
            "La escalera",
            "La botella",
            "El barril",
            "El arbol",
            "El melon",
            "El valiente",
            "El gorrito",
            "La muerte",
            "La pera",
            "La bandera",
            "El bandolon",
            "El violoncello",
            "La garza",
            "El pajaro",
            "La mano",
            "La bota",
            "La luna",
            "El cotorro",
            "El borracho",
            "El negrito",
            "El corazón",
            "La sandia",
            "El tambor",
            "El camaron",
            "Las jaras",
            "El musico",
            "La araña",
            "El soldado",
            "La estrella",
            "El cazo",
            "El mundo",
            "El apache",
            "El nopal",
            "El alacran",
            "La rosa",
            "La calavera",
            "La compañia",
            "El cantarito",
            "El venado",
            "El sol",
            "La corona",
            "La chalupa",
            "El pino",
            "El pescado",
            "la palma",
            "La maceta",
            "El arpa",
            "La rana")
# ----
length(Loteria)
## [1] 54
Barajeada = OrdenCartas(Loteria)
Barajeada
##  [1] "La sandia"      "El valiente"    "El camaron"     "La maceta"     
##  [5] "El tambor"      "El bandolon"    "La bandera"     "El sol"        
##  [9] "El catrin"      "El cotorro"     "El corazón"     "El mundo"      
## [13] "La pera"        "El gallo"       "El borracho"    "La muerte"     
## [17] "El cantarito"   "La dama"        "El venado"      "El pescado"    
## [21] "El violoncello" "El apache"      "El soldado"     "La rosa"       
## [25] "Las jaras"      "La corona"      "La sirena"      "La compañia"   
## [29] "El pajaro"      "El barril"      "La estrella"    "La calavera"   
## [33] "La mano"        "La garza"       "El nopal"       "El negrito"    
## [37] "El arbol"       "La bota"        "La araña"       "El diablo"     
## [41] "El arpa"        "La escalera"    "La botella"     "La chalupa"    
## [45] "El paraguas"    "El gorrito"     "El pino"        "El alacran"    
## [49] "El cazo"        "El musico"      "la palma"       "La rana"       
## [53] "El melon"       "La luna"
for ( carta in Barajeada) {
  print(carta)
  readline(prompt = "Aprieta cualquier boton para continuar")

}
## [1] "La sandia"
## Aprieta cualquier boton para continuar
## [1] "El valiente"
## Aprieta cualquier boton para continuar
## [1] "El camaron"
## Aprieta cualquier boton para continuar
## [1] "La maceta"
## Aprieta cualquier boton para continuar
## [1] "El tambor"
## Aprieta cualquier boton para continuar
## [1] "El bandolon"
## Aprieta cualquier boton para continuar
## [1] "La bandera"
## Aprieta cualquier boton para continuar
## [1] "El sol"
## Aprieta cualquier boton para continuar
## [1] "El catrin"
## Aprieta cualquier boton para continuar
## [1] "El cotorro"
## Aprieta cualquier boton para continuar
## [1] "El corazón"
## Aprieta cualquier boton para continuar
## [1] "El mundo"
## Aprieta cualquier boton para continuar
## [1] "La pera"
## Aprieta cualquier boton para continuar
## [1] "El gallo"
## Aprieta cualquier boton para continuar
## [1] "El borracho"
## Aprieta cualquier boton para continuar
## [1] "La muerte"
## Aprieta cualquier boton para continuar
## [1] "El cantarito"
## Aprieta cualquier boton para continuar
## [1] "La dama"
## Aprieta cualquier boton para continuar
## [1] "El venado"
## Aprieta cualquier boton para continuar
## [1] "El pescado"
## Aprieta cualquier boton para continuar
## [1] "El violoncello"
## Aprieta cualquier boton para continuar
## [1] "El apache"
## Aprieta cualquier boton para continuar
## [1] "El soldado"
## Aprieta cualquier boton para continuar
## [1] "La rosa"
## Aprieta cualquier boton para continuar
## [1] "Las jaras"
## Aprieta cualquier boton para continuar
## [1] "La corona"
## Aprieta cualquier boton para continuar
## [1] "La sirena"
## Aprieta cualquier boton para continuar
## [1] "La compañia"
## Aprieta cualquier boton para continuar
## [1] "El pajaro"
## Aprieta cualquier boton para continuar
## [1] "El barril"
## Aprieta cualquier boton para continuar
## [1] "La estrella"
## Aprieta cualquier boton para continuar
## [1] "La calavera"
## Aprieta cualquier boton para continuar
## [1] "La mano"
## Aprieta cualquier boton para continuar
## [1] "La garza"
## Aprieta cualquier boton para continuar
## [1] "El nopal"
## Aprieta cualquier boton para continuar
## [1] "El negrito"
## Aprieta cualquier boton para continuar
## [1] "El arbol"
## Aprieta cualquier boton para continuar
## [1] "La bota"
## Aprieta cualquier boton para continuar
## [1] "La araña"
## Aprieta cualquier boton para continuar
## [1] "El diablo"
## Aprieta cualquier boton para continuar
## [1] "El arpa"
## Aprieta cualquier boton para continuar
## [1] "La escalera"
## Aprieta cualquier boton para continuar
## [1] "La botella"
## Aprieta cualquier boton para continuar
## [1] "La chalupa"
## Aprieta cualquier boton para continuar
## [1] "El paraguas"
## Aprieta cualquier boton para continuar
## [1] "El gorrito"
## Aprieta cualquier boton para continuar
## [1] "El pino"
## Aprieta cualquier boton para continuar
## [1] "El alacran"
## Aprieta cualquier boton para continuar
## [1] "El cazo"
## Aprieta cualquier boton para continuar
## [1] "El musico"
## Aprieta cualquier boton para continuar
## [1] "la palma"
## Aprieta cualquier boton para continuar
## [1] "La rana"
## Aprieta cualquier boton para continuar
## [1] "El melon"
## Aprieta cualquier boton para continuar
## [1] "La luna"
## Aprieta cualquier boton para continuar

Ahora que ya tenemos un orden aleatorio de las cartas podemos simular el juego. en esta parte del codigo ya podrias jugar loteria con demas personas con las cartillas que ustedes quieran.

Simulación del juego.

Para esta parte vamos a simular el juego.

#primero creamos Cartillas aleatoria

(Cartilla1 = OrdenCartas(Loteria, n = 9))
## [1] "El cazo"     "El alacran"  "El venado"   "El cotorro"  "El bandolon"
## [6] "El paraguas" "La rana"     "La calavera" "La escalera"
(Cartilla2 = OrdenCartas(Loteria, n = 9))
## [1] "El paraguas" "La bandera"  "La pera"     "El catrin"   "El sol"     
## [6] "La maceta"   "El pajaro"   "El venado"   "El arpa"
#estan variable representa el numero de frijolitos de cada cartilla
n1 = 0; n2 = 0

for (i in Barajeada) {
  print(i)
  frijolito1 = buscarCarta(i, Cartilla1)
  frijolito2 = buscarCarta(i, Cartilla2)
  
  if (frijolito1) {
    print("El jugador uno pone un frijolito")
    n1 = n1 + 1
  }
  
  if (frijolito2) {
    print("El jugador dos pone un frijolito")
    n2 = n2 + 1
  }
  
  if (n1 == 9 & n2 != 9) {
    print("El jugador 1, grita loteria")
    break
  }
  if(n2 == 9 & n1 != 9){
    print("El jugador 2, grita loteria")
    break
  }
  if (n2 == 9 & n1 == 9) {
    print("los dos jugadores ganaron")
    break
  }

}
## [1] "La sandia"
## [1] "El valiente"
## [1] "El camaron"
## [1] "La maceta"
## [1] "El jugador dos pone un frijolito"
## [1] "El tambor"
## [1] "El bandolon"
## [1] "El jugador uno pone un frijolito"
## [1] "La bandera"
## [1] "El jugador dos pone un frijolito"
## [1] "El sol"
## [1] "El jugador dos pone un frijolito"
## [1] "El catrin"
## [1] "El jugador dos pone un frijolito"
## [1] "El cotorro"
## [1] "El jugador uno pone un frijolito"
## [1] "El corazón"
## [1] "El mundo"
## [1] "La pera"
## [1] "El jugador dos pone un frijolito"
## [1] "El gallo"
## [1] "El borracho"
## [1] "La muerte"
## [1] "El cantarito"
## [1] "La dama"
## [1] "El venado"
## [1] "El jugador uno pone un frijolito"
## [1] "El jugador dos pone un frijolito"
## [1] "El pescado"
## [1] "El violoncello"
## [1] "El apache"
## [1] "El soldado"
## [1] "La rosa"
## [1] "Las jaras"
## [1] "La corona"
## [1] "La sirena"
## [1] "La compañia"
## [1] "El pajaro"
## [1] "El jugador dos pone un frijolito"
## [1] "El barril"
## [1] "La estrella"
## [1] "La calavera"
## [1] "El jugador uno pone un frijolito"
## [1] "La mano"
## [1] "La garza"
## [1] "El nopal"
## [1] "El negrito"
## [1] "El arbol"
## [1] "La bota"
## [1] "La araña"
## [1] "El diablo"
## [1] "El arpa"
## [1] "El jugador dos pone un frijolito"
## [1] "La escalera"
## [1] "El jugador uno pone un frijolito"
## [1] "La botella"
## [1] "La chalupa"
## [1] "El paraguas"
## [1] "El jugador uno pone un frijolito"
## [1] "El jugador dos pone un frijolito"
## [1] "El jugador 2, grita loteria"