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.

lanzadado=function(){
  
  dado1=1:6
  dado2=1:6
  x=sample(dado1,1,replace=TRUE)+sample(dado2,1,replace=TRUE) #size n
  return(x)
}

lanzadado()
## [1] 7

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).

simulamultlilanza=function(nlanza,valorcondi){
lanzamientos=array(NA,nlanza)
for (i in 1:nlanza){
  lanzamientos[i]=lanzadado()
  }
  return(sum(lanzamientos==valorcondi)/nlanza)}

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.

proba_estimada=simulamultlilanza(10000,12)
proba_estimada
## [1] 0.0321
dado1=1:6
dado2=1:6

esp_dado1=length(dado1)
esp_dado2=length(dado2)

espacio=expand.grid(dado1,dado2)
y=apply(espacio,1,sum)
valores_posibles=data.frame(espacio,y)
colnames(valores_posibles)<-c('d1','d2','suma(d1+d2)')

kbl(valores_posibles,    caption = "<center><strong>Posibles Combinaciones d1+d2</strong></center>") %>%
  kable_paper(bootstrap_options = "striped", full_width = FALSE,position = "left")
Posibles Combinaciones d1+d2
d1 d2 suma(d1+d2)
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)/(esp_dado1*esp_dado2)

kbl(prob_teorica,    caption = "<center><strong>Probabilidad teorica de suma de dados</strong></center>") %>%
  kable_paper(bootstrap_options = "striped", full_width = FALSE,position = "left")
Probabilidad teorica de suma de dados
y Freq
2 0.0277778
3 0.0555556
4 0.0833333
5 0.1111111
6 0.1388889
7 0.1666667
8 0.1388889
9 0.1111111
10 0.0833333
11 0.0555556
12 0.0277778
plot(2:12,prob_teorica,type='b',main='Probabilidad de ocurrencia de la suma de dos dados',xlab='Suma de dos dados',color='blue')

Un dado tiene la posibilidad de caer 1 hasta 6. Si se desea evaluar la cantidad de posibles combinaciones que se pueden encontrar cuando se tienen dos dados, solo basta con multiplicar 6*6 que en este caso nos da un total de 36 combinaciones.

Si observamos el número mas comun que puede caer cuando hacemos lanzamientos con los dos dados es el número 7 con una probabilidad del 16%, esto se da, por que hay varias combinaciones que al sumar los dos dados nos de una suma igual a 7.

Con un número elevado de tamaño de muestra como lo es 200 y el numero de repeticiones empleados, vemos que el \(\hat p\) bajo simulación para el caso en que la suma sea igual a 12, fue de 0.0274 aproximadamente y es muy cercano al valor teórico de 0.0277, en parte influye el tamaño de muestra usado.

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

a. Genere una población con una cantidad dada de 0 y 1.

create_pob=function(min_val,max_val,n,p){
  
  pob=c(rep(x = max_val,n*p),rep(x = min_val,n*(1-p)))
  return(pob)
}

df_pob=create_pob(0,1,1000,0.10)

b. Crear una función que obtenga una muestra de esa población de a. y calcule el porcentaje de 1.

muestra_pob=function(df,tam_muestra){
  
  suma_unos=sum(sample(df,size =tam_muestra ))/tam_muestra
  return(suma_unos)
}

muestra_pob(df_pob,200)
## [1] 0.13

c. Repita este proceso una cantidad (mas de 1000 veces) y guarde los porcentajes de cada iteración.

calc_por_uno=function(n_muestra){
  pob=c(rep(x = 1,100),rep(x = 0,900))
  return(sum(sample(pob,size = n_muestra))/n_muestra)
}

calc_por_uno(n_muestra = 200)
## [1] 0.115
porcentajes_muestra=sapply(rep(200,1000), calc_por_uno)

d. Grafique los resultados de estos porcentajes y calcule algunos indicadores descriptivos (compare los resultados con la población generada inicial).

summary(porcentajes_muestra)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.05000 0.08500 0.10000 0.09983 0.11000 0.15500
hist(porcentajes_muestra,col="gray",xlab= "p",
     main="Histograma (P:0.10) n=200 rep=1000")
abline(v=0.1,col="red",lwd=4)
abline(v=mean(porcentajes_muestra),col="blue",lwd=4)

Se puede observar, que cuando utilizamos un tamaño de muestra n elevado, la proporcion estimada realmente puede acercarse a la proporción real. Además que al observar la distribución de las proporciones estimadas de las 1000 repeticiones con n=200, se podría comentar que se observa una distribución simétrica.

Punto 3 - Función que Calcula Descriptivos Univariados

a. Genere una función que calcule indicadores y graficos descriptivos de una variable cuantitativa.

descriptivas<- function(x){data.frame("MEDIDA"=c("Observaciones", "Mínimo", "1er Q", "Media", "Mediana", "Desv Est", "3er Q", "Máximo"),"VALOR"=format(c(length(na.omit(x)), min(na.omit(x)), quantile(na.omit(x), prob=0.25), mean(na.omit(x)), median(na.omit(x)), sd(na.omit(x)), quantile(na.omit(x), prob=0.75), max(na.omit(x))), scientific = F))}

b. Genere una función que calcule indicadores y graficos descriptivos de una variable cualitativa.

tabla_freq<- function(x,total=1,na="ifany"){
  if (total==1) {
    M=data.frame("Categoría"=table(x, useNA = na), "Rel"=prop.table(table(x,useNA = na)))[,-3]
    names(M)=c("Categoría","Freq. Abs.","Freq. Rel.")
    M$Categoría=as.character(M$Categoría)
    M[nrow(M)+1,]=c("Total",sum(M$`Freq. Abs.`),sum(M$`Freq. Rel.`))
    M$`Freq. Rel.`=as.numeric(M$`Freq. Rel.`)*100
    M$`Freq. Abs.`=as.numeric(M$`Freq. Abs.`)
    M
  } else{
    M=data.frame("Categoría"=table(x, useNA = na), "Rel"=prop.table(table(x,useNA = na)))[,-3]
    names(M)=c("Categoría","Freq. Abs.","Freq. Rel.")
    M
  }
}
df_pob=create_pob(0,1,1000,0.10)

tipo_var<-function(tipovar,x){
  
  if (tipovar=='cualitativa'){
    
    freq=tabla_freq(x)
    
    return(list(freq))
    
  }
   if (tipovar=='cuantitativa'){
    
    desc=descriptivas(x)
    
    return(list(desc))
    }
  else {
    return('La variable se puede definir como cuantitativa o cualitativa')
  }
  
  }

kbl(tipo_var('cuantitativa',df_pob),    caption = "<center><strong> Descriptivas variable </strong></center>") %>%
  kable_paper(bootstrap_options = "striped", full_width = FALSE,position = "left")
Descriptivas variable
MEDIDA VALOR
Observaciones 1000.0000000
Mínimo 0.0000000
1er Q 0.0000000
Media 0.1000000
Mediana 0.0000000
Desv Est 0.3001501
3er Q 0.0000000
Máximo 1.0000000