a) Crear una función sin entradas pero que simule el lanzamiento de dos dados legales y sume el resulado de ellos.
Se crea la función sim_lanzamiento() que define dos vectores unidimensionales del mismo tamaño representando los dos dados. Posteriormente se toma una muestra aleatoria (un solo lanzamiento) por cada vector y se suma. La función retorna el resultado de la suma.
dado1=1:6
dado2=1:6
sim_lanzamiento=function(){
dado1
dado2
x=sample(dado1,1)+sample(dado2,1)
return(x)
}
sim_lanzamiento()
## [1] 6
b) Generalizar la función para que tenga como entrada el total de lanzamientos y cuente los resultados de una condición en particular (ejemplo suma igual a 12).
Opción_1: Se crea la función sim_multi_lanzamientos() que recibe dos parámetros: nlanzamientos (número de lanzamientos) y valor_condicion (el valor de un determinado resultado deseado). Emplea un bucle for para repetir los nlanzamientos y llama a la función nlanzamientos() para generar resultados. retorna el total de lanzamientos para los cuales se obtuvo el valor establecido en valor_condicion
Opción_2: Se crea la función sim_multi_lanzamientos2() que recibe dos parámetros: nlanzamientos (número de lanzamientos) y valor_condicion (el valor de un determinado resultado deseado). Define en su interior los dos vectores unidimensionales que se corresponden con los dos dados.Toma una muestra de cada lanzamiento (recordar que son nlanzamientos) por cada dado (vectores) y las suma. Retorna el resultado de la suma.
# Opción 1
sim_multi_lanzamientos=function(nlanzamientos,valor_condicion){
lanzamientos=array(NA,nlanzamientos)
for(i in 1:nlanzamientos){
lanzamientos[i]=sim_lanzamiento()
}
return(sum(lanzamientos==valor_condicion))
}
sim_multi_lanzamientos(nlanzamientos = 1000,valor_condicion = 9)
## [1] 107
# Opción 2
sim_multi_lanzamientos2=function(nlanzamientos,valor_condicion){
dado1
dado2
x=sample(dado1,size = nlanzamientos,replace = TRUE)+sample(dado2,size = nlanzamientos,replace = TRUE)
return(sum(x==valor_condicion))
}
sim_multi_lanzamientos2(nlanzamientos = 1000,valor_condicion = 9)
## [1] 122
c) Con la función de b. compare los resultados de la simulación para 10000 lanzamientos con los resultados esperados de acuerdo a la probabilidad calculada con el total de combinaciones.
#Probabilidad Teorica (combinaciones)
espacio=expand.grid(dado1,dado2)
#espacio
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 = "b")
# Simulación con los valores 2 y 7 empleando 100, 1000 y 1 millón de lanzamientos.
sim_multi_lanzamientos2(nlanzamientos = 100,valor_condicion = 2)/100
## [1] 0
sim_multi_lanzamientos2(nlanzamientos = 100,valor_condicion = 7)/100
## [1] 0.23
sim_multi_lanzamientos2(nlanzamientos = 1000,valor_condicion = 2)/1000
## [1] 0.026
sim_multi_lanzamientos2(nlanzamientos = 1000,valor_condicion = 7)/1000
## [1] 0.131
sim_multi_lanzamientos2(nlanzamientos = 1000000,valor_condicion = 2)/1000000
## [1] 0.028073
sim_multi_lanzamientos2(nlanzamientos = 1000000,valor_condicion = 7)/1000000
## [1] 0.166325
Se genera el total de posibles combinaciones al lanzar los dos dados y respectiva suma. Este elemento se convierte en el espacio muestral del experimento.
Posteriormente se calculan las probabilidades teoricas de cada combinacion. A continuación se emplea la funcion sim_multi_lanzamientos2() creada en el paso anterior, para simular el lanzamiento de los dados y la probalidad de obtener los valores (sumas) 2 y 7. Se simulan 100, 1000 y 1 millon de lanzamientos. Se verificó que a medida que aumenta el numero de lanzamientos, la probabilidad experimetal de la simulacion se acerca cada vez mas a la probabilidad teórica.
poblacion=c(rep(x = 1,300),rep(x = 0,700))
#pob
muestra= function(n){
m=sample(poblacion,n)
x=sum(m)/n
return(x)
}
estimador_muestra=array(NA,1000)
for(i in 1:1000){
est=muestra(200)
estimador_muestra[i]=est
}
summary(estimador_muestra)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.2000 0.2800 0.3000 0.3001 0.3200 0.4200
hist(estimador_muestra, col="#336699")
abline(v = mean(estimador_muestra),col="red",lwd=4)
Se observa que los estimadores (p) de las muestras se concentran (frecuencia) alrededor de la media general de todo el vector “estimador_muestra”. Esta media del vector “estimador_muestra” es cercana al parámetro (P) teórico de la población que es P=0.3. Por otro lado, en esta distribución se observa una tendencia a ajustarse a la Distribución Normal con simetría alrededor de la media.