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