Modulo: Visualizacion de Datos en R
Base de datos:SLID
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.
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.
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
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)
diagrama de dispercion de la varriable age
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")
Despues del analisis de cada una de las vriables de la tabla de datos SLID podemos concluir lo siguiente
La media y mediana de las variables wages y education dieron como resultado NA por lo que se puede inferir que faltan una gran cantidad de datos en estas variables, en caso de wages esta sesgado a la izquierda y education esta sesgado a la derecha
el analisis de la variable sex nos informa que en la encuesta participaron mas mujeres que hombres
de la variable language tambien faltan algunos datos pero la imformacion resalta que el lenguaje mas hablado es el ingles
con el analisis en age se determino que el mayor numero de personas tiene una edad de 32 aƱos