library(ggplot2)
library(dplyr)
library(plotly)
# 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)
# 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
# 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