library(tidyverse)
SAA Práctica 1: Variable Aleatoria, Probabilidad y teorema central del límite
Requisitos previos:
- Teoría Temas 1.1 y 1.2
- Haber realizado la práctica 0.
1. Experimento aleatorio. Juegos con 2 dados de 6 caras
1.1 Define el espacio muestral cuando realizamos tiradas con dos dados donde obtenemos como resultado de cada experimento aleatorio la suma de los números de cada dado.
S = {2,3,4,5,6,7,8,9,10,11,12}
<- 6
caras_dado <- expand.grid(
combinaciones dado_1 = 1:caras_dado,
dado_2 = 1:caras_dado)
<- combinaciones %>%
combinaciones mutate(suma = dado_1 + dado_2)
combinaciones
dado_1 dado_2 suma
1 1 1 2
2 2 1 3
3 3 1 4
4 4 1 5
5 5 1 6
6 6 1 7
7 1 2 3
8 2 2 4
9 3 2 5
10 4 2 6
11 5 2 7
12 6 2 8
13 1 3 4
14 2 3 5
15 3 3 6
16 4 3 7
17 5 3 8
18 6 3 9
19 1 4 5
20 2 4 6
21 3 4 7
22 4 4 8
23 5 4 9
24 6 4 10
25 1 5 6
26 2 5 7
27 3 5 8
28 4 5 9
29 5 5 10
30 6 5 11
31 1 6 7
32 2 6 8
33 3 6 9
34 4 6 10
35 5 6 11
36 6 6 12
<- combinaciones %>%
s select(suma) %>%
distinct()
s
suma
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
<- s$suma
s s
[1] 2 3 4 5 6 7 8 9 10 11 12
1.2 Calcula las probabilidades de cada uno de los elementos del conjunto espacio muestral
<- combinaciones %>%
probs group_by(suma) %>%
summarise(n = n()) %>%
mutate(p = n/nrow(combinaciones))
1.3 Representa gráficamente, mediante un diagrama de columnas las probabilidades anteriores (eje y), donde aparezcan los resultados del espacio muestral en el eje x
%>%
probs ggplot(aes(x = suma, y = p)) +
geom_col() +
scale_x_continuous(breaks = 2:12)
1.4 ¿Los ensayos son dependientes o independientes?
Los ensayos son independientes. Ahora si lanzamos primero un dado y calculamos las probabilidades de obtener suma antes de tirar el otro, las probabilidades de obtener una suma dependen de lo que haya salido en el primer dado.
1.5 Calcula la probabilidad de obtener tres veces consecutivas un 7 en las tres primeras tiradas.
<- probs %>%
p_7 filter(suma == 7) %>%
select(p) %>% pull()
**3 p_7
[1] 0.00462963
2. Simulación experimento aleatorio con recompensa: dado y ruleta
2.1 Realiza el siguiente experimento utilizando código R y las librerías dplyr (sample_n y operador %>%) y ggplot2: Simula el lanzamiento de un dado. Cada vez que salga un 2, recibes 5 € (el tuyo y 4 de ganancia neta), cada vez que no aciertes, pierdes 1. Calcula la esperanza matemática teórica y mediante un experimento con 10000 simulaciones y una semilla = “777”.
Representa gráficamente en una línea, tu ganancia acumulada (eje y) sobre el número de simulaciones (eje x) y agrega una línea a la gráfica con la esperanza matemática, para medir el grado de suerte. Aplica ahora la semilla 999. ¿Con qué semilla ha habido más suerte?
set.seed(777)
<- 10000
sims <- data.frame(n=1:6, ev=rep(-1/6,times=6))
dado %>%
dado sample_n(sims, replace=TRUE) %>%
mutate(jugador = case_when((n == 2) ~ 4, TRUE ~ -1)) %>%
mutate(intento = row_number()) %>%
mutate(ganancia = cumsum(jugador)) %>%
mutate(ev = -1/6) %>%
mutate(ev = cumsum(ev)) %>%
ggplot(aes(intento, ganancia)) +
geom_line()+
geom_line(aes(x=intento, y=ev, color="red")) +
labs(title = "Tirada dado. 10000 simulaciones. Semilla 777") +
theme_bw()
set.seed(999)
<- 10000
sims <- data.frame(n=1:6, ev=rep(-1/6,times=6))
dado %>%
dado sample_n(sims, replace=TRUE) %>%
mutate(jugador = case_when((n == 2) ~ 4, TRUE ~ -1)) %>%
mutate(intento = row_number()) %>%
mutate(ganancia = cumsum(jugador)) %>%
mutate(ev = -1/6) %>%
mutate(ev = cumsum(ev)) %>%
ggplot(aes(intento, ganancia)) +
geom_line()+
geom_line(aes(x=intento, y=ev, color="red")) +
labs(title = "Tirada dado. 10000 simulaciones. Semilla 999") +
theme_bw()
2.2 Realiza el experimento, apostando al 7 en la ruleta, 1.000.000 veces, con 35 € de ganancia neta cada vez que aciertes y un euro de pérdidas cada vez que falles. Calcula la esperanza matemática teórica y la esperanza matemática según el experimento. Representa visualmente la línea de la esperanza matemática (si en cada tirada ganas Ex). Utiliza como semillas 1 y 123. En base a los resultados obtenidos ¿Qué opinas sobre la varianza y la esperanza matemática de este juego?
set.seed(1)
<- 1000000
sims <- data.frame(n=0:36, ev=rep(-1/37, times=37))
ruleta %>%
ruleta sample_n(sims, replace=TRUE) %>%
mutate(jugador = case_when(n == 7 ~ 35, TRUE ~ -1)) %>%
mutate(intento = row_number()) %>%
mutate(ganancia = cumsum(jugador)) %>%
mutate(ev = -1/37) %>%
mutate(ev = cumsum(ev)) %>%
ggplot(aes(intento, ganancia)) +
geom_line()+
geom_line(aes(x=intento, y=ev, color="red"))
set.seed(123)
<- 1000000
sims <- data.frame(n=0:36, ev=rep(-1/37, times=37))
ruleta %>%
ruleta sample_n(sims, replace=TRUE) %>%
mutate(jugador = case_when(n == 7 ~ 35, TRUE ~ -1)) %>%
mutate(intento = row_number()) %>%
mutate(ganancia = cumsum(jugador)) %>%
mutate(ev = -1/37) %>%
mutate(ev = cumsum(ev)) %>%
ggplot(aes(intento, ganancia)) +
geom_line()+
geom_line(aes(x=intento, y=ev, color="red"))
3. El teorema central del límite: lqsa
Utilizando el dataset “lqsa”, simula 1000 veces la extracción de muestras aleatorias de tamaño n = 15 de las 30 cartas. Calcula la media muestral para cada extracción y construye una matriz o data frame con las 5 variables numéricas de la baraja como columnas y en cada fila la media muestral del valor de cada extracción.
Calcula la media y la desviación típica de las mil filas para cada variable.
Representa gráficamente la distribución de los datos para cada variable. Utiliza geom_density() en lugar de barras. Ejemplo del experimento con la variable “locura”.
<- read.csv(
lqsa "https://raw.githubusercontent.com/jesusturpin/curintel2324/main/data/lqsa.csv"
)<- lqsa %>%
lqsa_n select_if(is.numeric)
<- function(df, n) {
simular_experimento <- sample_n(df, n)
muestra <- colMeans(muestra)
medias return(medias)
}
<- 1000
sims <- 15
n <- replicate(sims, simular_experimento(lqsa_n,n)) resultados
<- as.data.frame(t(resultados))
df_resultados %>% head() df_resultados
Poder Convivencia Liante Atractivo Locura
1 4.133333 9.933333 81.20000 12.40000 70.86667
2 6.133333 9.800000 75.73333 11.33333 66.40000
3 4.933333 9.200000 69.06667 12.40000 69.40000
4 3.000000 10.666667 68.26667 13.93333 69.13333
5 3.800000 8.933333 74.93333 12.06667 78.20000
6 4.400000 10.866667 65.86667 16.33333 62.53333
%>%
df_resultados ggplot(aes(x = Locura)) +
geom_histogram(bins = 39)
%>%
df_resultados ggplot(aes(x = Locura)) +
geom_density()
%>%
df_resultados ggplot(aes(x = Locura)) +
geom_histogram(aes(y = after_stat(density)), bins = 39, fill = "blue", color = "black") +
geom_density(color = "red") +
scale_y_continuous(sec.axis = sec_axis(~ . * length(df_resultados), name = "Probabilidad"))+
theme_bw()
%>%
df_resultados ggplot(aes(x = Locura)) +
geom_density()
Investiga por tu cuenta el tamaño de la muestra necesario para que se cumpla el teorema.
4. El problema del cumpleaños
Prueba el código del problema del cumpleaños variando los parámetros. Investiga, busca ejemplos y practica el funcionamiento de las funciones sapply, replicate y any
<- function(n) {
mismo_dia_cumple <- sample(1:365, n, replace = TRUE)
dias any(duplicated(dias))
}
<- function(n, B=10000) {
calcular_prob_sim <- replicate(B, mismo_dia_cumple(n))
resultados mean(resultados)
}
<- function(n){
calcular_prob_exac <- seq(365,365-n+1)/365
prob_unique 1 - prod(prob_unique)
}
<- seq(1,60)
n <- sapply(n, calcular_prob_sim, B=500)
prob_sim <- sapply(n, calcular_prob_exac)
prob_exac ggplot(data.frame(n, prob_sim, prob_exac), aes(n, prob_sim))+
geom_point()+
geom_line(aes(n, prob_exac), color="red")