Sahlre
4 de mayo de 2016
Esta semana aprenderemos sobre el uso de R para realizar el primer análisis estadístico que se hace sobre una base de datos: Estadística descriptiva. Nos concentraremos en la descripción de la estructura de los datos que almacena cada una de las variables. Para lograrla se utilizaran medidas de sintesis y de dispersión, apoyadas de diferentes gráficos. Se explicará uno de los paquetes estadísticos que permite realizar las mejores gráficas del mercado.
Para aplicar ejemplificar los conceptos se utilizará la siguiente base de datos ficticia de un grupo de 100 estudiantes de la Corporación Universitaria Americana a quienes se les pregunto sobre lo siguiente:
El siguiente código crea el data.frame que almacena la base de datos mencionada
set.seed(1) #No se preocupen si no entienden este código
Estado_civil <- c(rep("Divorciado", 21),
rep("Casado", 58),
rep("Soltero", 33),
rep("Viudo", 15),
rep("Union Libre", 23))
Estado_civil <- sample(Estado_civil, 100, replace = T)
Nivel_Educativo <- c(rep("Ninguno", 44),
rep("Primaria", 67),
rep("Secundaria", 43),
rep("Tecnica o Tecnologia", 36),
rep("Pregrado", 20),
rep("Posgrado", 9))
Nivel_Educativo <- sample(Nivel_Educativo, 100)
Salario <- (sample(rlnorm(10000, 0, 1), 100))*500000
Edad <- rnorm(100, 50, 6)
Promedio <- rnorm(100, 3.3, 0.5)
bd <- data.frame(Edad = Edad,
Estado_civil = Estado_civil,
Nivel_Educativo = Nivel_Educativo,
Salario = Salario,
Notas = Promedio)Recuerde que existen diversos tipos de variables que se utilizan en investigación:
Antes de aplicar estadística descriptiva debes revisar como se subieron cada una de las variable a R, esto lo puedes lograr usando la función str()
str(bd)## 'data.frame': 100 obs. of 5 variables:
## $ Edad : num 38.6 46.9 45.3 54.4 58.1 ...
## $ Estado_civil : Factor w/ 5 levels "Casado","Divorciado",..: 1 1 3 4 1 4 4 3 3 2 ...
## $ Nivel_Educativo: Factor w/ 6 levels "Ninguno","Posgrado",..: 5 4 4 2 5 4 1 4 3 5 ...
## $ Salario : num 1782804 198402 207249 120315 223002 ...
## $ Notas : num 3.55 4.04 3.08 3.18 2.66 ...
Observa que las variables continuas fueron subidas como variables numericas y las variables cualitativas fueron subidas como factor, hasta aquí todo esta bien.
Sin embargo, recuerda que debes estar atento con las variables cualitativas ordinales ya que R no las reconoce de manera automática (Si lo se, R no es perfecto). Por ejemplo, la variable nivel educativo es cualitativa ordinal y seguramente R no la esta tratando como tal, entonces debemos ayudarle.
#No representa una variable cualitativa, ya que R organiza alfabeticamente
summary(bd$Nivel_Educativo)## Ninguno Posgrado Pregrado
## 21 3 10
## Primaria Secundaria Tecnica o Tecnologia
## 35 21 10
levels(bd$Nivel_Educativo)## [1] "Ninguno" "Posgrado" "Pregrado"
## [4] "Primaria" "Secundaria" "Tecnica o Tecnologia"
#Para transformar
bd$Nivel_Educativo <- factor(bd$Nivel_Educativo,
levels = c("Ninguno", "Primaria", "Secundaria",
"Tecnica o Tecnologia", "Pregrado",
"Posgrado"),
ordered = T)
#Ahora todo es como queremos
summary(bd$Nivel_Educativo)## Ninguno Primaria Secundaria
## 21 35 21
## Tecnica o Tecnologia Pregrado Posgrado
## 10 10 3
levels(bd$Nivel_Educativo)## [1] "Ninguno" "Primaria" "Secundaria"
## [4] "Tecnica o Tecnologia" "Pregrado" "Posgrado"
Las medidas de sintesis se extraen utilizando la función summary() o utilizando la función describe() del paquete psych
#Función summary() sobre la variable notas
summary(bd$Notas)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.148 2.954 3.381 3.331 3.728 4.736
#Primero debes instalar el paquete psych, este paso se hace una sola vez
#install.packages("psych")
#Segundo debes cargarlo al sistema, esto lo debes hacer cada vez que abres R studio
library(psych)## Warning: package 'psych' was built under R version 3.2.5
#Luego de hacer los anteriores pasos puedes utilizar la funcion describe()
describe(bd$Notas)## vars n mean sd median trimmed mad min max range skew kurtosis
## 1 1 100 3.33 0.51 3.38 3.33 0.59 2.15 4.74 2.59 0.03 -0.49
## se
## 1 0.05
Los gráficos que se utilizan para las variables continuas son tres; en un reporte de investigación es conveniente utilizar uno, aquel que describa mejor los datos. Graficaremos utilizando el paquete ggplot2.
Histograma
#Instalando el paquete ggplot2
#Primero descargas el paquete usando la función install.packages()
#install.packages("ggplot2")
#Segundo subo o cargo el paquete al sistema usando la función library()
library(ggplot2)##
## Attaching package: 'ggplot2'
## The following objects are masked from 'package:psych':
##
## %+%, alpha
#Creando el histograma
ggplot(bd, aes(x=Notas)) +
geom_histogram(fill = "green", colour = "black") +
xlab("Promedio") + ylab("Frecuencia absoluta")## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Gráfico de densidad de probabilidad
ggplot(bd, aes(x=Notas)) +
geom_line(stat = "density") +
expand_limits(y = 0)Box plot - Diagrama de caja
boxplot(bd$Notas,
xlab = "Notas",
horizontal = T,
col = "green")Medidas de sintesis por grupo
Medidas de sintesis por grupo es un análisis que se usa en la mayoría de las investigaciones, R tiene maneras eficientes de obtenerlas sin necesidad de hacer selección de datos. Suponga que le piden averiguar ciertas medidas de sintesis por grupo (variable cualitativa o cuantitativa discreta), específicamente las notas por estado civil
#Utilizando la función describeBy() del paquete psych
describeBy(bd$Notas, bd$Estado_civil)## group: Casado
## vars n mean sd median trimmed mad min max range skew kurtosis se
## 1 1 43 3.3 0.49 3.21 3.29 0.65 2.41 4.4 1.99 0.18 -1.07 0.07
## --------------------------------------------------------
## group: Divorciado
## vars n mean sd median trimmed mad min max range skew kurtosis
## 1 1 10 3.14 0.59 3.28 3.14 0.42 2.15 4.12 1.97 -0.15 -1.19
## se
## 1 0.19
## --------------------------------------------------------
## group: Soltero
## vars n mean sd median trimmed mad min max range skew kurtosis
## 1 1 20 3.46 0.48 3.56 3.49 0.34 2.34 4.39 2.05 -0.53 0.01
## se
## 1 0.11
## --------------------------------------------------------
## group: Union Libre
## vars n mean sd median trimmed mad min max range skew kurtosis se
## 1 1 13 3.44 0.63 3.39 3.43 0.58 2.32 4.74 2.42 0.22 -0.58 0.17
## --------------------------------------------------------
## group: Viudo
## vars n mean sd median trimmed mad min max range skew kurtosis se
## 1 1 14 3.27 0.47 3.12 3.27 0.57 2.53 4.01 1.48 0.16 -1.49 0.13
#Aplicando la función summary a cada uno de los valores asumidos
#por la variable Estado civil
tapply(bd$Notas, bd$Estado_civil, summary)## $Casado
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.412 2.919 3.207 3.303 3.729 4.401
##
## $Divorciado
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.148 2.672 3.285 3.140 3.491 4.120
##
## $Soltero
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.344 3.179 3.556 3.459 3.726 4.392
##
## $`Union Libre`
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.319 3.092 3.390 3.441 3.837 4.736
##
## $Viudo
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2.530 2.943 3.120 3.268 3.638 4.015
Las medidas de sintesis por grupo también se pueden complementar mediante gráficos.
#Histograma
ggplot(bd, aes(x=Notas)) + geom_histogram(fill="white", colour="black") +
facet_grid(Estado_civil ~ .)## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
#Función de densidad
ggplot(bd, aes(x=Notas, fill=Estado_civil)) +
geom_density(alpha=.2)#Boxplot o Diagrama de caja
ggplot(bd, aes(x=Estado_civil, y=Notas, fill = Estado_civil)) + geom_boxplot()La medida de sintesis se extrae de la función summary()
#Frecuencia absoluta
summary(bd$Nivel_Educativo)## Ninguno Primaria Secundaria
## 21 35 21
## Tecnica o Tecnologia Pregrado Posgrado
## 10 10 3
#Frecuencia relativa
summary(bd$Nivel_Educativo) / length(bd$Nivel_Educativo)## Ninguno Primaria Secundaria
## 0.21 0.35 0.21
## Tecnica o Tecnologia Pregrado Posgrado
## 0.10 0.10 0.03
Sólo se utiliza un gráfico para las variables cualitativas: el gráfico de barras
ggplot(bd, aes(x=Nivel_Educativo, fill = Nivel_Educativo)) + geom_bar()#Frecuencia absoluta
summary(bd$Estado_civil)## Casado Divorciado Soltero Union Libre Viudo
## 43 10 20 13 14
#Frecuencia relativa
summary(bd$Estado_civil) / length(bd$Estado_civil)## Casado Divorciado Soltero Union Libre Viudo
## 0.43 0.10 0.20 0.13 0.14
Sólo se utiliza un gráfico para las variables cualitativas: el gráfico de barras
ggplot(bd, aes(x=Estado_civil, fill = Estado_civil)) + geom_bar()