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.
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:
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()
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
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
}
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.
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"