Esta guía hace parte del material de apoyo a los espacios académicos de Estadística y Métodos estadísticos de la Universidad de La Salle, Colombia.

Ejemplo

En este caso activaremos una base de datos que se encuentra disponible en la libreria TeachingSampling, creada por Hugo Andrés Gutierrez Rojas.

Este conjunto de datos corresponde a una muestra aleatoria de BigLucy. Contiene algunas variables financieras de 2396 empresas industriales de una ciudad en un año fiscal particular.

library(TeachingSampling)  #Activación de la libreria
data(Lucy) #Carga del conjunto de datos
head(Lucy) #Permite ver las seis primeras líneas de datos
##      ID Ubication Level Zone Income Employees Taxes SPAM
## 1 AB001      c1k1 Small    A    281        41     3   no
## 2 AB002      c1k2 Small    A    329        19     4  yes
## 3 AB003      c1k3 Small    A    405        68     7   no
## 4 AB004      c1k4 Small    A    360        89     5   no
## 5 AB005      c1k5 Small    A    391        91     7  yes
## 6 AB006      c1k6 Small    A    296        89     3   no

Las variables que se encuentran disponibles son:

Level: Las empresas industriales están discriminadas según los Impuestos declarados. Hay pequeñas, medianas y grandes empresas.

Zone: La ciudad está dividida por zonas geográficas. Una empresa se clasifica en una zona determinada según su dirección.

Income: La cantidad total de las ganancias (o ganancias) de una empresa en el año fiscal anterior. Se calcula tomando los ingresos y ajustando el costo de hacer negocios.

Employees: El número total de personas que trabajaron para la empresa en el ejercicio fiscal anterior.

Taxes: El importe total del Impuesto sobre la Renta de una empresa

SPAM: Indica si la empresa utiliza las opciones de Internet y WEBmail para realizar autopropaganda.

Observación:Las columnas ID y Ubication, no son variables.

Gráficos

Antes de comenzar la construcción de gráficos, es necesario comprender que ellos son una representación de las llamadas tablas de frecuencias o resumen, que indican la frecuencia, cantidad o porcentaje de objetos en un conjunto de categorías para observar las diferencias que hay entre ellas. Una tabla de resumen lista las categorías en una columna y la frecuencia, cantidad o porcentaje en una columna o columnas independientes.

Por elemplo, construimos la tabla de frecuencia para la variable Level

Tabla_Level_01=table(Lucy$Level) #Tabla de conteo
Tabla_Level_01
## 
##    Big Medium  Small 
##     83    737   1576
Tabla_Level_02=prop.table(Tabla_Level_01) #Tabla de proporciones
Tabla_Level_02
## 
##        Big     Medium      Small 
## 0.03464107 0.30759599 0.65776294

Gráfico de sectores o circular

Este gráfico lo utilizamos para representan la distribución proporcional de los datos de tipo nominal. En este sentido, las variables que podemos utilizar son Zone y SPAM para nuestro ejemplo.

#Construcción básica desde la tabla de proporciones
pie(prop.table(table(Lucy$Zone)))

#Mejoramiento de presentación
pie(prop.table(table(Lucy$Zone)),main="Distribución de las empresas según la zona", labels = c("A_13%","B_30%","C_41%","D_9%","E_7%"), col=c("pink","red","orange","yellow","green"))

Gráfico de barras

Este gráfico puede ser empleado para visulizar la distribución del conjunto de datos bien sean de escala nominal u ordinal, en el último caso se debe recordar respetar la jerarquía de las categorías de la variable.

#Gráfico base desde una tabla de frecuencias
barplot(table(Lucy$Level))

#Gráfico mejorado
barplot(table(Lucy$Level),
        main = "Distribución de empresas por tamaño", 
        names.arg = c("Grandes","Medianas","Pequeñas"),
        ylab = "Cantidad de empresas",
        xlab = "Tamaño de empresa",
        col = c("lightblue","lightgreen","pink"))

Histograma

Este es un gráfico para representar el comportamiento de los datos de las variables cuantitativas o numéricas, en particular las continuas.

En el caso de este ejemplo, podemos utilizar las variables Income y Taxes.

#Histograma básico
hist(Lucy$Income)

#Histograma mejorado
hist(Lucy$Income, main = "Distribución de las ganancias", xlab = "Ganancias",ylab = "Cantidad de empresas",ylim = c(0,800),col = "green")

Curva de densidad

#Curva de densidad básica
plot(density(Lucy$Income))

#Curva de densidad mejorada
plot(density(Lucy$Income),main = "Curva de densidad",xlab = "Ganancias",ylab = "Densidad",col="red")

