Como sabemos, los estadísticos de tendencia central van a depender deltipo de variable que estemos analizando.
Para practicar este apartado vamos a utilizar la base de datos de Lapopdel año 2017. Lapop es elProyecto de Opinión Pública de América Latina implementado por laUniversidad de Vanderbilt, el cual es un proyecto de investigaciónmultinacional especializado en el desarrollo, implementación y análisisde encuestas de opinión pública.
Abrimos la base de datos desde nuestro repositorio:
library(rio)link="https://github.com/DataPolitica/salidas/raw/master/Data/sub_lapop.sav"lapop=import(link)
Esta base de datos ha sido editada con fines didácticos (idioma,recodificación, etc).
5.1 Para nominales
5.1.1 Preparación
Selecciones la variable urbanorural y procedemos a configurarlaadecuadamente.
Primero identifiquemos cómo el R está leyendo la variable.
str(lapop$urbanorural)## num [1:2153] 2 2 2 2 2 2 2 2 2 2 ...## - attr(*, "label")= chr "Urbano / Rural"## - attr(*, "format.spss")= chr "F8.2"## - attr(*, "display_width")= int 9## - attr(*, "labels")= Named num [1:2] 1 2## ..- attr(*, "names")= chr [1:2] "Urbano" "Rural"class(lapop$urbanorural)## [1] "numeric"
Luego, al ver que aún se encuentra como numérico, entonces loconvertimos en factor:
lapop$urbanorural=as.factor(lapop$urbanorural)class(lapop$urbanorural)## [1] "factor"
Verificamos los niveles y, de acuerdo con la metadata, le asignamos lasetiquetas a cada uno de los mismos.
levels(lapop$urbanorural)## [1] "1" "2"levels(lapop$urbanorural)<-c("Urbano","Rural")levels(lapop$urbanorural)## [1] "Urbano" "Rural"
Asimismo, podemos solicitar una tabla que nos muestre las proporcionespor cada categoría. Para ello, utilizamos la función prop.table()
.Cuando escribimos esta función hay que tener en cuenta que la tenemosque aplicar sobre la tabla de frecuencias normal (que aplicamosanteriormente):
prop.table(table(lapop$urbanorural))## ## Urbano Rural ## 0.6149559 0.3850441
Si queremos los porcentaje hacemos lo mismo pero al final le decimos quelo multiple por 100 (*100):
prop.table(table(lapop$urbanorural))*100## ## Urbano Rural ## 61.49559 38.50441
Ya tenemos la variable lista para aplicar técnicas de análisisdescriptivo.
5.1.2 Estadísticos descriptivos
Lo primero que podemos hacer es solicitar la función summary
. Estafunción nos va a dar una mirada rápida al contenido de nuestra variable.En el caso de ser factor, nos va a mostrar las frecuencias (incluye losNA si los hubiera):
summary(lapop$urbanorural)## Urbano Rural ## 1324 829
Como sabemos el estadístico más idóneo para variables nominales es lamoda. Por ello, hacemos uso del paquete DescTools
y de la funciónMode()
:
library(DescTools)Mode(lapop$urbanorural)## [1] Urbano## attr(,"freq")## [1] 1324## Levels: Urbano Rural
Lo que nos dice el resultado es que la moda es la categoría Urbano ynos indica la frecuencia.
Otra opción también es solicitar una tabla simple para ver la frecuenciade cada categoría.
table (lapop$urbanorural)## ## Urbano Rural ## 1324 829
5.1.3 Gráficos
Lo primero que podemos solicitar es un diagrama de pie o de sectores.Nótese que primero debemos crear un objeto que sea la tabla de lavariable que deseamos graficar, en este caso, de urbano rural. De esamanera, el programa podrá utilizar los datos y plasmarlos en un gráfico.
mi_tabla <- table(lapop$urbanorural)pie(mi_tabla)
Image
Es recomendable graficar un máximo de 7 sectores. Si colocamos una varaible con más sector puede resultar confusa la interpretación.
También podemos solicitar un diagrama de barras.
barplot(mi_tabla)
Image
Agregando más detalles a nuestros gráficos
Hasta este momento hemos visto que podemos solicitar gráficos de unaforma muy práctica. Sin embargo, nosotros podemos solicitar un productomás elaborado en la medida en que agreguemos más características alcódigo.
Por ejemplo, si deseamos un diagrama de barras azul escribimos:
barplot(mi_tabla, col="blue")
Image
Si deseamos un diagrama de barras azul y con título escribimos:
barplot(mi_tabla,col="blue", main="Casos según su lugar de procedencia")
Image
Como nos damos cuenta, nosotros podemos ir agregando más característicasa nuestro código. Es posible que recuerdes ejemplos de códigos deprogramación que son líneas interminables. Eso es así porque losprogramadores elaboran productos muy específicos y que, en su mayoría deveces, requieren la especificación de muchas características.
Nuestro objetivo será avanzar en el uso de estos códigos de programaciónpara poder, al igual que los programadores, elaborar análisisestadísticas cada vez más complejos y específicos.
5.2 Para ordinales
Abrimos la base de datos LAPOP desde nuestro repositorio:
library(rio)link="https://github.com/DataPolitica/salidas/raw/master/Data/sub_lapop.sav"lapop=import(link)
5.2.1 Preparación
Esta vez vamos a utilizar la variable Interés en la política.Procedemos a configurarla adecuadamente.
Primero identifiquemos cómo el R está leyendo la variable.
str(lapop$interes)## num [1:2153] 2 2 1 1 1 2 2 2 2 3 ...## - attr(*, "label")= chr "Interés en la política"## - attr(*, "format.spss")= chr "F8.2"## - attr(*, "display_width")= int 11## - attr(*, "labels")= Named num [1:4] 1 2 3 4## ..- attr(*, "names")= chr [1:4] "Nada" "Un poco" "Algo" "Mucho"class(lapop$interes)## [1] "numeric"
Luego, al ver que aún se encuentra como numérico, entonces loconvertimos en factor ordenado:
lapop$interes=ordered(lapop$interes)class(lapop$interes)## [1] "ordered" "factor"
Verificamos los niveles y, de acuerdo con la metadata, le asignamos lasetiquetas a cada uno de los mismos. En este caso los significados son:1, “Nada”; 2, “Poco”; 3, “Algo”; y 4, “Mucho”.
levels(lapop$interes)## [1] "1" "2" "3" "4"levels(lapop$interes)<-c("Nada","Poco", "Algo", "Mucho")levels(lapop$interes)## [1] "Nada" "Poco" "Algo" "Mucho"
Ya tenemos la variable lista para aplicar técnicas de análisisdescriptivo para ordinales.
5.2.2 Estadísticos descriptivos
Al igual que la sección anterior, podemos solicitar la funciónsummary()
para que nos muestre las frecuencias por cada categoría (eneste caso tampoco tenemos NA´´s):
summary(lapop$interes)## Nada Poco Algo Mucho ## 632 787 532 202
Utilizando el paquete DescTools
podemos solicitar la moda, con lafunción Mode()
; y la mediana, con la función Median()
:
library(DescTools)Mode(lapop$interes)## [1] Poco## attr(,"freq")## [1] 787## Levels: Nada < Poco < Algo < MuchoMedian(lapop$interes)## [1] Poco## Levels: Nada < Poco < Algo < Mucho
Lo que nos dice el resultado es que la moda es la categoría Poco. Lamediana nos dice que, si ordenamos los resultados de menor a mayor, elvalor central es Poco. También podemos interpretarlo como que “almenos el 50% de los casos tienen poco interés en la política”.
Otra opción, al igual que las nominales, es solicitar una tabla simplepara ver la frecuencia de cada categoría.
table (lapop$interes)## ## Nada Poco Algo Mucho ## 632 787 532 202
5.2.3 Gráficos
Primero creamos un objeto que sea la tabla de la variable que deseamosgraficar, en este caso, interés por la política.
mi_tabla <- table(lapop$interes)mi_tabla## ## Nada Poco Algo Mucho ## 632 787 532 202
Solicitamos un diagrama de pie o sector con la función pie()
:
pie(mi_tabla)
Image
Solicitamos un diagrama de barras con la función barplor()
:
barplot(mi_tabla)
Image
5.3 Para numéricas
5.3.1 Preparación
Abrimos la base de datos LAPOP desde nuestro repositorio:
library(rio)link="https://github.com/DataPolitica/salidas/raw/master/Data/sub_lapop.sav"lapop=import(link)
Seleccionamos la variable ingresos
5.3.2 Estadísticos descriptivos
Solicitar la función summary()
y vamos a ver que el resultado variablesignificativamente de los resultados de las variables categóricas:
summary(lapop$ingresos)## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 1316 2661 3010 3012 3341 4667
Como vemos, el summary ahora nos muestra los principales estadísticos deuna variable numérica, es decir: mínimo, 1er cuartil, mediana, media opromedio, 3er cuartil y máximo. Siempre que tengamos una variablenumérica comencemos por solicitar esta función.
5.3.3 Estadísticos de dispersión
La lógica es la misma, colocamos la función y entre paréntesis el nombrede la variable:
Si deseamos la desviación estándar utilizamos la función sd()
:
sd(lapop$ingresos)## [1] 498.6063
Si deseamos la varianza utilizamos la función var()
:
var(lapop$ingresos)## [1] 248608.3
También podemos pedir estadísticos de dispersión.
Para solicitar la asimetría y curtosis primero abrimos el paquetee1071
:
library(e1071)
Para la asimetría utilizamos la función skewness()
:
skewness(lapop$ingresos)## [1] 0.0544436
Para la curtosis utilizamos la función kurtosis()
:
kurtosis(lapop$ingresos)## [1] -0.0678835
5.3.4 Gráficos
En este caso, como estamos ante una variable numérica, no necesitamoscrear una tabla antes de solicitar los gráficos.
- Histograma
Solicitemos un histograma con la función hist()
:
hist(lapop$ingresos)
Image
- Diagrama de cajas o boxplot
Solicitemos un diagrama de cajas con la función boxplot()
:
boxplot(lapop$ingresos)
Image
5.4 Análisis bivariado
5.4.1 Tablas de contingencia
Abrimos la base de datos LAPOP desde nuestro repositorio:
library(rio)link="https://github.com/DataPolitica/salidas/raw/master/Data/sub_lapop.sav"lapop=import(link)
Verificamos y configuramos adecuadamente las variables que utilizaremos
lapop$urbanorural=as.factor(lapop$urbanorural)levels(lapop$urbanorural)<-c("Urbano","Rural")lapop$sexo=as.factor(lapop$sexo)levels(lapop$sexo)<-c("Hombre","Mujer")
Una vez que hemos identificamos dos variables categóricas lo primerosque podemos solicitar es una tabla de contingencia.
Ante de seguir te sugiero ver el siguiente tutorial para solicitartablas de contigencias:
Como vimos en el video, podemos pedir tablas de contingencia con lafunción table()
. Hagamos una tabla para las variables urbanorural ysexo:
Primero hallemos una tabla de contingencia simple, con sólo lasfrecuencias. La llamaremos tabla1:
tabla1 <- table(lapop$urbanorural, lapop$sexo)tabla1## ## Hombre Mujer## Urbano 687 637## Rural 434 395
Podemos agregarle los totales marginales escribiendo la siguientefunción addmargins()
addmargins(tabla1)## ## Hombre Mujer Sum## Urbano 687 637 1324## Rural 434 395 829## Sum 1121 1032 2153
Ahora, pidamos una tabla de contingencia con porcentaje Tenemos quehacer referencia a la tabla creada anteriormente y usar el comandoprop.table()
y lo multiplicamos por 100. La llamaremos tabla2:
tabla2 <- prop.table(tabla1)*100tabla2## ## Hombre Mujer## Urbano 31.90896 29.58662## Rural 20.15792 18.34649
Vemos que nos da los valores totales, pero nosotros queremos sólo losporcentaje por columna. Para ello, debemos hacer referencia a lascolumnas dentro del comando agregando el número 2 (si ponemos 1aparecerán los porcentaje por filas)
tabla3 <- prop.table(tabla1, 2)*100tabla3## ## Hombre Mujer## Urbano 61.28457 61.72481## Rural 38.71543 38.27519
Por último, podemos agregarle los totales marginales escribiendo lasiguiente función addmargins()
addmargins(tabla3)## ## Hombre Mujer Sum## Urbano 61.28457 61.72481 123.00937## Rural 38.71543 38.27519 76.99063## Sum 100.00000 100.00000 200.00000
5.4.2 Una numérica y una categórica
Para mostrar los descriptivos de una variable numérica según unavariable categórica tenemos que considerar a esta última como grupos. Deesta manera, lo que hacemos en realidad es la comparación de la numéricaentre 2 o más grupos.
Para ello, utilizamos el paquete psych()
library(psych)
Para describir la varible podemos utilizar la función describeBy()
.Notemos que primero debemos poner la variable numérica y luego el grupode comparación.
Por ejemplo, obtengamos los estadísticos descriptivos de la variableEdad según si la persona pertenece al ámbito rural o urbano(categórica/grupos):
describeBy(lapop$edad,group=lapop$urbanorural)## ## Descriptive statistics by group ## group: Urbano## vars n mean sd median trimmed mad min max range skew kurtosis se## X1 1 1324 37.79 14.59 35 36.51 14.83 18 86 68 0.67 -0.27 0.4## ------------------------------------------------------------ ## group: Rural## vars n mean sd median trimmed mad min max range skew kurtosis se## X1 1 829 36.96 13.68 35 35.84 14.83 18 80 62 0.63 -0.25 0.48
También podemos solicitar un diagrama de cajas o boxplot según losgrupos:
boxplot(lapop$edad~lapop$urbanorural)
Image
5.4.3 Dos variables numéricas
Utilicemos la base de datos trabajadores:
library(rio)base_trabajadores="https://github.com/DataPolitica/salidas/raw/master/Data/trabajadores.sav"trabajadores=import(base_trabajadores)
Para analizar la relación entre dos variables numéricas es muy comúnreferirse al gráfico de dispersión.
Para ello, solicitamos el gráfico con la función plot()
. Entreparéntesis colocar las dos variables numéricas: el salario inicial y elsalario actual de los trabajadores de una empresa.
plot(trabajadores$salario_actual, trabajadores$salario_inicial)
Image
Podemos especificar más elementos de nuestro gráfico de dispersión.Agreguemos título del gráfico y etiquetas de los ejes X e Y:
plot(trabajadores$salario_actual, trabajadores$salario_inicial, main="Relación entre salario inicial y salario final", xlab="Salario actual", ylab="Salario final")