Punto 1 - Simulación Resultado de la Suma del Lanzamiento de dos Dados
###A### _Función para simular el lanzamiento de 2 dados y sumarlos
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
Lanza_dados=function(){
dado1=1:6
dado2=1:6
x=sample(dado1,1)+sample(dado2,1)
return(x)
}
Lanza_dados()
## [1] 8
###B### _Función ajustada incluyendo N lanzamientos y cuente el No de veces que se presenta un un resultado objetivo (de la suma de los 2 dados)__
Al utiliza la función #sample#, se debe indicar que se debe hacer el reemplazo, para que en todos los lanzamientos se tengan los 6 números, de lo contrario, en el 2 lanzamiento simulado la función no toma el valor arrojado en el primer ejercicio. Son eventos independientes.
Lanza_dados2=function(N_lanza,valor_objetivo){
dado1=1:6
dado2=1:6
x=sample(dado1,size = N_lanza,replace = TRUE)+sample(dado2,size = N_lanza,replace = TRUE)
return(sum(x==valor_objetivo))
}
Lanza_dados2(N_lanza = 10000,valor_objetivo = 8)
## [1] 1437
###C### _Comparación resultados de la simulación con la probabilidad esperada__
Con la función anterior, se realizará la simulación para 10.000 lanzamientos.
###Paso 1.### Determinar la probabilidad teórica
La función expand.grid se utiliza para crear un dataframe a partir de vectores o factores, los cuales para nuestro ejercicio son el espacio muestral para el lanzamiento de los dos dados, arrojando un dataframe con todas las posibles combinaciones.
Apply: Retorna un vector/array/valores luego de aplicar una función a una matriz/array El nombre de X determina el vector sobre el cual se aplicara la función, el margen determina la estructura del dataframe, en este caso es 1 fila. Posteriormente se indica la función, que en este caso es la suma.
El próximo paso, unimos en un solo dataframe los subconjuntos generados (combinaciones del lanzamiento de los dados y la suma resultante)
Para hallar la probabilidad teórica se divide los posibles resultados entre el número de resultados posibles, para lo cual generamos una tabla y un histograma para observar la distribución esperada
Le indicamos a nuestra función que realizaremos el ejercicio con 10.000 lanzamientos. Para efectos de analizar el posible impacto del tamaño de la muestra, realizaremos el ejercicio con 1 millón y 100 millones de lanzamientos
dado1=1:6
dado2=1:6
espacio=expand.grid(dado1,dado2)
data.frame(espacio)
| Var1 | Var2 |
|---|---|
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
| 1 | 2 |
| 2 | 2 |
| 3 | 2 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 1 | 3 |
| 2 | 3 |
| 3 | 3 |
| 4 | 3 |
| 5 | 3 |
| 6 | 3 |
| 1 | 4 |
| 2 | 4 |
| 3 | 4 |
| 4 | 4 |
| 5 | 4 |
| 6 | 4 |
| 1 | 5 |
| 2 | 5 |
| 3 | 5 |
| 4 | 5 |
| 5 | 5 |
| 6 | 5 |
| 1 | 6 |
| 2 | 6 |
| 3 | 6 |
| 4 | 6 |
| 5 | 6 |
| 6 | 6 |
y=apply(espacio,1,sum)
data.frame(espacio,y)
| Var1 | Var2 | y |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 1 | 4 |
| 4 | 1 | 5 |
| 5 | 1 | 6 |
| 6 | 1 | 7 |
| 1 | 2 | 3 |
| 2 | 2 | 4 |
| 3 | 2 | 5 |
| 4 | 2 | 6 |
| 5 | 2 | 7 |
| 6 | 2 | 8 |
| 1 | 3 | 4 |
| 2 | 3 | 5 |
| 3 | 3 | 6 |
| 4 | 3 | 7 |
| 5 | 3 | 8 |
| 6 | 3 | 9 |
| 1 | 4 | 5 |
| 2 | 4 | 6 |
| 3 | 4 | 7 |
| 4 | 4 | 8 |
| 5 | 4 | 9 |
| 6 | 4 | 10 |
| 1 | 5 | 6 |
| 2 | 5 | 7 |
| 3 | 5 | 8 |
| 4 | 5 | 9 |
| 5 | 5 | 10 |
| 6 | 5 | 11 |
| 1 | 6 | 7 |
| 2 | 6 | 8 |
| 3 | 6 | 9 |
| 4 | 6 | 10 |
| 5 | 6 | 11 |
| 6 | 6 | 12 |
prob_teorica=table(y)/36
prob_teorica
## y
## 2 3 4 5 6 7 8
## 0.02777778 0.05555556 0.08333333 0.11111111 0.13888889 0.16666667 0.13888889
## 9 10 11 12
## 0.11111111 0.08333333 0.05555556 0.02777778
plot(2:12,prob_teorica,type="h")
Prueba_10k= Lanza_dados2(N_lanza = 10000,valor_objetivo = 8)/10000
Prueba_1m= Lanza_dados2(N_lanza = 1000000,valor_objetivo = 8)/1000000
Prueba_100m= Lanza_dados2(N_lanza = 100000000,valor_objetivo = 8)/100000000
Cons_prueba=data.frame(Prueba_10k,Prueba_1m,Prueba_100m)
Cons_prueba
| Prueba_10k | Prueba_1m | Prueba_100m |
|---|---|---|
| 0.1358 | 0.138888 | 0.1388746 |
Prueba_10k= Lanza_dados2(N_lanza = 10000,valor_objetivo = 8)/10000
Prueba_1m= Lanza_dados2(N_lanza = 1000000,valor_objetivo = 8)/1000000
Prueba_100m= Lanza_dados2(N_lanza = 100000000,valor_objetivo = 8)/100000000
Cons_prueba2=data.frame(Prueba_10k,Prueba_1m,Prueba_100m)
Cons_prueba2
| Prueba_10k | Prueba_1m | Prueba_100m |
|---|---|---|
| 0.138 | 0.138541 | 0.1388729 |