Gráfico de barras comparativas

En este gráfico representamos la posible relación entre dos variables de tipo cualitativo, comparamos el comportamiento de una variable entre los grupos que generan las categorías de la otra.

Para el ejemplo de construcción se utilizaran el tamaño de la empresa Level y el uso de Internet o WEBmail, SPAM.

#Primero se debe construir la tabla resumen cruzada
Tabla_Level_03=table(Lucy$Level,Lucy$SPAM)
Tabla_Level_03
##         
##           no yes
##   Big     26  57
##   Medium 291 446
##   Small  620 956
#Gráfico básico
barplot(Tabla_Level_03)

#Gráfico mejorado
barplot(Tabla_Level_03, 
        main="Distribución de empresas",
        ylab = "Cantidad de empresas",
        xlab = "Utiliza Internet o WEBmail", 
        names.arg = c("Si","No"), 
        col=c("black","gray","pink"),
        beside = T,
        ylim = c(0,1000))

Gráfico de dispersión

Este gráfico lo utilizamos cuando queremos visulizar la posible relaciión que existe entre dos variables cuantitativas, de preferencia continuas.

En este caso, para ejemplo, utilizaremos la variables de ganancia Income e importe Taxes

#Gráfico básico
plot(Lucy$Income,Lucy$Taxes)

#Gráfico mejorado
plot(Lucy$Income,Lucy$Taxes,
     main = "Gráfico de dispersión",
     xlab = "Ganacias",
     ylab = "Importe para impuesto",
     col="darkblue")

Medidas descriptivas numéricas

Para las medidas numéricas mostraremos tres maneras de obtenerlas según el objetivo que tengamos.

Para realizar la demostración se utilizará la variable de ingresos, Income. Y nos apoyaremos en la variable de tamaño de empresa, Level, para realizar las condiciones.

Medidas de centralidad

Media

# General
mean(Lucy$Income) #La cálcula con los 2396 datos
## [1] 432.0605
# Discriminada
tapply(Lucy$Income,Lucy$Level,mean) #Calcula para cada tipo de tamaño de empresa 
##       Big    Medium     Small 
## 1249.4699  661.2632  281.8274
# Condicionada
mean(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] 281.8274

Mediana

# General
median(Lucy$Income) #La cálcula con los 2396 datos
## [1] 390
# Discriminada
tapply(Lucy$Income,Lucy$Level,median) #Calcula para cada tipo de tamaño de empresa 
##    Big Medium  Small 
##   1153    630    280
# Condicionada
median(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] 280

Medidas de localización

# General
quantile(Lucy$Income, probs = c(0.25,0.75)) #La cálcula con los 2396 datos
## 25% 75% 
## 230 576
# Discriminada
tapply(Lucy$Income,Lucy$Level,quantile,probs=c(0.25,0.75)) #Calcula para cada tipo de tamaño de empresa 
## $Big
##    25%    75% 
## 1078.5 1393.0 
## 
## $Medium
## 25% 75% 
## 560 740 
## 
## $Small
## 25% 75% 
## 181 385
# Condicionada
quantile(Lucy$Income[Lucy$Level=="Small"],probs=c(0.25,0.75)) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## 25% 75% 
## 181 385

Medidas de variabilidad

Varianza

# General
var(Lucy$Income) #La cálcula con los 2396 datos
## [1] 71277.89
# Discriminada
tapply(Lucy$Income,Lucy$Level,var) #Calcula para cada tipo de tamaño de empresa 
##      Big   Medium    Small 
## 64398.15 16081.90 15142.05
# Condicionada
var(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] 15142.05

Desviación estándar

# General
sd(Lucy$Income) #La cálcula con los 2396 datos
## [1] 266.9792
# Discriminada
tapply(Lucy$Income,Lucy$Level,sd) #Calcula para cada tipo de tamaño de empresa 
##      Big   Medium    Small 
## 253.7679 126.8144 123.0530
# Condicionada
sd(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] 123.053

Medidas de forma

library(moments) #Activación libreria para medidas de forma

Coeficiente de asimetría

# General
skewness(Lucy$Income) #La cálcula con los 2396 datos
## [1] 1.384279
# Discriminada
tapply(Lucy$Income,Lucy$Level,skewness) #Calcula para cada tipo de tamaño de empresa 
##         Big      Medium       Small 
##  1.98267202  0.84386263 -0.01043604
# Condicionada
skewness(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] -0.01043604

Coeficiente de curtosis

