PUNTO 1. Simulación Resultado de la Suma del Lanzamiento de dos Dados

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

Análisis

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.

PUNTO 2.- Simulación Concepto de Distribucción Muestral (Caso proporciones)

  1. Genere una población con una cantidad dada de 0 y 1.
    Se crea una población de 1000 individuos (300 ‘Unos’ (1) y 700 ‘Ceros’ (0))
poblacion=c(rep(x = 1,300),rep(x = 0,700))
#pob
  1. Crear una función que obtenga una muestra de esa población de a. y calcule el porcentaje de 1.
    Se crea la funcion “muestra()” que obtiene una muestra de tamaño n de la poblacion, suma los ‘Unos’ y obtiene el porcentaje de ‘Unos’ capturados en la muestra (estimador).
muestra= function(n){
  m=sample(poblacion,n)
  x=sum(m)/n
  return(x)
}
  1. Repita este proceso una cantidad (mas de 1000 veces) y guarde los porcentajes de cada iteración.
    Se asigna un tamaño de muestra n=200. Se toman 1000 muestras aleatorias y respectivos estimadores. Estos estimadores son almacenados en un vector unidimensional de tamaño 500 denominado “estimador_muestra”.
estimador_muestra=array(NA,1000)
for(i in 1:1000){
est=muestra(200)
estimador_muestra[i]=est
}
  1. Grafique los resultados de estos porcentajes y calcule algunos indicadores descriptivos (compare los resultados con la población generada inicialmente).
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)

Análisis

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.