Empezaremos con algunos principios básicos de los datos categóricos. A las probabilidades de este tipo se les llama probabilidades discretas. Entender los principios básicos de las probabilidades discretas nos ayudará a comprender las probabilidades continuas, que son las más comunes en aplicaciones de data science.
Recordemos que una variable discreta es una variable que solo puede tomar ciertos valores dentro de un conjunto numerable, es decir, no acepta cualquier valor, sino únicamente aquellos que pertenecen al conjunto.
Por ejemplo, si en un salón hay 4 mujeres y 6 hombres sentados, y realizamos un sorteo para un premio, intuitivamente sabríamos que la probabilidad de que el premiado sea un hombre es del 60%.
El cálculo utilizando la definición matemática de probabilidad que obtuvimos por intuición en el ejemplo anterior se puede expresar de la siguiente forma:
\[ P(A) = \frac{\text{Número de casos favorables al evento } A}{\text{Número total de casos posibles}} \]
En el caso del ejemplo: \[ P(\text{Sorteado sea hombre}) = \frac{6}{10} = 60\% \]
El método de Montecarlo es una técnica estadística que se utiliza para resolver problemas matemáticos complejos mediante la generación de variables aleatorias. Aunque nuestro problema no es particularmente complejo, podemos usar el método de Montecarlo para familiarizarnos con esta técnica, ya que es muy útil y se emplea frecuentemente.
Utilizaremos la simulación de Montecarlo para estimar la proporción esperada si repetimos un experimento de manera aleatoria un número considerable de veces. En otras palabras, la probabilidad del evento, utilizando esta estimación, se calcula como la proporción de veces que ocurre dicho evento en nuestra simulación.
En R, podemos generar muestras aleatorias fácilmente con la función
sample()
. A continuación, vamos a crear un vector que
represente a un grupo de estudiantes y luego utilizaremos la función
sample()
para seleccionar uno al azar.
# Crear un vector de estudiantes
estudiantes <- c("mujer", "mujer", "mujer", "mujer", "hombre", "hombre", "hombre", "hombre", "hombre", "hombre")
# Seleccionar un estudiante al azar
set.seed(123) # Para reproducibilidad
sample(estudiantes, 1)
## [1] "mujer"
A continuación, extenderemos este experimento para realizar múltiples
repeticiones y así obtener una estimación más precisa de la
probabilidad. Esto se puede lograr mediante un bucle o usando la función
replicate()
en R.
# Número de simulaciones
n_simulaciones <- 10000
# Realizar las simulaciones
resultados <- replicate(n_simulaciones, sample(estudiantes, 1))
# Calcular la proporción de hombres seleccionados
prop_hombres <- mean(resultados == "hombre")
prop_hombres
## [1] 0.6002
También podemos utilizar la función rep() para crear el vector de estudiantes de manera más eficiente. Al emplear rep(), especificamos un vector con los valores que deseamos repetir y un segundo argumento que indica cuántas veces queremos que cada valor se repita. Esto nos permite construir el vector de estudiantes de forma más rápida y sencilla.
estudiantes <- rep(c("mujer", "hombre"), times = c(13, 7))
estudiantes
## [1] "mujer" "mujer" "mujer" "mujer" "mujer" "mujer" "mujer" "mujer"
## [9] "mujer" "mujer" "mujer" "mujer" "mujer" "hombre" "hombre" "hombre"
## [17] "hombre" "hombre" "hombre" "hombre"
Ahora, necesitamos simular el experimento de seleccionar un elemento aleatorio un número determinado de veces. Para ello, utilizaremos la función replicate(). Vamos a replicar este experimento 100 veces:
estudiantes <- rep(c("mujer", "hombre"), times = c(13, 7))
num_veces <- 100
resultados <- replicate(num_veces, {
sample(estudiantes, 1)
})
resultados
## [1] "mujer" "mujer" "mujer" "mujer" "mujer" "hombre" "mujer" "mujer"
## [9] "mujer" "hombre" "mujer" "hombre" "mujer" "mujer" "mujer" "mujer"
## [17] "hombre" "hombre" "hombre" "hombre" "mujer" "mujer" "hombre" "mujer"
## [25] "hombre" "mujer" "mujer" "mujer" "mujer" "hombre" "hombre" "hombre"
## [33] "hombre" "mujer" "mujer" "mujer" "hombre" "hombre" "mujer" "mujer"
## [41] "hombre" "hombre" "mujer" "hombre" "mujer" "hombre" "mujer" "mujer"
## [49] "hombre" "mujer" "hombre" "mujer" "hombre" "mujer" "mujer" "mujer"
## [57] "hombre" "mujer" "mujer" "mujer" "hombre" "mujer" "mujer" "hombre"
## [65] "mujer" "mujer" "hombre" "hombre" "hombre" "mujer" "mujer" "mujer"
## [73] "mujer" "hombre" "mujer" "hombre" "mujer" "hombre" "mujer" "hombre"
## [81] "mujer" "hombre" "mujer" "mujer" "mujer" "mujer" "mujer" "hombre"
## [89] "mujer" "mujer" "mujer" "mujer" "mujer" "mujer" "mujer" "mujer"
## [97] "mujer" "hombre" "mujer" "mujer"
Podemos revisar los resultados de cada uno de los 100 sorteos simulados.
A continuación, utilizaremos la función table() para convertir nuestro vector de resultados en una tabla resumen, que nos indicará la frecuencia con la que apareció cada valor.
table(resultados)
## resultados
## hombre mujer
## 35 65
Si almacenamos el resultado en un vector llamado tabla_resultados,
podemos usar la función prop.table()
para calcular la
proporción de cada valor:
tabla_resultados <- table(resultados)
prop.table(tabla_resultados)
## resultados
## hombre mujer
## 0.35 0.65
No debemos preocuparnos si la probabilidad estimada de que el seleccionado sea hombre no resulta exactamente del 60%. Recuerda que estamos estimando la probabilidad mediante un método que depende del número de simulaciones realizadas. Cuantas más veces repitamos el experimento, más cercana será nuestra estimación al valor real. Por ejemplo, probemos replicar el experimento 10,000 veces:
estudiantes <- rep(c("mujer", "hombre"), times = c(13, 7))
num_veces <- 10000
resultados <- replicate(num_veces, {
sample(estudiantes, 1)
})
tabla_resultados <- table(resultados)
prop.table(tabla_resultados)
## resultados
## hombre mujer
## 0.3484 0.6516
Observamos cómo el valor estimado tiende a acercarse al 60%. No debemos preocuparnos si el valor varía ligeramente respecto al presentado en este libro, ya que estamos trabajando con eventos aleatorios.
Finalmente, en este ejemplo sencillo también podríamos haber utilizado la función mean(). Aunque esta función calcula el promedio de un conjunto de números, podemos convertir nuestro vector de estudiantes en valores numéricos, asignando 1 o 0 según una condición específica.
R facilita esta conversión de vectores a valores binarios mediante el uso del operador de comparación ==. Aquí te mostramos cómo hacerlo:
estudiantes == "hombre"
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [13] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Cuando aplicamos la función mean() a estos resultados, R convierte automáticamente los valores TRUE en 1 y los valores FALSE en 0. Por lo tanto, al calcular el promedio de esta lista, obtenemos el porcentaje de hombres en la muestra, lo que nos da una estimación de la probabilidad de que una persona seleccionada al azar sea un hombre.
mean(estudiantes == "hombre")
## [1] 0.35
Ya hemos visto cómo usar la función rep()
para crear
vectores de manera más eficiente. Otra función útil en R es
expand.grid(x, y)
, que genera un data frame con todas las
combinaciones posibles entre los vectores x
e
y
.
saludos <- c("Holi", "Chau")
nombres <- c("Ana", "Luis", "María", "Carlos", "Sofía", "Miguel")
resultado <- expand.grid(saludo = saludos, nombre = nombres)
resultado
## saludo nombre
## 1 Holi Ana
## 2 Chau Ana
## 3 Holi Luis
## 4 Chau Luis
## 5 Holi María
## 6 Chau María
## 7 Holi Carlos
## 8 Chau Carlos
## 9 Holi Sofía
## 10 Chau Sofía
## 11 Holi Miguel
## 12 Chau Miguel
Finalmente, contamos con la función paste(x, y)
, que nos
permite concatenar dos cadenas de texto o vectores de cadenas, añadiendo
un espacio entre ellos.
paste(resultado$saludo, resultado$nombre)
## [1] "Holi Ana" "Chau Ana" "Holi Luis" "Chau Luis" "Holi María"
## [6] "Chau María" "Holi Carlos" "Chau Carlos" "Holi Sofía" "Chau Sofía"
## [11] "Holi Miguel" "Chau Miguel"
De esta forma, podemos fácilmente construir una baraja de cartas organizada en 4 palos: corazones, diamantes, picas y tréboles. Cada palo incluye cartas numeradas del 1 al 10 (donde el 1 representa el As), seguido por las figuras: Jack, Reina y Rey.
Para ello, primero debemos definir un vector para los palos y otro para los valores de las cartas. Luego, podemos combinar estos vectores para obtener la baraja completa.
numeros <- c("As", "Dos", "Tres", "Cuatro", "Cinco", "Seis", "Siete",
"Ocho", "Nueve", "Diez", "Jack", "Reina", "Rey")
palos <- c("de Corazones", "de Diamantes", "de Picas", "de Tréboles")
# Creamos la combinatoria de cartas
combinatoria <- expand.grid(numero = numeros, palo = palos)
# Concatenamos vectores para tener nuestra combinación final
paste(combinatoria$numero, combinatoria$palo)
## [1] "As de Corazones" "Dos de Corazones" "Tres de Corazones"
## [4] "Cuatro de Corazones" "Cinco de Corazones" "Seis de Corazones"
## [7] "Siete de Corazones" "Ocho de Corazones" "Nueve de Corazones"
## [10] "Diez de Corazones" "Jack de Corazones" "Reina de Corazones"
## [13] "Rey de Corazones" "As de Diamantes" "Dos de Diamantes"
## [16] "Tres de Diamantes" "Cuatro de Diamantes" "Cinco de Diamantes"
## [19] "Seis de Diamantes" "Siete de Diamantes" "Ocho de Diamantes"
## [22] "Nueve de Diamantes" "Diez de Diamantes" "Jack de Diamantes"
## [25] "Reina de Diamantes" "Rey de Diamantes" "As de Picas"
## [28] "Dos de Picas" "Tres de Picas" "Cuatro de Picas"
## [31] "Cinco de Picas" "Seis de Picas" "Siete de Picas"
## [34] "Ocho de Picas" "Nueve de Picas" "Diez de Picas"
## [37] "Jack de Picas" "Reina de Picas" "Rey de Picas"
## [40] "As de Tréboles" "Dos de Tréboles" "Tres de Tréboles"
## [43] "Cuatro de Tréboles" "Cinco de Tréboles" "Seis de Tréboles"
## [46] "Siete de Tréboles" "Ocho de Tréboles" "Nueve de Tréboles"
## [49] "Diez de Tréboles" "Jack de Tréboles" "Reina de Tréboles"
## [52] "Rey de Tréboles"
Una vez que hemos creado nuestra baraja, podemos calcular diversas probabilidades utilizando el vector que hemos generado.
Por ejemplo, podemos calcular la probabilidad de que, al seleccionar una carta al azar, esta sea el “Rey de Diamantes”:
# Almacenamos la combinatoria en la variable baraja
baraja <- paste(combinatoria$numero, combinatoria$palo)
mean(baraja == "Rey de Diamantes")
## [1] 0.01923077
#> [1] 0.01923077
O también podemos calcular la probabilidad de que, al seleccionar una carta al azar, esta sea alguna de las Reinas:
# Creamos primero el vector de "Reina de..."
reinas <- paste("Reina", palos)
# Cálculo de la probabilidad
mean(baraja %in% reinas)
## [1] 0.07692308
#> [1] 0.07692308
Almacena en la variable prob
la probabilidad de que
al lanzar un dado no salga el número 1. Utilizando la variable
prob
, calcula la probabilidad de que al lanzar el dado 3
veces seguidas, en ninguna de esas veces salga el número 1.
Dado un recipiente que contiene 6 canicas rojas, 2 verdes y 5 azules. ¿Cuál es la probabilidad de que, si escoges una canica al azar, esta sea verde?
¿Cuál es la probabilidad de que al escoger una canica al azar del recipiente anterior, esta no sea de color verde?
Ahora, si sacamos primero una canica, la colocamos fuera de la caja y luego sacamos otra canica adicional de la caja, ¿cuál es la probabilidad de que la primera sea roja y la segunda no sea roja? Utiliza las variables roja, verde y azul para representar el número de canicas de cada color y calcula las probabilidades.
Ahora repetiremos el experimento anterior, pero después de sacar la primera canica la volvemos a colocar en la caja y sacamos una canica adicional al azar. ¿Cuál es la probabilidad de que la primera canica sea roja y la segunda no sea roja? Modifica el código en R que creaste anteriormente para calcular esta probabilidad.
Supongamos que tienes un conjunto de 7 cartas numeradas del 1 al 7. ¿Cuál es la probabilidad de que al sacar una carta al azar sea el número 4?
Si en lugar de 7 cartas tienes 10 cartas numeradas del 1 al 10, ¿cuál es la probabilidad de que al sacar una carta al azar sea un número mayor que 8?
En un grupo de 12 estudiantes, 8 son mujeres y 4 son hombres. Si eliges un estudiante al azar, ¿cuál es la probabilidad de que sea hombre?
En el mismo grupo de estudiantes, ¿cuál es la probabilidad de que un estudiante al azar sea mujer?
Si escogemos al azar dos estudiantes del grupo anterior sin reemplazo, ¿cuál es la probabilidad de que ambos sean hombres? Primero calcula la probabilidad de que el primer estudiante sea hombre y luego la probabilidad de que el segundo también sea hombre, dado que ya se ha elegido el primero.
En algunos problemas de probabilidad, nos enfrentamos a situaciones que involucran múltiples eventos. Cuando un evento afecta a otros, hablamos de eventos dependientes. Por ejemplo, si seleccionamos objetos de un grupo sin devolverlos, la elección inicial reduce las opciones disponibles para elecciones posteriores.
Hay dos formas principales de organizar o combinar los resultados en eventos dependientes. Las permutaciones son agrupaciones en las que el orden de los objetos es importante. Por otro lado, las combinaciones son agrupaciones en las que el orden no importa, solo el contenido.
Para trabajar con permutaciones y combinaciones en R, podemos utilizar el paquete gtools. Este paquete proporciona herramientas intuitivas para realizar cálculos relacionados con permutaciones y combinaciones.
# Primero instalamos el paquete gtools
install.packages("gtools")
El orden es crucial cuando calculamos, por ejemplo, el ranking de los ganadores en una competencia. Supongamos que tenemos 10 estudiantes compitiendo bajo las mismas condiciones para ver quién desarrolla el modelo de machine learning más preciso.
# Para empezar a usarlo cargamos la librería gtools
library(gtools)
data_scientists <- c("Alice", "Bob", "Carlos", "Diana", "Eva", "Fernando",
"Gabriel", "Hannah", "Isabel", "James")
data_scientists
## [1] "Alice" "Bob" "Carlos" "Diana" "Eva" "Fernando"
## [7] "Gabriel" "Hannah" "Isabel" "James"
Solo los tres primeros recibirán el premio. Dado que el orden de los premios es importante, utilizaremos la función permutations(total, seleccion, data). Aquí, total representa el tamaño del vector, seleccion es el número de elementos en cada permutación, y data es el vector de origen.
permutations(10, 3, v = data_scientists)
## [,1] [,2] [,3]
## [1,] "Alice" "Bob" "Carlos"
## [2,] "Alice" "Bob" "Diana"
## [3,] "Alice" "Bob" "Eva"
## [4,] "Alice" "Bob" "Fernando"
## [5,] "Alice" "Bob" "Gabriel"
## [6,] "Alice" "Bob" "Hannah"
## [7,] "Alice" "Bob" "Isabel"
## [8,] "Alice" "Bob" "James"
## [9,] "Alice" "Carlos" "Bob"
## [10,] "Alice" "Carlos" "Diana"
## [11,] "Alice" "Carlos" "Eva"
## [12,] "Alice" "Carlos" "Fernando"
## [13,] "Alice" "Carlos" "Gabriel"
## [14,] "Alice" "Carlos" "Hannah"
## [15,] "Alice" "Carlos" "Isabel"
## [16,] "Alice" "Carlos" "James"
## [17,] "Alice" "Diana" "Bob"
## [18,] "Alice" "Diana" "Carlos"
## [19,] "Alice" "Diana" "Eva"
## [20,] "Alice" "Diana" "Fernando"
## [21,] "Alice" "Diana" "Gabriel"
## [22,] "Alice" "Diana" "Hannah"
## [23,] "Alice" "Diana" "Isabel"
## [24,] "Alice" "Diana" "James"
## [25,] "Alice" "Eva" "Bob"
## [26,] "Alice" "Eva" "Carlos"
## [27,] "Alice" "Eva" "Diana"
## [28,] "Alice" "Eva" "Fernando"
## [29,] "Alice" "Eva" "Gabriel"
## [30,] "Alice" "Eva" "Hannah"
## [31,] "Alice" "Eva" "Isabel"
## [32,] "Alice" "Eva" "James"
## [33,] "Alice" "Fernando" "Bob"
## [34,] "Alice" "Fernando" "Carlos"
## [35,] "Alice" "Fernando" "Diana"
## [36,] "Alice" "Fernando" "Eva"
## [37,] "Alice" "Fernando" "Gabriel"
## [38,] "Alice" "Fernando" "Hannah"
## [39,] "Alice" "Fernando" "Isabel"
## [40,] "Alice" "Fernando" "James"
## [41,] "Alice" "Gabriel" "Bob"
## [42,] "Alice" "Gabriel" "Carlos"
## [43,] "Alice" "Gabriel" "Diana"
## [44,] "Alice" "Gabriel" "Eva"
## [45,] "Alice" "Gabriel" "Fernando"
## [46,] "Alice" "Gabriel" "Hannah"
## [47,] "Alice" "Gabriel" "Isabel"
## [48,] "Alice" "Gabriel" "James"
## [49,] "Alice" "Hannah" "Bob"
## [50,] "Alice" "Hannah" "Carlos"
## [51,] "Alice" "Hannah" "Diana"
## [52,] "Alice" "Hannah" "Eva"
## [53,] "Alice" "Hannah" "Fernando"
## [54,] "Alice" "Hannah" "Gabriel"
## [55,] "Alice" "Hannah" "Isabel"
## [56,] "Alice" "Hannah" "James"
## [57,] "Alice" "Isabel" "Bob"
## [58,] "Alice" "Isabel" "Carlos"
## [59,] "Alice" "Isabel" "Diana"
## [60,] "Alice" "Isabel" "Eva"
## [61,] "Alice" "Isabel" "Fernando"
## [62,] "Alice" "Isabel" "Gabriel"
## [63,] "Alice" "Isabel" "Hannah"
## [64,] "Alice" "Isabel" "James"
## [65,] "Alice" "James" "Bob"
## [66,] "Alice" "James" "Carlos"
## [67,] "Alice" "James" "Diana"
## [68,] "Alice" "James" "Eva"
## [69,] "Alice" "James" "Fernando"
## [70,] "Alice" "James" "Gabriel"
## [71,] "Alice" "James" "Hannah"
## [72,] "Alice" "James" "Isabel"
## [73,] "Bob" "Alice" "Carlos"
## [74,] "Bob" "Alice" "Diana"
## [75,] "Bob" "Alice" "Eva"
## [76,] "Bob" "Alice" "Fernando"
## [77,] "Bob" "Alice" "Gabriel"
## [78,] "Bob" "Alice" "Hannah"
## [79,] "Bob" "Alice" "Isabel"
## [80,] "Bob" "Alice" "James"
## [81,] "Bob" "Carlos" "Alice"
## [82,] "Bob" "Carlos" "Diana"
## [83,] "Bob" "Carlos" "Eva"
## [84,] "Bob" "Carlos" "Fernando"
## [85,] "Bob" "Carlos" "Gabriel"
## [86,] "Bob" "Carlos" "Hannah"
## [87,] "Bob" "Carlos" "Isabel"
## [88,] "Bob" "Carlos" "James"
## [89,] "Bob" "Diana" "Alice"
## [90,] "Bob" "Diana" "Carlos"
## [91,] "Bob" "Diana" "Eva"
## [92,] "Bob" "Diana" "Fernando"
## [93,] "Bob" "Diana" "Gabriel"
## [94,] "Bob" "Diana" "Hannah"
## [95,] "Bob" "Diana" "Isabel"
## [96,] "Bob" "Diana" "James"
## [97,] "Bob" "Eva" "Alice"
## [98,] "Bob" "Eva" "Carlos"
## [99,] "Bob" "Eva" "Diana"
## [100,] "Bob" "Eva" "Fernando"
## [101,] "Bob" "Eva" "Gabriel"
## [102,] "Bob" "Eva" "Hannah"
## [103,] "Bob" "Eva" "Isabel"
## [104,] "Bob" "Eva" "James"
## [105,] "Bob" "Fernando" "Alice"
## [106,] "Bob" "Fernando" "Carlos"
## [107,] "Bob" "Fernando" "Diana"
## [108,] "Bob" "Fernando" "Eva"
## [109,] "Bob" "Fernando" "Gabriel"
## [110,] "Bob" "Fernando" "Hannah"
## [111,] "Bob" "Fernando" "Isabel"
## [112,] "Bob" "Fernando" "James"
## [113,] "Bob" "Gabriel" "Alice"
## [114,] "Bob" "Gabriel" "Carlos"
## [115,] "Bob" "Gabriel" "Diana"
## [116,] "Bob" "Gabriel" "Eva"
## [117,] "Bob" "Gabriel" "Fernando"
## [118,] "Bob" "Gabriel" "Hannah"
## [119,] "Bob" "Gabriel" "Isabel"
## [120,] "Bob" "Gabriel" "James"
## [121,] "Bob" "Hannah" "Alice"
## [122,] "Bob" "Hannah" "Carlos"
## [123,] "Bob" "Hannah" "Diana"
## [124,] "Bob" "Hannah" "Eva"
## [125,] "Bob" "Hannah" "Fernando"
## [126,] "Bob" "Hannah" "Gabriel"
## [127,] "Bob" "Hannah" "Isabel"
## [128,] "Bob" "Hannah" "James"
## [129,] "Bob" "Isabel" "Alice"
## [130,] "Bob" "Isabel" "Carlos"
## [131,] "Bob" "Isabel" "Diana"
## [132,] "Bob" "Isabel" "Eva"
## [133,] "Bob" "Isabel" "Fernando"
## [134,] "Bob" "Isabel" "Gabriel"
## [135,] "Bob" "Isabel" "Hannah"
## [136,] "Bob" "Isabel" "James"
## [137,] "Bob" "James" "Alice"
## [138,] "Bob" "James" "Carlos"
## [139,] "Bob" "James" "Diana"
## [140,] "Bob" "James" "Eva"
## [141,] "Bob" "James" "Fernando"
## [142,] "Bob" "James" "Gabriel"
## [143,] "Bob" "James" "Hannah"
## [144,] "Bob" "James" "Isabel"
## [145,] "Carlos" "Alice" "Bob"
## [146,] "Carlos" "Alice" "Diana"
## [147,] "Carlos" "Alice" "Eva"
## [148,] "Carlos" "Alice" "Fernando"
## [149,] "Carlos" "Alice" "Gabriel"
## [150,] "Carlos" "Alice" "Hannah"
## [151,] "Carlos" "Alice" "Isabel"
## [152,] "Carlos" "Alice" "James"
## [153,] "Carlos" "Bob" "Alice"
## [154,] "Carlos" "Bob" "Diana"
## [155,] "Carlos" "Bob" "Eva"
## [156,] "Carlos" "Bob" "Fernando"
## [157,] "Carlos" "Bob" "Gabriel"
## [158,] "Carlos" "Bob" "Hannah"
## [159,] "Carlos" "Bob" "Isabel"
## [160,] "Carlos" "Bob" "James"
## [161,] "Carlos" "Diana" "Alice"
## [162,] "Carlos" "Diana" "Bob"
## [163,] "Carlos" "Diana" "Eva"
## [164,] "Carlos" "Diana" "Fernando"
## [165,] "Carlos" "Diana" "Gabriel"
## [166,] "Carlos" "Diana" "Hannah"
## [167,] "Carlos" "Diana" "Isabel"
## [168,] "Carlos" "Diana" "James"
## [169,] "Carlos" "Eva" "Alice"
## [170,] "Carlos" "Eva" "Bob"
## [171,] "Carlos" "Eva" "Diana"
## [172,] "Carlos" "Eva" "Fernando"
## [173,] "Carlos" "Eva" "Gabriel"
## [174,] "Carlos" "Eva" "Hannah"
## [175,] "Carlos" "Eva" "Isabel"
## [176,] "Carlos" "Eva" "James"
## [177,] "Carlos" "Fernando" "Alice"
## [178,] "Carlos" "Fernando" "Bob"
## [179,] "Carlos" "Fernando" "Diana"
## [180,] "Carlos" "Fernando" "Eva"
## [181,] "Carlos" "Fernando" "Gabriel"
## [182,] "Carlos" "Fernando" "Hannah"
## [183,] "Carlos" "Fernando" "Isabel"
## [184,] "Carlos" "Fernando" "James"
## [185,] "Carlos" "Gabriel" "Alice"
## [186,] "Carlos" "Gabriel" "Bob"
## [187,] "Carlos" "Gabriel" "Diana"
## [188,] "Carlos" "Gabriel" "Eva"
## [189,] "Carlos" "Gabriel" "Fernando"
## [190,] "Carlos" "Gabriel" "Hannah"
## [191,] "Carlos" "Gabriel" "Isabel"
## [192,] "Carlos" "Gabriel" "James"
## [193,] "Carlos" "Hannah" "Alice"
## [194,] "Carlos" "Hannah" "Bob"
## [195,] "Carlos" "Hannah" "Diana"
## [196,] "Carlos" "Hannah" "Eva"
## [197,] "Carlos" "Hannah" "Fernando"
## [198,] "Carlos" "Hannah" "Gabriel"
## [199,] "Carlos" "Hannah" "Isabel"
## [200,] "Carlos" "Hannah" "James"
## [201,] "Carlos" "Isabel" "Alice"
## [202,] "Carlos" "Isabel" "Bob"
## [203,] "Carlos" "Isabel" "Diana"
## [204,] "Carlos" "Isabel" "Eva"
## [205,] "Carlos" "Isabel" "Fernando"
## [206,] "Carlos" "Isabel" "Gabriel"
## [207,] "Carlos" "Isabel" "Hannah"
## [208,] "Carlos" "Isabel" "James"
## [209,] "Carlos" "James" "Alice"
## [210,] "Carlos" "James" "Bob"
## [211,] "Carlos" "James" "Diana"
## [212,] "Carlos" "James" "Eva"
## [213,] "Carlos" "James" "Fernando"
## [214,] "Carlos" "James" "Gabriel"
## [215,] "Carlos" "James" "Hannah"
## [216,] "Carlos" "James" "Isabel"
## [217,] "Diana" "Alice" "Bob"
## [218,] "Diana" "Alice" "Carlos"
## [219,] "Diana" "Alice" "Eva"
## [220,] "Diana" "Alice" "Fernando"
## [221,] "Diana" "Alice" "Gabriel"
## [222,] "Diana" "Alice" "Hannah"
## [223,] "Diana" "Alice" "Isabel"
## [224,] "Diana" "Alice" "James"
## [225,] "Diana" "Bob" "Alice"
## [226,] "Diana" "Bob" "Carlos"
## [227,] "Diana" "Bob" "Eva"
## [228,] "Diana" "Bob" "Fernando"
## [229,] "Diana" "Bob" "Gabriel"
## [230,] "Diana" "Bob" "Hannah"
## [231,] "Diana" "Bob" "Isabel"
## [232,] "Diana" "Bob" "James"
## [233,] "Diana" "Carlos" "Alice"
## [234,] "Diana" "Carlos" "Bob"
## [235,] "Diana" "Carlos" "Eva"
## [236,] "Diana" "Carlos" "Fernando"
## [237,] "Diana" "Carlos" "Gabriel"
## [238,] "Diana" "Carlos" "Hannah"
## [239,] "Diana" "Carlos" "Isabel"
## [240,] "Diana" "Carlos" "James"
## [241,] "Diana" "Eva" "Alice"
## [242,] "Diana" "Eva" "Bob"
## [243,] "Diana" "Eva" "Carlos"
## [244,] "Diana" "Eva" "Fernando"
## [245,] "Diana" "Eva" "Gabriel"
## [246,] "Diana" "Eva" "Hannah"
## [247,] "Diana" "Eva" "Isabel"
## [248,] "Diana" "Eva" "James"
## [249,] "Diana" "Fernando" "Alice"
## [250,] "Diana" "Fernando" "Bob"
## [251,] "Diana" "Fernando" "Carlos"
## [252,] "Diana" "Fernando" "Eva"
## [253,] "Diana" "Fernando" "Gabriel"
## [254,] "Diana" "Fernando" "Hannah"
## [255,] "Diana" "Fernando" "Isabel"
## [256,] "Diana" "Fernando" "James"
## [257,] "Diana" "Gabriel" "Alice"
## [258,] "Diana" "Gabriel" "Bob"
## [259,] "Diana" "Gabriel" "Carlos"
## [260,] "Diana" "Gabriel" "Eva"
## [261,] "Diana" "Gabriel" "Fernando"
## [262,] "Diana" "Gabriel" "Hannah"
## [263,] "Diana" "Gabriel" "Isabel"
## [264,] "Diana" "Gabriel" "James"
## [265,] "Diana" "Hannah" "Alice"
## [266,] "Diana" "Hannah" "Bob"
## [267,] "Diana" "Hannah" "Carlos"
## [268,] "Diana" "Hannah" "Eva"
## [269,] "Diana" "Hannah" "Fernando"
## [270,] "Diana" "Hannah" "Gabriel"
## [271,] "Diana" "Hannah" "Isabel"
## [272,] "Diana" "Hannah" "James"
## [273,] "Diana" "Isabel" "Alice"
## [274,] "Diana" "Isabel" "Bob"
## [275,] "Diana" "Isabel" "Carlos"
## [276,] "Diana" "Isabel" "Eva"
## [277,] "Diana" "Isabel" "Fernando"
## [278,] "Diana" "Isabel" "Gabriel"
## [279,] "Diana" "Isabel" "Hannah"
## [280,] "Diana" "Isabel" "James"
## [281,] "Diana" "James" "Alice"
## [282,] "Diana" "James" "Bob"
## [283,] "Diana" "James" "Carlos"
## [284,] "Diana" "James" "Eva"
## [285,] "Diana" "James" "Fernando"
## [286,] "Diana" "James" "Gabriel"
## [287,] "Diana" "James" "Hannah"
## [288,] "Diana" "James" "Isabel"
## [289,] "Eva" "Alice" "Bob"
## [290,] "Eva" "Alice" "Carlos"
## [291,] "Eva" "Alice" "Diana"
## [292,] "Eva" "Alice" "Fernando"
## [293,] "Eva" "Alice" "Gabriel"
## [294,] "Eva" "Alice" "Hannah"
## [295,] "Eva" "Alice" "Isabel"
## [296,] "Eva" "Alice" "James"
## [297,] "Eva" "Bob" "Alice"
## [298,] "Eva" "Bob" "Carlos"
## [299,] "Eva" "Bob" "Diana"
## [300,] "Eva" "Bob" "Fernando"
## [301,] "Eva" "Bob" "Gabriel"
## [302,] "Eva" "Bob" "Hannah"
## [303,] "Eva" "Bob" "Isabel"
## [304,] "Eva" "Bob" "James"
## [305,] "Eva" "Carlos" "Alice"
## [306,] "Eva" "Carlos" "Bob"
## [307,] "Eva" "Carlos" "Diana"
## [308,] "Eva" "Carlos" "Fernando"
## [309,] "Eva" "Carlos" "Gabriel"
## [310,] "Eva" "Carlos" "Hannah"
## [311,] "Eva" "Carlos" "Isabel"
## [312,] "Eva" "Carlos" "James"
## [313,] "Eva" "Diana" "Alice"
## [314,] "Eva" "Diana" "Bob"
## [315,] "Eva" "Diana" "Carlos"
## [316,] "Eva" "Diana" "Fernando"
## [317,] "Eva" "Diana" "Gabriel"
## [318,] "Eva" "Diana" "Hannah"
## [319,] "Eva" "Diana" "Isabel"
## [320,] "Eva" "Diana" "James"
## [321,] "Eva" "Fernando" "Alice"
## [322,] "Eva" "Fernando" "Bob"
## [323,] "Eva" "Fernando" "Carlos"
## [324,] "Eva" "Fernando" "Diana"
## [325,] "Eva" "Fernando" "Gabriel"
## [326,] "Eva" "Fernando" "Hannah"
## [327,] "Eva" "Fernando" "Isabel"
## [328,] "Eva" "Fernando" "James"
## [329,] "Eva" "Gabriel" "Alice"
## [330,] "Eva" "Gabriel" "Bob"
## [331,] "Eva" "Gabriel" "Carlos"
## [332,] "Eva" "Gabriel" "Diana"
## [333,] "Eva" "Gabriel" "Fernando"
## [334,] "Eva" "Gabriel" "Hannah"
## [335,] "Eva" "Gabriel" "Isabel"
## [336,] "Eva" "Gabriel" "James"
## [337,] "Eva" "Hannah" "Alice"
## [338,] "Eva" "Hannah" "Bob"
## [339,] "Eva" "Hannah" "Carlos"
## [340,] "Eva" "Hannah" "Diana"
## [341,] "Eva" "Hannah" "Fernando"
## [342,] "Eva" "Hannah" "Gabriel"
## [343,] "Eva" "Hannah" "Isabel"
## [344,] "Eva" "Hannah" "James"
## [345,] "Eva" "Isabel" "Alice"
## [346,] "Eva" "Isabel" "Bob"
## [347,] "Eva" "Isabel" "Carlos"
## [348,] "Eva" "Isabel" "Diana"
## [349,] "Eva" "Isabel" "Fernando"
## [350,] "Eva" "Isabel" "Gabriel"
## [351,] "Eva" "Isabel" "Hannah"
## [352,] "Eva" "Isabel" "James"
## [353,] "Eva" "James" "Alice"
## [354,] "Eva" "James" "Bob"
## [355,] "Eva" "James" "Carlos"
## [356,] "Eva" "James" "Diana"
## [357,] "Eva" "James" "Fernando"
## [358,] "Eva" "James" "Gabriel"
## [359,] "Eva" "James" "Hannah"
## [360,] "Eva" "James" "Isabel"
## [361,] "Fernando" "Alice" "Bob"
## [362,] "Fernando" "Alice" "Carlos"
## [363,] "Fernando" "Alice" "Diana"
## [364,] "Fernando" "Alice" "Eva"
## [365,] "Fernando" "Alice" "Gabriel"
## [366,] "Fernando" "Alice" "Hannah"
## [367,] "Fernando" "Alice" "Isabel"
## [368,] "Fernando" "Alice" "James"
## [369,] "Fernando" "Bob" "Alice"
## [370,] "Fernando" "Bob" "Carlos"
## [371,] "Fernando" "Bob" "Diana"
## [372,] "Fernando" "Bob" "Eva"
## [373,] "Fernando" "Bob" "Gabriel"
## [374,] "Fernando" "Bob" "Hannah"
## [375,] "Fernando" "Bob" "Isabel"
## [376,] "Fernando" "Bob" "James"
## [377,] "Fernando" "Carlos" "Alice"
## [378,] "Fernando" "Carlos" "Bob"
## [379,] "Fernando" "Carlos" "Diana"
## [380,] "Fernando" "Carlos" "Eva"
## [381,] "Fernando" "Carlos" "Gabriel"
## [382,] "Fernando" "Carlos" "Hannah"
## [383,] "Fernando" "Carlos" "Isabel"
## [384,] "Fernando" "Carlos" "James"
## [385,] "Fernando" "Diana" "Alice"
## [386,] "Fernando" "Diana" "Bob"
## [387,] "Fernando" "Diana" "Carlos"
## [388,] "Fernando" "Diana" "Eva"
## [389,] "Fernando" "Diana" "Gabriel"
## [390,] "Fernando" "Diana" "Hannah"
## [391,] "Fernando" "Diana" "Isabel"
## [392,] "Fernando" "Diana" "James"
## [393,] "Fernando" "Eva" "Alice"
## [394,] "Fernando" "Eva" "Bob"
## [395,] "Fernando" "Eva" "Carlos"
## [396,] "Fernando" "Eva" "Diana"
## [397,] "Fernando" "Eva" "Gabriel"
## [398,] "Fernando" "Eva" "Hannah"
## [399,] "Fernando" "Eva" "Isabel"
## [400,] "Fernando" "Eva" "James"
## [401,] "Fernando" "Gabriel" "Alice"
## [402,] "Fernando" "Gabriel" "Bob"
## [403,] "Fernando" "Gabriel" "Carlos"
## [404,] "Fernando" "Gabriel" "Diana"
## [405,] "Fernando" "Gabriel" "Eva"
## [406,] "Fernando" "Gabriel" "Hannah"
## [407,] "Fernando" "Gabriel" "Isabel"
## [408,] "Fernando" "Gabriel" "James"
## [409,] "Fernando" "Hannah" "Alice"
## [410,] "Fernando" "Hannah" "Bob"
## [411,] "Fernando" "Hannah" "Carlos"
## [412,] "Fernando" "Hannah" "Diana"
## [413,] "Fernando" "Hannah" "Eva"
## [414,] "Fernando" "Hannah" "Gabriel"
## [415,] "Fernando" "Hannah" "Isabel"
## [416,] "Fernando" "Hannah" "James"
## [417,] "Fernando" "Isabel" "Alice"
## [418,] "Fernando" "Isabel" "Bob"
## [419,] "Fernando" "Isabel" "Carlos"
## [420,] "Fernando" "Isabel" "Diana"
## [421,] "Fernando" "Isabel" "Eva"
## [422,] "Fernando" "Isabel" "Gabriel"
## [423,] "Fernando" "Isabel" "Hannah"
## [424,] "Fernando" "Isabel" "James"
## [425,] "Fernando" "James" "Alice"
## [426,] "Fernando" "James" "Bob"
## [427,] "Fernando" "James" "Carlos"
## [428,] "Fernando" "James" "Diana"
## [429,] "Fernando" "James" "Eva"
## [430,] "Fernando" "James" "Gabriel"
## [431,] "Fernando" "James" "Hannah"
## [432,] "Fernando" "James" "Isabel"
## [433,] "Gabriel" "Alice" "Bob"
## [434,] "Gabriel" "Alice" "Carlos"
## [435,] "Gabriel" "Alice" "Diana"
## [436,] "Gabriel" "Alice" "Eva"
## [437,] "Gabriel" "Alice" "Fernando"
## [438,] "Gabriel" "Alice" "Hannah"
## [439,] "Gabriel" "Alice" "Isabel"
## [440,] "Gabriel" "Alice" "James"
## [441,] "Gabriel" "Bob" "Alice"
## [442,] "Gabriel" "Bob" "Carlos"
## [443,] "Gabriel" "Bob" "Diana"
## [444,] "Gabriel" "Bob" "Eva"
## [445,] "Gabriel" "Bob" "Fernando"
## [446,] "Gabriel" "Bob" "Hannah"
## [447,] "Gabriel" "Bob" "Isabel"
## [448,] "Gabriel" "Bob" "James"
## [449,] "Gabriel" "Carlos" "Alice"
## [450,] "Gabriel" "Carlos" "Bob"
## [451,] "Gabriel" "Carlos" "Diana"
## [452,] "Gabriel" "Carlos" "Eva"
## [453,] "Gabriel" "Carlos" "Fernando"
## [454,] "Gabriel" "Carlos" "Hannah"
## [455,] "Gabriel" "Carlos" "Isabel"
## [456,] "Gabriel" "Carlos" "James"
## [457,] "Gabriel" "Diana" "Alice"
## [458,] "Gabriel" "Diana" "Bob"
## [459,] "Gabriel" "Diana" "Carlos"
## [460,] "Gabriel" "Diana" "Eva"
## [461,] "Gabriel" "Diana" "Fernando"
## [462,] "Gabriel" "Diana" "Hannah"
## [463,] "Gabriel" "Diana" "Isabel"
## [464,] "Gabriel" "Diana" "James"
## [465,] "Gabriel" "Eva" "Alice"
## [466,] "Gabriel" "Eva" "Bob"
## [467,] "Gabriel" "Eva" "Carlos"
## [468,] "Gabriel" "Eva" "Diana"
## [469,] "Gabriel" "Eva" "Fernando"
## [470,] "Gabriel" "Eva" "Hannah"
## [471,] "Gabriel" "Eva" "Isabel"
## [472,] "Gabriel" "Eva" "James"
## [473,] "Gabriel" "Fernando" "Alice"
## [474,] "Gabriel" "Fernando" "Bob"
## [475,] "Gabriel" "Fernando" "Carlos"
## [476,] "Gabriel" "Fernando" "Diana"
## [477,] "Gabriel" "Fernando" "Eva"
## [478,] "Gabriel" "Fernando" "Hannah"
## [479,] "Gabriel" "Fernando" "Isabel"
## [480,] "Gabriel" "Fernando" "James"
## [481,] "Gabriel" "Hannah" "Alice"
## [482,] "Gabriel" "Hannah" "Bob"
## [483,] "Gabriel" "Hannah" "Carlos"
## [484,] "Gabriel" "Hannah" "Diana"
## [485,] "Gabriel" "Hannah" "Eva"
## [486,] "Gabriel" "Hannah" "Fernando"
## [487,] "Gabriel" "Hannah" "Isabel"
## [488,] "Gabriel" "Hannah" "James"
## [489,] "Gabriel" "Isabel" "Alice"
## [490,] "Gabriel" "Isabel" "Bob"
## [491,] "Gabriel" "Isabel" "Carlos"
## [492,] "Gabriel" "Isabel" "Diana"
## [493,] "Gabriel" "Isabel" "Eva"
## [494,] "Gabriel" "Isabel" "Fernando"
## [495,] "Gabriel" "Isabel" "Hannah"
## [496,] "Gabriel" "Isabel" "James"
## [497,] "Gabriel" "James" "Alice"
## [498,] "Gabriel" "James" "Bob"
## [499,] "Gabriel" "James" "Carlos"
## [500,] "Gabriel" "James" "Diana"
## [501,] "Gabriel" "James" "Eva"
## [502,] "Gabriel" "James" "Fernando"
## [503,] "Gabriel" "James" "Hannah"
## [504,] "Gabriel" "James" "Isabel"
## [505,] "Hannah" "Alice" "Bob"
## [506,] "Hannah" "Alice" "Carlos"
## [507,] "Hannah" "Alice" "Diana"
## [508,] "Hannah" "Alice" "Eva"
## [509,] "Hannah" "Alice" "Fernando"
## [510,] "Hannah" "Alice" "Gabriel"
## [511,] "Hannah" "Alice" "Isabel"
## [512,] "Hannah" "Alice" "James"
## [513,] "Hannah" "Bob" "Alice"
## [514,] "Hannah" "Bob" "Carlos"
## [515,] "Hannah" "Bob" "Diana"
## [516,] "Hannah" "Bob" "Eva"
## [517,] "Hannah" "Bob" "Fernando"
## [518,] "Hannah" "Bob" "Gabriel"
## [519,] "Hannah" "Bob" "Isabel"
## [520,] "Hannah" "Bob" "James"
## [521,] "Hannah" "Carlos" "Alice"
## [522,] "Hannah" "Carlos" "Bob"
## [523,] "Hannah" "Carlos" "Diana"
## [524,] "Hannah" "Carlos" "Eva"
## [525,] "Hannah" "Carlos" "Fernando"
## [526,] "Hannah" "Carlos" "Gabriel"
## [527,] "Hannah" "Carlos" "Isabel"
## [528,] "Hannah" "Carlos" "James"
## [529,] "Hannah" "Diana" "Alice"
## [530,] "Hannah" "Diana" "Bob"
## [531,] "Hannah" "Diana" "Carlos"
## [532,] "Hannah" "Diana" "Eva"
## [533,] "Hannah" "Diana" "Fernando"
## [534,] "Hannah" "Diana" "Gabriel"
## [535,] "Hannah" "Diana" "Isabel"
## [536,] "Hannah" "Diana" "James"
## [537,] "Hannah" "Eva" "Alice"
## [538,] "Hannah" "Eva" "Bob"
## [539,] "Hannah" "Eva" "Carlos"
## [540,] "Hannah" "Eva" "Diana"
## [541,] "Hannah" "Eva" "Fernando"
## [542,] "Hannah" "Eva" "Gabriel"
## [543,] "Hannah" "Eva" "Isabel"
## [544,] "Hannah" "Eva" "James"
## [545,] "Hannah" "Fernando" "Alice"
## [546,] "Hannah" "Fernando" "Bob"
## [547,] "Hannah" "Fernando" "Carlos"
## [548,] "Hannah" "Fernando" "Diana"
## [549,] "Hannah" "Fernando" "Eva"
## [550,] "Hannah" "Fernando" "Gabriel"
## [551,] "Hannah" "Fernando" "Isabel"
## [552,] "Hannah" "Fernando" "James"
## [553,] "Hannah" "Gabriel" "Alice"
## [554,] "Hannah" "Gabriel" "Bob"
## [555,] "Hannah" "Gabriel" "Carlos"
## [556,] "Hannah" "Gabriel" "Diana"
## [557,] "Hannah" "Gabriel" "Eva"
## [558,] "Hannah" "Gabriel" "Fernando"
## [559,] "Hannah" "Gabriel" "Isabel"
## [560,] "Hannah" "Gabriel" "James"
## [561,] "Hannah" "Isabel" "Alice"
## [562,] "Hannah" "Isabel" "Bob"
## [563,] "Hannah" "Isabel" "Carlos"
## [564,] "Hannah" "Isabel" "Diana"
## [565,] "Hannah" "Isabel" "Eva"
## [566,] "Hannah" "Isabel" "Fernando"
## [567,] "Hannah" "Isabel" "Gabriel"
## [568,] "Hannah" "Isabel" "James"
## [569,] "Hannah" "James" "Alice"
## [570,] "Hannah" "James" "Bob"
## [571,] "Hannah" "James" "Carlos"
## [572,] "Hannah" "James" "Diana"
## [573,] "Hannah" "James" "Eva"
## [574,] "Hannah" "James" "Fernando"
## [575,] "Hannah" "James" "Gabriel"
## [576,] "Hannah" "James" "Isabel"
## [577,] "Isabel" "Alice" "Bob"
## [578,] "Isabel" "Alice" "Carlos"
## [579,] "Isabel" "Alice" "Diana"
## [580,] "Isabel" "Alice" "Eva"
## [581,] "Isabel" "Alice" "Fernando"
## [582,] "Isabel" "Alice" "Gabriel"
## [583,] "Isabel" "Alice" "Hannah"
## [584,] "Isabel" "Alice" "James"
## [585,] "Isabel" "Bob" "Alice"
## [586,] "Isabel" "Bob" "Carlos"
## [587,] "Isabel" "Bob" "Diana"
## [588,] "Isabel" "Bob" "Eva"
## [589,] "Isabel" "Bob" "Fernando"
## [590,] "Isabel" "Bob" "Gabriel"
## [591,] "Isabel" "Bob" "Hannah"
## [592,] "Isabel" "Bob" "James"
## [593,] "Isabel" "Carlos" "Alice"
## [594,] "Isabel" "Carlos" "Bob"
## [595,] "Isabel" "Carlos" "Diana"
## [596,] "Isabel" "Carlos" "Eva"
## [597,] "Isabel" "Carlos" "Fernando"
## [598,] "Isabel" "Carlos" "Gabriel"
## [599,] "Isabel" "Carlos" "Hannah"
## [600,] "Isabel" "Carlos" "James"
## [601,] "Isabel" "Diana" "Alice"
## [602,] "Isabel" "Diana" "Bob"
## [603,] "Isabel" "Diana" "Carlos"
## [604,] "Isabel" "Diana" "Eva"
## [605,] "Isabel" "Diana" "Fernando"
## [606,] "Isabel" "Diana" "Gabriel"
## [607,] "Isabel" "Diana" "Hannah"
## [608,] "Isabel" "Diana" "James"
## [609,] "Isabel" "Eva" "Alice"
## [610,] "Isabel" "Eva" "Bob"
## [611,] "Isabel" "Eva" "Carlos"
## [612,] "Isabel" "Eva" "Diana"
## [613,] "Isabel" "Eva" "Fernando"
## [614,] "Isabel" "Eva" "Gabriel"
## [615,] "Isabel" "Eva" "Hannah"
## [616,] "Isabel" "Eva" "James"
## [617,] "Isabel" "Fernando" "Alice"
## [618,] "Isabel" "Fernando" "Bob"
## [619,] "Isabel" "Fernando" "Carlos"
## [620,] "Isabel" "Fernando" "Diana"
## [621,] "Isabel" "Fernando" "Eva"
## [622,] "Isabel" "Fernando" "Gabriel"
## [623,] "Isabel" "Fernando" "Hannah"
## [624,] "Isabel" "Fernando" "James"
## [625,] "Isabel" "Gabriel" "Alice"
## [626,] "Isabel" "Gabriel" "Bob"
## [627,] "Isabel" "Gabriel" "Carlos"
## [628,] "Isabel" "Gabriel" "Diana"
## [629,] "Isabel" "Gabriel" "Eva"
## [630,] "Isabel" "Gabriel" "Fernando"
## [631,] "Isabel" "Gabriel" "Hannah"
## [632,] "Isabel" "Gabriel" "James"
## [633,] "Isabel" "Hannah" "Alice"
## [634,] "Isabel" "Hannah" "Bob"
## [635,] "Isabel" "Hannah" "Carlos"
## [636,] "Isabel" "Hannah" "Diana"
## [637,] "Isabel" "Hannah" "Eva"
## [638,] "Isabel" "Hannah" "Fernando"
## [639,] "Isabel" "Hannah" "Gabriel"
## [640,] "Isabel" "Hannah" "James"
## [641,] "Isabel" "James" "Alice"
## [642,] "Isabel" "James" "Bob"
## [643,] "Isabel" "James" "Carlos"
## [644,] "Isabel" "James" "Diana"
## [645,] "Isabel" "James" "Eva"
## [646,] "Isabel" "James" "Fernando"
## [647,] "Isabel" "James" "Gabriel"
## [648,] "Isabel" "James" "Hannah"
## [649,] "James" "Alice" "Bob"
## [650,] "James" "Alice" "Carlos"
## [651,] "James" "Alice" "Diana"
## [652,] "James" "Alice" "Eva"
## [653,] "James" "Alice" "Fernando"
## [654,] "James" "Alice" "Gabriel"
## [655,] "James" "Alice" "Hannah"
## [656,] "James" "Alice" "Isabel"
## [657,] "James" "Bob" "Alice"
## [658,] "James" "Bob" "Carlos"
## [659,] "James" "Bob" "Diana"
## [660,] "James" "Bob" "Eva"
## [661,] "James" "Bob" "Fernando"
## [662,] "James" "Bob" "Gabriel"
## [663,] "James" "Bob" "Hannah"
## [664,] "James" "Bob" "Isabel"
## [665,] "James" "Carlos" "Alice"
## [666,] "James" "Carlos" "Bob"
## [667,] "James" "Carlos" "Diana"
## [668,] "James" "Carlos" "Eva"
## [669,] "James" "Carlos" "Fernando"
## [670,] "James" "Carlos" "Gabriel"
## [671,] "James" "Carlos" "Hannah"
## [672,] "James" "Carlos" "Isabel"
## [673,] "James" "Diana" "Alice"
## [674,] "James" "Diana" "Bob"
## [675,] "James" "Diana" "Carlos"
## [676,] "James" "Diana" "Eva"
## [677,] "James" "Diana" "Fernando"
## [678,] "James" "Diana" "Gabriel"
## [679,] "James" "Diana" "Hannah"
## [680,] "James" "Diana" "Isabel"
## [681,] "James" "Eva" "Alice"
## [682,] "James" "Eva" "Bob"
## [683,] "James" "Eva" "Carlos"
## [684,] "James" "Eva" "Diana"
## [685,] "James" "Eva" "Fernando"
## [686,] "James" "Eva" "Gabriel"
## [687,] "James" "Eva" "Hannah"
## [688,] "James" "Eva" "Isabel"
## [689,] "James" "Fernando" "Alice"
## [690,] "James" "Fernando" "Bob"
## [691,] "James" "Fernando" "Carlos"
## [692,] "James" "Fernando" "Diana"
## [693,] "James" "Fernando" "Eva"
## [694,] "James" "Fernando" "Gabriel"
## [695,] "James" "Fernando" "Hannah"
## [696,] "James" "Fernando" "Isabel"
## [697,] "James" "Gabriel" "Alice"
## [698,] "James" "Gabriel" "Bob"
## [699,] "James" "Gabriel" "Carlos"
## [700,] "James" "Gabriel" "Diana"
## [701,] "James" "Gabriel" "Eva"
## [702,] "James" "Gabriel" "Fernando"
## [703,] "James" "Gabriel" "Hannah"
## [704,] "James" "Gabriel" "Isabel"
## [705,] "James" "Hannah" "Alice"
## [706,] "James" "Hannah" "Bob"
## [707,] "James" "Hannah" "Carlos"
## [708,] "James" "Hannah" "Diana"
## [709,] "James" "Hannah" "Eva"
## [710,] "James" "Hannah" "Fernando"
## [711,] "James" "Hannah" "Gabriel"
## [712,] "James" "Hannah" "Isabel"
## [713,] "James" "Isabel" "Alice"
## [714,] "James" "Isabel" "Bob"
## [715,] "James" "Isabel" "Carlos"
## [716,] "James" "Isabel" "Diana"
## [717,] "James" "Isabel" "Eva"
## [718,] "James" "Isabel" "Fernando"
## [719,] "James" "Isabel" "Gabriel"
## [720,] "James" "Isabel" "Hannah"
Ahora que hemos calculado todas las permutaciones posibles, podemos calcular la probabilidad de que Alice gane la competencia y Bob quede en segundo lugar.
library(gtools)
resultados <- permutations(10, 3, v = data_scientists)
# Total de resultados: nrow(resultados)
total <- nrow(resultados)
# Probabilidad de que Frede gane:
mean(resultados[, 1] == "Alice" & resultados[, 2] == "Bob")
## [1] 0.01111111
El orden no importa cuando, por ejemplo, formamos grupos de 2 para participar en la competencia.
combinations(10, 2, v = data_scientists)
## [,1] [,2]
## [1,] "Alice" "Bob"
## [2,] "Alice" "Carlos"
## [3,] "Alice" "Diana"
## [4,] "Alice" "Eva"
## [5,] "Alice" "Fernando"
## [6,] "Alice" "Gabriel"
## [7,] "Alice" "Hannah"
## [8,] "Alice" "Isabel"
## [9,] "Alice" "James"
## [10,] "Bob" "Carlos"
## [11,] "Bob" "Diana"
## [12,] "Bob" "Eva"
## [13,] "Bob" "Fernando"
## [14,] "Bob" "Gabriel"
## [15,] "Bob" "Hannah"
## [16,] "Bob" "Isabel"
## [17,] "Bob" "James"
## [18,] "Carlos" "Diana"
## [19,] "Carlos" "Eva"
## [20,] "Carlos" "Fernando"
## [21,] "Carlos" "Gabriel"
## [22,] "Carlos" "Hannah"
## [23,] "Carlos" "Isabel"
## [24,] "Carlos" "James"
## [25,] "Diana" "Eva"
## [26,] "Diana" "Fernando"
## [27,] "Diana" "Gabriel"
## [28,] "Diana" "Hannah"
## [29,] "Diana" "Isabel"
## [30,] "Diana" "James"
## [31,] "Eva" "Fernando"
## [32,] "Eva" "Gabriel"
## [33,] "Eva" "Hannah"
## [34,] "Eva" "Isabel"
## [35,] "Eva" "James"
## [36,] "Fernando" "Gabriel"
## [37,] "Fernando" "Hannah"
## [38,] "Fernando" "Isabel"
## [39,] "Fernando" "James"
## [40,] "Gabriel" "Hannah"
## [41,] "Gabriel" "Isabel"
## [42,] "Gabriel" "James"
## [43,] "Hannah" "Isabel"
## [44,] "Hannah" "James"
## [45,] "Isabel" "James"
Si ahora es un solo equipo el que recibirá el premio, podemos calcular la probabilidad de que el equipo formado por Eva e Isabel sea el ganador.
resultados <- combinations(10, 2, v = data_scientists)
# Total de resultados:
nrow(resultados)
## [1] 45
# Probabilidad:
mean((resultados[, 1] == "Eva" & resultados[, 2] == "Isabel") |
(resultados[, 1] == "Isabel" & resultados[, 2] == "Eva"))
## [1] 0.02222222
Aunque podríamos calcular la probabilidad generando todas las combinaciones posibles, en R es común utilizar el método de Montecarlo para estimar esta probabilidad mediante simulaciones. En lugar de generar todas las combinaciones, solo necesitamos tomar una muestra de dos personas que conformarían el equipo ganador. Recordemos que asumimos que todos los participantes tienen las mismas probabilidades de ganar.
sample(data_scientists, 2)
## [1] "Carlos" "Alice"
A continuación, deberíamos repetir este experimento múltiples veces, almacenar los resultados de cada muestreo y calcular la proporción de veces que el equipo ganador está compuesto por Eva e Isabel.
n <- 10000
resultado <- replicate(n, {
equipo <- sample(data_scientists, 2)
cumple_condicion <- (equipo[1] == "Eva" & equipo[2] == "Isabel") |
(equipo[2] == "Eva" & equipo[1] == "Isabel")
cumple_condicion
})
mean(resultado)
## [1] 0.0218
Como observamos previamente, el valor tiende a estabilizarse a medida que aumentamos el número de repeticiones del experimento. Hemos simulado el experimento 10,000 veces. No obstante, ¿cuántas repeticiones serían necesarias para tener confianza en los resultados de la simulación?
De manera intuitiva, podemos afirmar que la precisión de la probabilidad estimada mejora con un mayor número de experimentos. Para encontrar un número adecuado de repeticiones para nuestra simulación, podemos realizar múltiples simulaciones con distintos tamaños de muestra.
Primero, crearemos un vector numérico que especificará la cantidad de veces que se repetirá el experimento en cada simulación. Este vector incluirá valores como 10, 20, 40, 80, 160, y así sucesivamente. Esto significa que en la primera simulación repetiremos el experimento 10 veces, en la segunda 20 veces, y así sucesivamente.
num_veces <- 10*2^(1:17)
num_veces
## [1] 20 40 80 160 320 640 1280 2560 5120
## [10] 10240 20480 40960 81920 163840 327680 655360 1310720
Luego, utilizamos el código que creamos para replicar el experimento para crear una función llamada probabilidad_por_muestra:
probabilidad_por_muestra <- function(n) {
resultado <- replicate(n, {
equipo <- sample(data_scientists, 2)
cumple_condicion <- (equipo[1] == "Eva" & equipo[2] == "Isabel") |
(equipo[2] == "Eva" & equipo[1] == "Isabel")
cumple_condicion
})
mean(resultado)
}
Ya tenemos una función que nos permite replicar el experimento cuantas veces querramos. Por ejemplo, en la sección anterior simulamos 10 mil experimentos. Ahora que tenemos creada la función haríamos:
# Probabilidad utilizando funciones:
probabilidad_por_muestra(10000)
## [1] 0.0233
Recuerda que estamos trabajando con simulaciones, por lo que cada vez que ejecutemos esta función, la probabilidad puede variar debido a la naturaleza aleatoria de la muestra.
Para aplicar una función a cada valor de un vector, utilizamos la función sapply(vector, funcion), donde vector es el vector que contiene los datos a los que deseamos aplicar la función, y funcion es la función que queremos aplicar a cada elemento del vector.
prob <- sapply(num_veces, probabilidad_por_muestra)
prob
## [1] 0.00000000 0.00000000 0.05000000 0.01875000 0.01562500 0.02031250
## [7] 0.03359375 0.02539062 0.02617188 0.02109375 0.01962891 0.02258301
## [13] 0.02351074 0.02272339 0.02202148 0.02242889 0.02207794
Esto nos proporciona las probabilidades en función del número de repeticiones del experimento. Ahora, representemos estos resultados en un diagrama de dispersión para observar cómo convergen.
#Instalar los paquetes gráficos
install.packages("ggplot2")
install.packages("dplyr")
install.packages("plotly")
library(ggplot2)
library(dplyr)
##
## 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
probabilidades <- data.frame(
n = num_veces,
probabilidad = prob
)
probabilidades %>%
ggplot() +
aes(n, probabilidad) +
geom_line() +
geom_point() +
xlab("# de veces del experimento")
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
g3<-probabilidades %>%
ggplot() +
aes(n, probabilidad) +
geom_line() +
geom_point() +
xlab("# de veces del experimento")
ggplotly(g3)
También podemos ajustar la escala para enfocar las probabilidades en los valores de menor número de experimentos y añadir una línea de referencia que muestre el valor de la probabilidad teórica que calculamos anteriormente.
library(ggplot2)
library(dplyr)
probabilidades %>%
ggplot() +
aes(n, probabilidad) +
geom_line() +
geom_point() +
xlab("# de veces del experimento") +
scale_x_continuous(trans = "log2") +
geom_hline(yintercept = 0.022222, color = "blue", lty = 2)
library(plotly)
g2<-probabilidades %>%
ggplot() +
aes(n, probabilidad) +
geom_line() +
geom_point() +
xlab("# de veces del experimento") +
scale_x_continuous(trans = "log2") +
geom_hline(yintercept = 0.022222, color = "blue", lty = 2)
ggplotly(g2)
Observamos que, para este experimento, repitiéndolo 10,000 veces (eje\(-x = 4\) porque \(10^4\)) ya proporciona una buena aproximación al valor real.
Repasemos los conceptos aprendidos con un nuevo ejemplo. En una clase de Data Science for Managers hay 50 estudiantes. Utilizando la simulación de Montecarlo, estimaremos la probabilidad de que al menos dos personas compartan el mismo día de cumpleaños. (Excluyendo a aquellos que cumplen años el 29 de febrero).
Primero, enumeremos todos los días del año disponibles para cumpleaños:
dias <- 1:365
Generemos una muestra aleatoria de 50 números del vector dias, esta vez con reemplazo, ya que es posible que varias personas compartan el mismo día de cumpleaños. Almacenemos esta muestra en la variable colegas.
colegas <- sample(dias, 50, replace = TRUE)
Para verificar si alguno de los valores se repite, utilizaremos la
función duplicated()
, que nos permite identificar si
existen valores duplicados dentro del vector:
duplicated(colegas)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
## [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
## [37] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE TRUE
## [49] FALSE FALSE
Finalmente, para determinar si existe algún valor TRUE
en el vector de resultados, utilizaremos la función
any()
:
any(duplicated(colegas))
## [1] TRUE
El resultado nos indicará si es verdadero o no que al menos dos
personas cumplan años el mismo día. Para estimar la probabilidad
mediante simulación de Montecarlo, necesitamos repetir el experimento
muchas veces y calcular la proporción de veces que obtenemos como
resultado TRUE
.
# Simulación de Montecarlo con 10 mil repeticiones
num_veces <- 10000
resultados <- replicate(num_veces, {
colegas <- sample(dias, 50, replace = TRUE)
# Retorna un valor lógico de si hay duplicados
any(duplicated(colegas))
})
# Probabilidad:
mean(resultados)
## [1] 0.9744
Observamos que la probabilidad estimada es bastante alta, superando el 95%. ¿Qué ocurriría si tenemos una clase con 25 personas?
Para ello, modificaremos el código anterior y crearemos la variable
clase
que indicará el número de estudiantes en esa
clase:
# Simulación de Montecarlo con 10 mil repeticiones
num_veces <- 10000
clase <- 25
resultados <- replicate(num_veces, { # Retorna un vector lógico
colegas <- sample(dias, clase, replace = TRUE)
any(duplicated(colegas))
})
# Probabilidad:
mean(resultados)
## [1] 0.569
Ahora, creemos la función calcula_probabilidad
para
estimar la probabilidad de encontrar al menos dos personas con el mismo
día de cumpleaños en una clase de 25 estudiantes. Esta vez, debemos
especificar que el muestreo es con “reemplazo” ya que, por defecto, la
función sample()
realiza el muestreo “sin reemplazo”.
# Creamos la función
estima_probabilidad <- function(clase, num_veces = 10000){
resultados <- replicate(num_veces, { # Retorna un vector lógico
colegas <- sample(dias, clase, replace = TRUE)
any(duplicated(colegas))
})
# Probabilidad:
mean(resultados)
}
estima_probabilidad(25)
## [1] 0.5764
Finalmente, ahora que tenemos una función que calcula la probabilidad
en función del número de personas en un salón, podemos crear un vector
numérico con el total de personas en diferentes salones y aplicar la
función que hemos creado a cada elemento del vector. Almacenaremos el
resultado en la variable prob
.
# Creamos 100 distintos salones de clase
# El primer salón con 1 persona, el último salón con 80 personas
clases <- 1:100
# Estimamos la probabilidad dependiendo del número de estudiantes por salón
prob <- sapply(clases, estima_probabilidad)
prob
## [1] 0.0000 0.0025 0.0082 0.0165 0.0253 0.0375 0.0589 0.0794 0.0935 0.1172
## [11] 0.1406 0.1751 0.1857 0.2247 0.2462 0.2921 0.3094 0.3435 0.3801 0.4145
## [21] 0.4403 0.4752 0.5046 0.5418 0.5688 0.6000 0.6244 0.6570 0.6821 0.7105
## [31] 0.7384 0.7528 0.7797 0.7920 0.8157 0.8297 0.8466 0.8643 0.8793 0.8884
## [41] 0.9039 0.9149 0.9224 0.9368 0.9386 0.9492 0.9538 0.9610 0.9627 0.9722
## [51] 0.9735 0.9791 0.9803 0.9860 0.9855 0.9891 0.9908 0.9920 0.9926 0.9942
## [61] 0.9945 0.9962 0.9972 0.9972 0.9979 0.9981 0.9995 0.9983 0.9987 0.9987
## [71] 0.9996 0.9991 0.9997 0.9997 0.9998 1.0000 1.0000 0.9999 1.0000 0.9999
## [81] 0.9999 1.0000 1.0000 0.9999 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
## [91] 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000
De esta manera, al graficar los resultados en un diagrama de dispersión, podemos observar cómo aumenta la probabilidad a medida que el número de estudiantes en el salón aumenta.
probabilidades <- data.frame(
n = clases,
probabilidad = prob
)
g1<-probabilidades %>%
ggplot() +
aes(n, probabilidad) +
geom_point() +
xlab("Número de alumnos en cada clase")
g1
library(plotly)
ggplotly(g1)
Ahora podemos impresionar a nuestros amigos de diferentes grupos al afirmar que, si están en un salón con 60 personas, “pueden apostar” a que hay al menos dos personas que cumplen años el mismo día. Aunque no es una certeza absoluta, las probabilidades están claramente a nuestro favor.
Dos estudiantes del curso de Data Science con R, Alonso y Georgina, en sus ratos libres suelen jugar ajedrez. Dada la experiencia de Georgina, ella tiene 60% de ganar cada vez que juega con Alonso. Sin utilizar simulación de Montecarlo ¿Cuál es la probabilidad de que al jugar 4 veces seguidas, Alonso haya ganado al menos una vez.
Estima la probabilidad anterior utilizando simulación de Montecarlo. Utiliza el siguiente código para generar una muestra de 4 juegos, donde Alonso tiene una probabilidad de 60% de perder ante Georgina.
En el ejercicio anterior usamos como probabilidad de que Alonso
gane como 40%. Ahora, crea la función probabilidad_de_ganar
que tome como input la probabilidad \(p\) de que Alonso gane. Luego, asigna esta
secuencia seq(0.4, 0.95, 0.025)
en un vector \(p\) para, finalmente, aplicar la función
creada a cada valor del vector \(p\) y
almacena el resultado en la variable prob
. Reporta un
diagrama de dispersión del vector \(p\)
en el eje\(-x\) y del vector
prob
en el eje\(-y\).
Vamos a trabajar en conjunto para resolver un ejercicio que reúne todo lo que hemos aprendido en este capítulo: el problema de Monty Hall.
Monty Hall, el famoso presentador de televisión, popularizó un concurso que replicaremos a continuación. En el concurso, tenemos tres puertas frente a nosotros:
Detrás de una de estas puertas se esconde un auto nuevo, mientras que detrás de las otras dos hay cabras. Como participantes, debemos elegir una puerta. Lo que se encuentre detrás será nuestro.
Supongamos que elegimos la puerta número 2. Después de hacer nuestra elección, Monty Hall nos informa que él nos ayudará abriendo una de las otras puertas. Monty abre una de las puertas restantes y revela que hay una cabra detrás de la puerta número 3.
“Les voy a dar la oportunidad de cambiar de puerta y esa será su elección final. ¿Cambiarían de puerta o se quedarían con la que eligieron inicialmente?”
Intuitivamente, cuando todas las puertas estaban cerradas, la probabilidad de que el auto estuviera detrás de cualquiera de las tres puertas era \(\displaystyle \frac{1}{3}\approx 0.3333\). Por lo tanto, parecía que no importaba cuál puerta elegir. Sin embargo, cuando Monty abre la puerta número 3 y revela una cabra, nos da nueva información. La pregunta ahora es si las probabilidades han cambiado.
Aunque este es un problema matemático avanzado que se puede abordar mediante técnicas de cambio de variable, podemos usar una simulación de Montecarlo para estimar las probabilidades y resolver el problema sin depender de fórmulas matemáticas complejas.
Comencemos simulando el experimento. Inicialmente tenemos tres puertas: puerta 1, 2 y 3. Crearemos una variable llamada puertas para representarlas.
puertas <- c("puerta 1", "puerta 2", "puerta 3")
Luego, sabemos que detrás de las puertas hay un auto y dos cabras
distribuidos aleatoriamente. Utilizaremos la función sample
para asignar aleatoriamente estos elementos detrás de las puertas.
premios <- sample(c("auto", "cabra", "cabra"))
Como Monty Hall sabe dónde se encuentra el premio, crearemos una
variable llamada puerta_premio
para almacenar la ubicación
del auto.
puerta_premio <- puertas[premios == "auto"]
A continuación, elegimos una puerta al azar y almacenamos nuestra
selección en la variable eleccion
.
eleccion <- sample(puertas, 1)
Aquí tienes el texto revisado:
Dado que ya hemos elegido nuestra puerta, simularemos la elección de Monty Hall sobre qué puerta abrir. Monty, como presentador, seleccionará una puerta que no contenga el premio ni sea la puerta que elegimos.
puerta_que_abre <- sample(puertas[!puertas %in% c(eleccion, puerta_premio)],1)
Finalmente, combinaremos todo el código y, en la última línea, agregaremos una comparación para verificar si la puerta con el premio coincide con nuestra elección. En esta simulación, optaremos por no cambiar de puerta, por lo que nuestra elección permanecerá igual.
puertas <- c("puerta 1", "puerta 2", "puerta 3")
premios <- sample(c("auto", "cabra", "cabra"))
puerta_premio <- puertas[premios == "auto"]
eleccion <- sample(puertas, 1)
puerta_que_abre <- sample(puertas[!puertas %in% c(eleccion, puerta_premio)],1)
eleccion == puerta_premio
## [1] TRUE
Una vez que hemos creado nuestro experimento, vamos a simular dos escenarios: uno en el que nos mantenemos con nuestra elección inicial y otro en el que decidimos cambiar de puerta.
Replicaremos el experimento unas 10,000 veces para calcular la proporción de veces que ganaríamos si nos mantenemos con nuestra elección inicial.
num_veces <- 10000
resultados <- replicate(num_veces, {
puertas <- c("puerta 1", "puerta 2", "puerta 3")
premios <- sample(c("auto", "cabra", "cabra"))
puerta_premio <- puertas[premios == "auto"]
eleccion <- sample(puertas, 1)
puerta_que_abre <- sample(puertas[!puertas %in% c(eleccion, puerta_premio)],1)
eleccion == puerta_premio
})
mean(resultados)
## [1] 0.3349
Observamos que la probabilidad obtenida a partir de la simulación de Montecarlo se aproxima bastante a la probabilidad que habíamos calculado intuitivamente. En otras palabras, si nos mantenemos con nuestra elección inicial, tenemos aproximadamente un 33.33% de probabilidad de ganar.
Pero, ¿qué sucede si decidimos cambiar de puerta? ¿La probabilidad de ganar sigue siendo la misma?
Vamos a utilizar el código y realizar una modificación para incluir
la variable nueva_eleccion
, que representará el cambio de
puerta.
num_veces <- 10000
resultados <- replicate(num_veces, {
puertas <- c("puerta 1", "puerta 2", "puerta 3")
premios <- sample(c("auto", "cabra", "cabra"))
puerta_premio <- puertas[premios == "auto"]
eleccion <- sample(puertas, 1)
puerta_que_abre <- sample(puertas[!puertas %in% c(eleccion, puerta_premio)],1)
nueva_eleccion <- puertas[!puertas %in% c(eleccion, puerta_que_abre)]
nueva_eleccion == puerta_premio
})
mean(resultados)
## [1] 0.6641
Como podemos observar, cambiar de puerta en el show nos ofrece una probabilidad de ganar del 66.66%, mientras que mantener nuestra elección inicial solo nos da un 33.33%.
Aunque pueda parecer contraintuitivo, desde un punto de vista estadístico, es más ventajoso cambiar de puerta en lugar de confiar únicamente en la suerte y mantener la elección inicial.
# Ejercicio 1
prob <- 5 / 6
prob_3_lanzamientos <- prob^3
prob_3_lanzamientos
## [1] 0.5787037
# Ejercicio 2
total_canicas <- 6 + 2 + 5
prob_verde <- 2 / total_canicas
prob_verde
## [1] 0.1538462
# Ejercicio 3
prob_no_verde <- (6 + 5) / total_canicas
prob_no_verde
## [1] 0.8461538
# Ejercicio 4
roja <- 6
verde <- 2
azul <- 5
total_canicas <- roja + verde + azul
# Probabilidad de sacar una canica roja primero
prob_roja_primera <- roja / total_canicas
# Probabilidad de sacar una canica que no sea roja en el segundo intento
total_canicas_reducido <- total_canicas - 1
prob_no_roja_segunda <- (verde + azul) / total_canicas_reducido
# Probabilidad conjunta
prob_roja_y_no_roja <- prob_roja_primera * prob_no_roja_segunda
prob_roja_y_no_roja
## [1] 0.2692308
# Ejercicio 5
# La probabilidad de que la segunda canica no sea roja es la misma
prob_no_roja_segunda_reemplazo <- (verde + azul) / total_canicas
# Probabilidad conjunta con reemplazo
prob_roja_y_no_roja_reemplazo <- prob_roja_primera * prob_no_roja_segunda_reemplazo
prob_roja_y_no_roja_reemplazo
## [1] 0.2485207
# Ejercicio 6
total_cartas <- 7
prob_numero_4 <- 1 / total_cartas
prob_numero_4
## [1] 0.1428571
# Ejercicio 7
total_cartas <- 10
numeros_mayores_que_8 <- 2 # 9 y 10
prob_mayor_que_8 <- numeros_mayores_que_8 / total_cartas
prob_mayor_que_8
## [1] 0.2
# Ejercicio 8
total_estudiantes <- 12
prob_hombre <- 4 / total_estudiantes
prob_hombre
## [1] 0.3333333
# Ejercicio 9
prob_mujer <- 8 / total_estudiantes
prob_mujer
## [1] 0.6666667
# Ejercicio 10
prob_hombre_primero <- 4 / total_estudiantes
total_estudiantes_reducido <- total_estudiantes - 1
prob_hombre_segundo <- 3 / total_estudiantes_reducido
# Probabilidad conjunta
prob_dos_hombres <- prob_hombre_primero * prob_hombre_segundo
prob_dos_hombres
## [1] 0.09090909
# Probabilidad de que Georgina gane los 4 juegos
prob <- 0.6^4
# Probabilidad de que Alonso gane al menos una vez
1 - prob
## [1] 0.8704
resultado_juegos <- sample(c("pierde","gana"), 4, replace = TRUE, prob = c(0.6, 0.4))
# Veces en que ejecuto la simulación
num_veces <- 10000
# Generamos los resultados de los experimentos de que gane Alonso
alonso_gana <- replicate(num_veces, {
resultado_juegos <- sample(c("pierde","gana"), 4, replace = TRUE, prob = c(0.6, 0.4))
any(resultado_juegos == "gana")
})
# Estimamos la probabilidad
mean(alonso_gana)
## [1] 0.8692
# Creamos la función
probabilidad_de_ganar <- function(p){
num_veces <- 10000
alonso_gana <- replicate(num_veces, {
resultado_juegos <- sample(c("pierde","gana"), 4, replace = TRUE, prob = c(1-p, p))
any(resultado_juegos == "gana")
})
mean(alonso_gana)
}
# Creamos nuestro vector con distintas probabilidades
p <- seq(0.4, 0.95, 0.025)
prob <- sapply(p, probabilidad_de_ganar)
plot(p, prob, xlab="p: probabilidad de que Alonso gane en cada juego",
ylab="prob: prob. que Alonso gane al menos un juego")