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 define la variable aleatoria como: Suma de las caras resultantes de dos dados en un lanzamiento.

dos_dados=function(){
  x=sample(1:6,1,replace=F)
  y=sample(1:6,1,replace=F)
  return(x+y)
}
dos_dados()
## [1] 3

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

n_lan = function(n, condicion){
  cont=0
  for (i in 1:n){
    if (dos_dados()==condicion){
      cont=cont+1}
  }
  
  print(cont)
}
n_lan(1000,12)
## [1] 21

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.

#Teóricamente
Posibles=expand.grid(D1=1:6, D2=1:6) #Calcula todas posibles combinaciones en el lanzamiento de dos dados con 6 caras cada uno
Suma=apply(Posibles,1,sum) #Calcula la suma de las caras para cada posible combinación
Combinaciones=data.frame(Posibles,Suma)
colnames(Combinaciones)<-c("Dado 1", "Dado 2", "Suma")

P.teorica=table(Suma)/36 #Calcula la probabilidad teórica de los posibles resultados, es decir, 2, 3, 4, 5, 6, 7, 8, 9 ,10 ,11 o 12.
#Empíricamente se simula para 10000 lanzamientos
#Se comparan las probabilidades teóricas con las empíricas

P.empirica = function(n2, condicion2){
  n_lan(n = n2, condicion = condicion2)/n2
}

#Comparación de la probabilidad teórica vs la probabilidad empírica
x=c()
for(i in 2:12){
  x[i]=P.empirica(n2 = 10000, condicion2=i)
}
## [1] 305
## [1] 569
## [1] 776
## [1] 1112
## [1] 1419
## [1] 1597
## [1] 1352
## [1] 1135
## [1] 811
## [1] 555
## [1] 269
plot(P.teorica, xlab="Suma de las caras resultantes", ylab="Probabilidad teórica")
points(x,col="red")
legend(x = "topright", legend = c("Teórica", "Empírica"), fill = c("black", "red"), 
       title = "Probabilidad")

Se observa que, dado que la cantidad de lanzamientos es grande, entonces la probabilidad empírica converge a la probabilidad teórica.

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 = 10000, replace = TRUE)

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

Muestra01 = function(Poblacion2, n, Condicion){
  Muestra <- sample(x=Poblacion2, size = n, replace = TRUE)
  cont=0
  for (i in 1:length(Muestra)){
    if (Muestra[i] == Condicion){
      cont=cont+1
      }
  }
  PorcentajeCond <- (cont/length(Muestra))
  return(PorcentajeCond)
}

El porcentaje de unos de la muestra de tamaño 300 es de

Muestra01(Poblacion2=Poblacion,300,1)*100
## [1] 49.66667

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

m<-1050
PorcentajeM<-c()
for (i in 1:m) {
  PorcentajeM[i] <- Muestra01(Poblacion2=Poblacion,300,1)
}
PorcentajeM[1:60]
##  [1] 0.4600000 0.4900000 0.4800000 0.4966667 0.5266667 0.4933333 0.4800000
##  [8] 0.5100000 0.4566667 0.4966667 0.4966667 0.4833333 0.4900000 0.5300000
## [15] 0.5133333 0.5133333 0.4800000 0.5133333 0.5033333 0.4533333 0.5266667
## [22] 0.5433333 0.5200000 0.5100000 0.5100000 0.5233333 0.5233333 0.5333333
## [29] 0.4433333 0.4800000 0.4966667 0.5033333 0.5166667 0.4866667 0.5100000
## [36] 0.4900000 0.5033333 0.5533333 0.4733333 0.5000000 0.4566667 0.5200000
## [43] 0.5266667 0.5000000 0.4600000 0.4900000 0.5066667 0.5066667 0.4866667
## [50] 0.5800000 0.4933333 0.4833333 0.5466667 0.4766667 0.5366667 0.5000000
## [57] 0.5400000 0.5400000 0.5400000 0.4900000

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

hist(PorcentajeM, main="Frecuencias de unos para 1050 muestras de tamaño 300")
abline(v=0.5,col="red")

Se observa que los porcentajes de ocurrencia del resultado 1 para 1050 muestras de tamaño 300, están centrados en el porcentaje teórico esperado, es decir, al rededor del 50%.

summary(PorcentajeM)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.4033  0.4900  0.5067  0.5066  0.5267  0.5967

Esto se puede evidenciar ya que el rango de valores es pequeño (ver mínimo y máximo) y el primer y tercer cuartil están a distancias similares del valor medio y mediano.

Punto 3 - Función que Calcula Descriptivos Univariados

library(ggplot2)
library(ggpubr)

#Datos cuantitativos
Estatura=sample(100:170, 40,replace = TRUE)
#Datos cualitativos
Satisfacion=sample(1:3, 40,replace = TRUE)

