library(ggplot2)
library(dplyr)
library(plotly)

Punto 1

Simulación Resultado de la Suma del Lanzamiento de los dados

# Crear una función sin entradas pero que simule el lanzamiento de dos dados legales y sume el resulado de ellos.
set.seed(54)

suma_dados <- function(){
  sum(round(runif(2, min = 1, max = 6)))
}

suma_dados()
## [1] 10
# 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)

suma_dados_2 <- function(tiros){
  resultados <- c()
  for (i in 1:tiros) {
      resultados[i] <- sum(round(runif(2, min = 1, max = 6)))
  }
  table(resultados)
}

suma_dados_2(tiros = 1000)
## resultados
##   2   3   4   5   6   7   8   9  10  11  12 
##  11  44  87  99 145 213 155 115  74  47  10
# 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 teórica
dado1 <- 1:6
dado2 <- 1:6

sample_space <- expand.grid(dado1, dado2)

sample_space[, 3] <- apply(sample_space, 1, sum)

probabilidad_teorica <- table(sample_space[, 3])/nrow(sample_space)

diezmil_tiros <- suma_dados_2(tiros = 10000)

diezmil_tiros/10000
## resultados
##      2      3      4      5      6      7      8      9     10     11     12 
## 0.0091 0.0385 0.0762 0.1209 0.1624 0.1812 0.1609 0.1173 0.0831 0.0393 0.0111
tabla_comparativa <- data.frame(table(sample_space[, 3])/nrow(sample_space), 
           diezmil_tiros/10000)

tabla_comparativa <- tabla_comparativa[, -3]

names(tabla_comparativa) <- c("resultado_suma", "prob_teorica", "prop_simulada")

print(tabla_comparativa)
##    resultado_suma prob_teorica prop_simulada
## 1               2   0.02777778        0.0091
## 2               3   0.05555556        0.0385
## 3               4   0.08333333        0.0762
## 4               5   0.11111111        0.1209
## 5               6   0.13888889        0.1624
## 6               7   0.16666667        0.1812
## 7               8   0.13888889        0.1609
## 8               9   0.11111111        0.1173
## 9              10   0.08333333        0.0831
## 10             11   0.05555556        0.0393
## 11             12   0.02777778        0.0111
# Gráfico comparativo
grafico_comparativo <- tabla_comparativa %>% 
  ggplot(aes(x = resultado_suma, 
             y = prob_teorica)) +
  geom_col(fill = "blue", alpha = 1) +
  geom_col(fill = "red", aes(y = prop_simulada), alpha = 0.8)
ggplotly(grafico_comparativo)

Punto 2

Simulación Concepto de Distribucción Muestral (Caso proporciones)

# a. Genere una población con una cantidad dada de 0 y 1
poblacion <- sample(x = c(0, 1), size = 500, replace = T)
#  b. Crear una función que obtenga una muestra de esa población de a. y calcule el porcentaje de 1.
muestra <- sample(poblacion, size = 50)
porcentaje <- length(which(muestra == 1))/length(muestra)
print(porcentaje)
## [1] 0.52
# c. Repita este proceso una cantidad (mas de 1000 veces) y guarde los porcentajes de cada iteración
porcentajes <- c()
for (i in 1:1200) {
  porcentajes[i] <- sum(sample(poblacion, size = 50))/50
}

# d. Grafique los resultados de estos porcentajes y calcule algunos indicadores descriptivos (compare los resultados con la población generada inicial).
hist(porcentajes, breaks = 10)
abline(v = 0.52, col = "blue", lty = 2)
abline(v = mean(porcentajes), col = "red")

# La línea azul punteada corresponde a media de la muestra inicial
# La línea roja corresponde al promedio de las medias iteradas 1200 veces

Punto 3

Función que Calcula Descriptivos Univariados

# Genere una función que calcule indicadores y gráficos descriptivos de una variable cuantitativa

cal_cuanti <- function(data){
  mean <- mean(data, na.rm = T)
  sd <- sd(data, na.rm = T)
  max <- max(data, na.rm = T) 
  min <- min(data, na.rm = T)
  
 return(list(data.frame(mean, sd, max, min), hist(data)))
}

eco_paises <- gapminder::gapminder

cal_cuanti(data = eco_paises$lifeExp)

## [[1]]
##       mean       sd    max    min
## 1 59.47444 12.91711 82.603 23.599
## 
## [[2]]
## $breaks
##  [1] 20 25 30 35 40 45 50 55 60 65 70 75 80 85
## 
## $counts
##  [1]   1   2  30  92 181 185 163 173 156 228 320 152  21
## 
## $density
##  [1] 0.0001173709 0.0002347418 0.0035211268 0.0107981221 0.0212441315
##  [6] 0.0217136150 0.0191314554 0.0203051643 0.0183098592 0.0267605634
## [11] 0.0375586854 0.0178403756 0.0024647887
## 
## $mids
##  [1] 22.5 27.5 32.5 37.5 42.5 47.5 52.5 57.5 62.5 67.5 72.5 77.5 82.5
## 
## $xname
## [1] "data"
## 
## $equidist
## [1] TRUE
## 
## attr(,"class")
## [1] "histogram"
# Genere una función que calcule indicadores y graficos descriptivos de una variable cualitativa

cal_cuali <- function(data){
  total_elementos <- length(data)

  return(list(data.frame(total_elementos), plot(data)))
}

cal_cuali(data = eco_paises$continent)

## [[1]]
##   total_elementos
## 1            1704
## 
## [[2]]
##      [,1]
## [1,]  0.7
## [2,]  1.9
## [3,]  3.1
## [4,]  4.3
## [5,]  5.5
# Genere una función que de acuerdo al tipo de variable use la función de a.ó b. para generar resultados descriptivos.

cal_cuali_cuanti <- function(data, tipo_var){
  ifelse(tipo_var == "numerica", 
         return(cal_cuanti(data)), 
         return(cal_cuali(data)))
}
  

cal_cuali_cuanti(eco_paises$lifeExp, tipo_var = "numerica")

## [[1]]
##       mean       sd    max    min
## 1 59.47444 12.91711 82.603 23.599
## 
## [[2]]
## $breaks
##  [1] 20 25 30 35 40 45 50 55 60 65 70 75 80 85
## 
## $counts
##  [1]   1   2  30  92 181 185 163 173 156 228 320 152  21
## 
## $density
##  [1] 0.0001173709 0.0002347418 0.0035211268 0.0107981221 0.0212441315
##  [6] 0.0217136150 0.0191314554 0.0203051643 0.0183098592 0.0267605634
## [11] 0.0375586854 0.0178403756 0.0024647887
## 
## $mids
##  [1] 22.5 27.5 32.5 37.5 42.5 47.5 52.5 57.5 62.5 67.5 72.5 77.5 82.5
## 
## $xname
## [1] "data"
## 
## $equidist
## [1] TRUE
## 
## attr(,"class")
## [1] "histogram"
cal_cuali_cuanti(data = eco_paises$continent, tipo_var = "categorica")

## [[1]]
##   total_elementos
## 1            1704
## 
## [[2]]
##      [,1]
## [1,]  0.7
## [2,]  1.9
## [3,]  3.1
## [4,]  4.3
## [5,]  5.5