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