#Matriz de datos
Datos =data.frame("Estatura" = Estatura, "Satisfacion"=as.character(Satisfacion))
Datos
##    Estatura Satisfacion
## 1       168           3
## 2       154           2
## 3       102           2
## 4       164           3
## 5       151           1
## 6       125           1
## 7       144           2
## 8       143           1
## 9       112           1
## 10      164           2
## 11      147           3
## 12      110           3
## 13      167           3
## 14      121           3
## 15      151           1
## 16      153           2
## 17      139           1
## 18      135           3
## 19      150           3
## 20      102           1
## 21      153           1
## 22      133           2
## 23      137           2
## 24      150           2
## 25      112           2
## 26      147           1
## 27      147           2
## 28      168           2
## 29      120           3
## 30      102           3
## 31      123           2
## 32      151           3
## 33      168           3
## 34      111           2
## 35      165           2
## 36      158           2
## 37      163           3
## 38      158           1
## 39      111           3
## 40      162           1

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

library(statip)
cuantitativa = function(matriz,variableAnalizar) {
  cant=length(matriz[[variableAnalizar]])    
  minimo = min(matriz[[variableAnalizar]], na.rm = TRUE)
  q1 = quantile(matriz[[variableAnalizar]], probs = 0.25, na.rm = TRUE)
  media = mean.default(matriz[[variableAnalizar]], na.rm = TRUE)
  mediana = median.default(matriz[[variableAnalizar]], na.rm = TRUE)
  q3 = quantile(matriz[[variableAnalizar]], probs = 0.75, na.rm = TRUE)
  maximo = max(matriz[[variableAnalizar]], na.rm = TRUE)
  var = var(matriz[[variableAnalizar]], na.rm = TRUE)
  desv = sd(matriz[[variableAnalizar]], na.rm = TRUE)
  moda = mfv(matriz[[variableAnalizar]])
  descrip=as.numeric(unlist(c(cant,minimo, q1, media, mediana, q3, maximo, round(var,3), round(desv,3), moda)))
  indicador = c("Tamaño","Mínimo", "Q1", "Media", "Mediana","Q3","Máximo","Var","Desviación","Moda")
  
  resumen = as.data.frame(rbind(indicador,descrip))
  print(paste("Indicadores", "->", variableAnalizar))
  return(resumen)
}
Visualcuantitativa=function(matriz,variableAnalizar){
  g1=ggplot(matriz,aes(matriz[[variableAnalizar]]))+geom_histogram()+theme_bw()
  return(ggarrange(g1,size=2))
}

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

cualitativa=function(matriz,variableAnalizar) {
  print(paste("Proporción de ", variableAnalizar," del conjunto de datos"))
  return(prop.table(table(matriz[[variableAnalizar]]))*100)
}
Visualcualitativa=function(matriz,variableAnalizar){
  
  g1 =ggplot(matriz, aes(matriz[[variableAnalizar]]))+geom_bar()+ ggtitle(paste("Frecuencia de ", variableAnalizar))+xlab(variableAnalizar)+theme_bw()
  return(ggarrange(g1,size=2))
}

c. Genere una función que de acuerdo al tipo de variable use la función de a. ó b. para generar resultados descriptivos.

Descriptivas=function(matriz,variableAnalizar){
  
  switch(class(matriz[[variableAnalizar]]),
           character = {
            print(paste("Descriptivas variable ",variableAnalizar)) 
            print(cualitativa(matriz,variableAnalizar))
            print(Visualcualitativa(matriz,variableAnalizar))
           },
           integer = {
             print(paste("Descriptivas variable ",variableAnalizar)) 
             print(cuantitativa(matriz,variableAnalizar))
             print(Visualcuantitativa(matriz,variableAnalizar))
           },
           numeric ={
             print(paste("Descriptivas variable ",variableAnalizar)) 
             print(cuantitativa(matriz,variableAnalizar))
             print(Visualcuantitativa(matriz,variableAnalizar))
           },
           "Tipo de dato no válido"
         )
 
}

Note que con la función c. es posible recorrer una base de datos grande y realizar una exploración univariada de forma automatica.

Resultados

name.var=names(Datos)
for (i in 1:length(name.var)){
  Descriptivas(Datos,name.var[i])
}
## [1] "Descriptivas variable  Estatura"
## [1] "Indicadores -> Estatura"
##               V1     V2    V3      V4      V5  V6     V7      V8         V9
## indicador Tamaño Mínimo    Q1   Media Mediana  Q3 Máximo     Var Desviación
## descrip       40    102 122.5 141.025     147 158    168 450.948     21.236
##            V10    V11    V12 V13
## indicador Moda Tamaño Mínimo  Q1
## descrip    102    147    151 168

## [1] "Descriptivas variable  Satisfacion"
## [1] "Proporción de  Satisfacion  del conjunto de datos"
## 
##    1    2    3 
## 27.5 37.5 35.0