Modulo: Visualizacion de Datos en R

Base de datos:SLID

  1. Descripción de la base de datos

Utilizamos el comando library() para activar el paquete CarData, el siguiente paso es usar el comando summary() para ver un resumen de la base de datos

library(carData)
summary(SLID)
##      wages          education          age            sex          language   
##  Min.   : 2.300   Min.   : 0.00   Min.   :16.00   Female:3880   English:5716  
##  1st Qu.: 9.235   1st Qu.:10.30   1st Qu.:30.00   Male  :3545   French : 497  
##  Median :14.090   Median :12.10   Median :41.00                 Other  :1091  
##  Mean   :15.553   Mean   :12.50   Mean   :43.98                 NA's   : 121  
##  3rd Qu.:19.800   3rd Qu.:14.53   3rd Qu.:57.00                               
##  Max.   :49.920   Max.   :20.00   Max.   :95.00                               
##  NA's   :3278     NA's   :249

La base de datos SLID contiene los datos de una encuesta sobre la dinƔmica del trabajo y la renta, Los datos provienen de la ola de 1994 de la Encuesta Canadiense de DinƔmica Laboral e Ingreso, para la provincia de Ontario. Faltan datos, en particular sobre salarios, El marco de datos SLID tiene 7425 filas y 5 columnas.

  1. Identificación de variables la vairable

A continuacion se usaran los comandos str() y names() los cuales permiten saber el nombre de las variables y una breve descripcion de ellas

str(SLID)
## 'data.frame':    7425 obs. of  5 variables:
##  $ wages    : num  10.6 11 NA 17.8 NA ...
##  $ education: num  15 13.2 16 14 8 16 12 14.5 15 10 ...
##  $ age      : int  40 19 49 46 71 50 70 42 31 56 ...
##  $ sex      : Factor w/ 2 levels "Female","Male": 2 2 2 2 2 1 1 1 2 1 ...
##  $ language : Factor w/ 3 levels "English","French",..: 1 1 3 3 1 1 1 1 1 1 ...
names(SLID)
## [1] "wages"     "education" "age"       "sex"       "language"

la variable ā€œwagesā€ es de tipo numerica discreta y muestra la tasa de salario por hora compuesta de todos los trabajos.

la variable ā€œeducationā€ es de tipo numerico discreto y muestra la cantidad de aƱos de estudio.

la variable ā€œageā€ es de tipo entero y muestra los aƱos de las personas.

la variable ā€œsexā€ es de tipo factor y tiene dos niveles ā€œFemaleā€ y ā€œMaleā€, muestra el genero de las personas.

la variable ā€œlanguageā€ es de tipo factor que tiene tres niveles, ā€œEnglishā€, ā€œFrenchā€ y ā€œOtherā€ y muestra el lenguaje hablado.

  1. Caracterización del conjunto de datos

En este punto se encontraran los siguientes elementos

Primero usamos el comando attach() para que el programa nos reconozca las variables de la base de datos

attach(SLID)

3.1 Medidas de tendencia central: media, mediana, moda

En este punto usaremos el comando function() para crear funciones para calcular las medidas de tendencia central

primero se crea una funcion para hallar la moda, despues creamos otra funcion usando los comandos mean y median para hallar la media y mediana y se le aƱade la funcion de moda para asi calcular las medidas de tendencia central para cada variable

Nota: hay que tener encuenta que la media y mediana solo se usan para variables cuantitativas

#funcion para calcular la moda
moda<-function(C){
    table(C)
    frecuencias<-data.frame(table(C))
    M<-frecuencias[which.max(frecuencias$Freq),1]
    print(paste0("Moda ",M))}

#en este paso se realiza la funcion para calcular las medidas de tendencia central y se aƱade la funcion para calcular la moda
Med.Ten.Central<-function(X){
  print(paste0("Media ",round(mean(X),2)))
  print(paste0("Mediana ",median(X)))
  moda(X)
}

Terminado de crear las funciones proceguimos a hallar las medidas de tendencia central

Med.Ten.Central(wages)
## [1] "Media NA"
## [1] "Mediana NA"
## [1] "Moda 7"
Med.Ten.Central(education)
## [1] "Media NA"
## [1] "Mediana NA"
## [1] "Moda 12"
Med.Ten.Central(age)
## [1] "Media 43.98"
## [1] "Mediana 41"
## [1] "Moda 32"

como las variables sex y language son tipo factor solo se les halla la moda por lo que solo se utilizaria la funcion para hallr la moda

moda(sex)
## [1] "Moda Female"
moda(language)
## [1] "Moda English"

3.2 Medidas de variabilidad: rango, varianza, desviación estÔndar, coeficiente de variación

Al igual que con las medidas de tendencia central se realiza una funcion para calcular las medidas de variabilidad usando los comandos var() para varianza y sd() para desviación estÔndar respectivamente para rango se hace una operacion usando los comandos max() y min() y lo mismo pasaria para el coeficiente de variación

Med.Variabilidad<-function(X){
  rango=max(X)-min(X);
  print(paste0("Rango ",rango))
  print(paste0("Variacion ",var(X)))
  print(paste0("Desviacion Estandar ", sd(X)))
  CV=(sd(X)/mean(X))*100
  print(paste0("Coeficiente de Variacion ",CV))
}

se procede a calcular las medidas de variabilidad

