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.
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.
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
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"))
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"))
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 básica
plot(density(Lucy$Income))
#Curva de densidad mejorada
plot(density(Lucy$Income),main = "Curva de densidad",xlab = "Ganancias",ylab = "Densidad",col="red")
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))
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")
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.
# 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
# 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
# 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
# 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
# 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
library(moments) #Activación libreria para medidas de forma
# 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
# 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
# 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
#Gráfico básico
boxplot(Lucy$Income)
#Gráfico mejorado
boxplot(Lucy$Income, horizontal = T, col="orange",main="Distribución de las ganancias")
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
#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.
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.
H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New York, 2016.
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.
Wei Y., Colors in R. http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf