library(stringr)
library(modeest)
require(ggplot2)
library(plotly)
require(ggpubr)

Punto 3 - Función que Calcula Descriptivos Univariados

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

Población que contiene la edad de 1000 niños y la persepción de que tan satisfechos estan con las clases

edad=sample(5:20,1000,replace = TRUE)
satisfacion=sample(1:5,1000,replace = TRUE)

datos_simulados =data.frame(
  "edad" = edad, 
  "nivel_satisfacion"=as.character(satisfacion)
)

head(datos_simulados)
##   edad nivel_satisfacion
## 1   12                 1
## 2    6                 2
## 3   20                 1
## 4    6                 4
## 5   10                 1
## 6    5                 1

A1 Función para calcular indicadores variable cuantitativa

mtc_cuantitativa = function(datos,name_var) {
  cantidad=length(datos[[name_var]])    
  min = min(datos[[name_var]], na.rm = TRUE)
  q1 = quantile(datos[[name_var]], probs = 0.25, na.rm = TRUE)
  media = mean.default(datos[[name_var]], na.rm = TRUE)
  media_rec = mean.default(datos[[name_var]], trim = 0.025, na.rm = TRUE)
  mediana = median.default(datos[[name_var]], na.rm = TRUE)
  moda = mfv(datos[[name_var]])
  var = var(datos[[name_var]], na.rm = TRUE)
  desvest = sd(datos[[name_var]], na.rm = TRUE)
  q3 = quantile(datos[[name_var]], probs = 0.75, na.rm = TRUE)
  max = max(datos[[name_var]], na.rm = TRUE)
  descriptivos =as.numeric(c(cantidad,min, q1, media, media_rec, mediana, moda,var, desvest, q3, max))
  nombres = c("Cantidad","Mínimo", "Q1", "Media", "Media recortada", "Mediana", "Moda","Varianza", "Desviación Estándar", "Q3", "Máximo")
  
  desc_variables = as.data.frame(rbind(nombres,descriptivos))
  print(str_c("Descriptivos", "-", name_var))
  return(desc_variables)
}

A2 Función para graficar variable cuantitativa

graficar_cuantitativa=function(datos3,name_var){
  
g1=ggplot(datos3,aes(x=datos3[[name_var]]))+geom_histogram(bins=30)+ scale_x_continuous(name_var)+theme_bw()
##g2=boxplot(x=datos[[name_var]], ylab='Edan (Años)',col=c('lightblue'))
g3=ggplot(datos3,aes(x=datos3[[name_var]]))+geom_boxplot()+ scale_x_continuous(name_var)+theme_bw()
return(ggarrange(g1,g3,labels = c("A", "B"),ncol = 2, nrow = 1))

}

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

B1 Función para calcular indicadores variable cualitativa

mtc_cualitativa=function(datos,name_var) {
print(str_c("Proporición de ", " - ", name_var," del conjunto de datos"))
return(prop.table(table(datos[[name_var]]))*100)
}

B2 Función para graficar variable cualitativa

graficar_cualitativa=function(datos,name_var){
  
g1 =ggplot(datos, aes(datos[[name_var]]))+geom_bar()+ ggtitle(str_c("Cantidades de ", " - ", name_var))+xlab(name_var)+theme_bw()

g2=ggplot(datos, aes(x="", fill=factor(datos[[name_var]]))) + geom_bar( width=1) +ylab(name_var)+ coord_polar("y", start=0)

return(ggarrange(g1,g2,labels = c("A", "B"),ncol = 2, nrow = 1))

}

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

calcular_resultados_descriptivos=function(datos,name_var){
  
switch(class(datos[[name_var]]),
         character = {
          print(str_c("Descriptivos variable ",name_var)) 
          print(mtc_cualitativa(datos,name_var))
          print(graficar_cualitativa(datos,name_var))
         },
         integer = {
           print(str_c("Descriptivos variable ",name_var)) 
           print(mtc_cuantitativa(datos,name_var))
           print(graficar_cuantitativa(datos,name_var))
         },
         numeric ={
           print(str_c("Descriptivos variable ",name_var)) 
           print(mtc_cuantitativa(datos,name_var))
           print(graficar_cuantitativa(datos,name_var))
         },
         "Tipo de dato no contemplado"
       )
 
}

Exploración univariada de la BD del DF datos_simulados, que contiene edad y nivel de satisfacción

variables=names(datos_simulados)
for (i in 1:length(variables)){
  calcular_resultados_descriptivos(datos_simulados,variables[i])
}
## [1] "Descriptivos variable edad"
## [1] "Descriptivos-edad"
##                    V1     V2 V3    V4               V5      V6   V7
## nombres      Cantidad Mínimo Q1 Media  Media recortada Mediana Moda
## descriptivos     1000      5  9 12.62 12.6263157894737      13    8
##                            V8                  V9 V10    V11
## nombres              Varianza Desviación Estándar  Q3 Máximo
## descriptivos 21.0226226226226    4.58504336104062  17     20

## [1] "Descriptivos variable nivel_satisfacion"
## [1] "Proporición de  - nivel_satisfacion del conjunto de datos"
## 
##    1    2    3    4    5 
## 20.7 20.2 18.5 20.2 20.4