Med.Variabilidad(wages)
## [1] "Rango NA"
## [1] "Variacion NA"
## [1] "Desviacion Estandar NA"
## [1] "Coeficiente de Variacion NA"
Med.Variabilidad(education)
## [1] "Rango NA"
## [1] "Variacion NA"
## [1] "Desviacion Estandar NA"
## [1] "Coeficiente de Variacion NA"
Med.Variabilidad(age)
## [1] "Rango 79"
## [1] "Variacion 313.097224326599"
## [1] "Desviacion Estandar 17.6945535215387"
## [1] "Coeficiente de Variacion 40.2306566078614"

no se pudieron calculcar las medidas de variabilidad de las variables sex y languaje ya que son tipo factor

3.3 Medidas de colocación: cuartiles

Para calcular los cuartiles se usa el comando quantile(), se debe tener en cuenta solo las variables de tipo cuantitativa

quantile(wages,na.rm=TRUE)
##     0%    25%    50%    75%   100% 
##  2.300  9.235 14.090 19.800 49.920
quantile(education,na.rm=TRUE)
##     0%    25%    50%    75%   100% 
##  0.000 10.300 12.100 14.525 20.000
quantile(age)
##   0%  25%  50%  75% 100% 
##   16   30   41   57   95

3.4 Medidas de forma y simetría: coeficiente de asimetría, curtósis

Para calcular las medidas de forma y simetria es necesario realizar una funcion para el coeficiente de asimetria y para la curtosis

#funcion para calcular el coeficiente de asimetria
Coef.asimetria<-function(xx)
{
  exp1=sum(((xx-mean(xx))/sd(xx))^3)
  m=length(xx)
  exp2=(m/((m-1)*(m-2)))
  asim=exp2*exp1
  print(asim)
}
Coef.asimetria(wages)
## [1] NA
Coef.asimetria(education)
## [1] NA
Coef.asimetria(age)
## [1] 0.4178473
#funcion para calcular la curtosis

curtosis<-function(x){
  exp1=sum(((x-mean(x))/sd(x))^4)
  n=length(x)
  exp2=(n*(n+1))/((n-1)*(n-2)*(n-3))
  exp3=(3*(n-1)^2)/((n-2)*(n-3))
  curt=exp1*exp2-exp3
  print(curt)
}

A continuacion calculamos el coeficiente de asimetría y curtósis para las variables tipo cuantitativa

Coef.asimetria(wages)
## [1] NA
Coef.asimetria(education)
## [1] NA
Coef.asimetria(age)
## [1] 0.4178473
curtosis(wages)
## [1] NA
curtosis(education)
## [1] NA
curtosis(age)
## [1] -0.6983519
  1. Representación del conjunto de datos según el tipo de variable (todos los grÔficos deben de tener sus títulos y colores modificados)

En este caso usaremos los paquetes ggpubr y ggplot2 asi como los graficos que ya vienen por defecto en R

library(ggpubr)
## Loading required package: ggplot2
library(ggplot2)

A continuacion a realizar un grafico por variable

gghistogram(wages,fill = "red")+labs(title="Salarios",x="Wages",y="N. de personas")
## Warning: Using `bins = 30` by default. Pick better value with the argument
## `bins`.
## Warning: Removed 3278 rows containing non-finite values (stat_bin).

boxplot(education,ylab="AƱos",main="AƱos de educacion"
        ,col = "green"
        ,las=1 
        ,pch="-" 
        ,cex=3) 

tab.frec.age<-data.frame(table(age)) 
colnames(tab.frec.age)=c("edad","freq");
head(tab.frec.age)
##   edad freq
## 1   16  120
## 2   17  125
## 3   18  121
## 4   19  137
## 5   20  132
## 6   21  111
ggplot(tab.frec.age, aes(x=edad, y=freq)) + 
geom_point(size=2.5, color="#69b3a2")+labs(title="Edades",x="Age",y="N. de personas")

tab.frec.sex=table(sex);tab.frec.sex
## sex
## Female   Male 
##   3880   3545
tab.frec.sex/sum(tab.frec.sex)*100#porcentaje de cada hotel
## sex
##   Female     Male 
## 52.25589 47.74411
porcentajes=as.numeric(round(tab.frec.sex/sum(tab.frec.sex)*100,2));porcentajes
## [1] 52.26 47.74
etiquetas<-paste(levels(sex),porcentajes);etiquetas
## [1] "Female 52.26" "Male 47.74"
etiquetas<-paste(etiquetas,"%");etiquetas
## [1] "Female 52.26 %" "Male 47.74 %"
pie(porcentajes,etiquetas,
    main = "Sexo",
    col = rainbow(3))

tab.frec.language<-data.frame(table(language));tab.frec.language 
##   language Freq
## 1  English 5716
## 2   French  497
## 3    Other 1091
colnames(tab.frec.language)=c("lenguaje","frec");tab.frec.language
##   lenguaje frec
## 1  English 5716
## 2   French  497
## 3    Other 1091
ggbarplot(tab.frec.language, x = "lenguaje", y = "frec",
          fill = "lenguaje")+labs(title="Lenguajes",x="Age",y="N. de Personas")

  1. Conclusiones e interpretación de cada una de las 5 variables analizadas

Despues del analisis de cada una de las vriables de la tabla de datos SLID podemos concluir lo siguiente