# General
kurtosis(Lucy$Income) #La cálcula con los 2396 datos
## [1] 6.750699
# Discriminada
tapply(Lucy$Income,Lucy$Level,kurtosis) #Calcula para cada tipo de tamaño de empresa 
##      Big   Medium    Small 
## 9.070869 2.799247 1.920698
# Condicionada
kurtosis(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
## [1] 1.920698

Resumen de cinco valores

# General
summary(Lucy$Income) #La cálcula con los 2396 datos
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.0   230.0   390.0   432.1   576.0  2510.0
# Discriminada
tapply(Lucy$Income,Lucy$Level,summary) #Calcula para cada tipo de tamaño de empresa 
## $Big
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1003    1078    1153    1249    1393    2510 
## 
## $Medium
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   500.0   560.0   630.0   661.3   740.0   999.0 
## 
## $Small
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.0   181.0   280.0   281.8   385.0   499.0
# Condicionada
summary(Lucy$Income[Lucy$Level=="Small"]) #Calcula teniendo en cuenta los 1576 datos de empresas pequeñas
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##     1.0   181.0   280.0   281.8   385.0   499.0

Boxplot

Boxplot general

#Gráfico básico
boxplot(Lucy$Income)

#Gráfico mejorado
boxplot(Lucy$Income, horizontal = T, col="orange",main="Distribución de las ganancias")

Una manera rápida de obtener las medidas resumen

Como sabemos en R podemos encontrar librerias que facilitan la elaboración de códigos, para el cálculo de las medidas descriptivas encontramos la libreria summarytools.

# Activación de la libreria
library(summarytools)

Para calcular medidas para un conjunto de datos:

# Medidas generales
descr(Lucy$Income)
## Descriptive Statistics  
## Lucy$Income  
## N: 2396  
## 
##                      Income
## ----------------- ---------
##              Mean    432.06
##           Std.Dev    266.98
##               Min      1.00
##                Q1    230.00
##            Median    390.00
##                Q3    576.00
##               Max   2510.00
##               MAD    252.04
##               IQR    346.00
##                CV      0.62
##          Skewness      1.38
##       SE.Skewness      0.05
##          Kurtosis      3.75
##           N.Valid   2396.00
##         Pct.Valid    100.00
# Medidas escogidad
descr(Lucy$Income, stats = c("min","q1","mean","med","q3","max","sd","cv","skewness","kurtosis"), transpose = T)
## Descriptive Statistics  
## Lucy$Income  
## N: 2396  
## 
##                 Min       Q1     Mean   Median       Q3       Max   Std.Dev     CV   Skewness   Kurtosis
## ------------ ------ -------- -------- -------- -------- --------- --------- ------ ---------- ----------
##       Income   1.00   230.00   432.06   390.00   576.00   2510.00    266.98   0.62       1.38       3.75

Para calcular medidas para un conjunto de datos, de manera comparativa:

with(Lucy, stby(Income,Level,descr,stats = c("min","q1","mean","med","q3","max","sd","cv","skewness","kurtosis")))
## Descriptive Statistics  
## Income by Level  
## Data Frame: Lucy  
## N: 83  
## 
##                      Big   Medium    Small
## -------------- --------- -------- --------
##            Min   1003.00   500.00     1.00
##             Q1   1077.00   560.00   181.00
##           Mean   1249.47   661.26   281.83
##         Median   1153.00   630.00   280.00
##             Q3   1396.00   740.00   385.00
##            Max   2510.00   999.00   499.00
##        Std.Dev    253.77   126.81   123.05
##             CV      0.20     0.19     0.44
##       Skewness      1.95     0.84    -0.01
##       Kurtosis      5.85    -0.21    -1.08

Boxplot comparativo

#Gráfico básico
boxplot(Lucy$Income ~ Lucy$Level)

#Gráfico mejorado
boxplot(Lucy$Income~Lucy$Level, 
        horizontal = T, 
        col=c("orange","green","yellow"),
        main="Distribución de las ganancias por tamaño de empresas",
        xlab = "Ganancias",
        ylab = "Tamaño de empresa")

Importante: Los gráficos acá presentados son los básicos, se pueden obtener mejores presentaciones con la libreria gglot2. También se puede facilitar la construcción de código utilizando la libreria esquisse.

Referencias y recomendados

  1. Rojas HAG (2020). TeachingSampling: Selection of Samples and Parameter Estimation in Finite Population. R package version 4.1.1, https://CRAN.R-project.org/package=TeachingSampling.

  2. H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.

  3. Meyer F, Perrier V (2022). esquisse: Explore and Visualize Your Data Interactively. R package version 1.1.2, https://CRAN.R-project.org/package=esquisse.

  4. Wei Y., Colors in R. http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf