Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información aquí

View site in english Ir a la página de inicio Contacta conmigo
viernes, 21 de octubre de 2016

Análisis de datos PISA, análisis de correspondencias

La base de datos del programa PISA contiene, además de las calificaciones de los alumnos, una gran cantidad de datos demográficos, socioeconómicos y culturales sobre ellos, recogidos mediante una serie de cuestionarios y que permiten poner en contexto los resultados académicos y realizar estudios con gran número de variables. La mayoría de estos datos son categóricos, lo que hace que el análisis de correspondencias sea una herramienta especialmente apropiada para trabajar con ellos. En este artículo mostraré como realizar de forma sencilla dicho análisis utilizando el paquete ca del programa R.

Los datos PISA se pueden obtener de la web oficial de PISA de la OCDE. En este blog he publicado una versión para SQL Server de la base de datos de PISA, que podéis descargar e instalar localmente. En el enlace anterior también podéis acceder a una herramienta para realizar consultas en la base de datos y obtener muestras.

En este artículo podéis ver una introducción al análisis de datos PISA, y en este enlace podéis descargar el código R con los ejemplos de funciones de muestreo de datos que utilizaré en este artículo. En este otro enlace podéis descargar código R para crear una tabla de contingencia con los datos de PISA.

En este otro enlace podéis descargar un archivo con datos de ejemplo que utilizaré en este artículo. Contiene datos para el año 2012 de tres países, Finlandia, uno de los que obtiene mejores resultados, España, situado en un nivel medio, y Perú, uno de los últimos de la clasificación.

El análisis de correspondencias

Hacer un estudio en profundidad sobre los fundamentos del análisis de correspondencias escapa a las posibilidades de un post en un blog, por lo que os recomiendo el libro La práctica del análisis de correspondencias, de Michael Greenacre, donde podéis encontrar una excelente y sencilla exposición de todo lo referente a esta técnica de análisis.

Básicamente, el análisis de correspondencias es una técnica de escalado óptimo de datos, que permite su representación gráfica en forma de mapas, normalmente bidimensionales, en los que se pueden observar las relaciones entre las filas y las columnas de una tabla cruzada de contingencia.

Consideramos las filas y las columnas de la tabla como una serie de vectores n-dimensionales, siendo n el número de columnas para las filas, o el de filas para las columnas. De esta manera podemos ver una fila o una columna como un punto en un espacio n-dimensional, cuyas coordenadas son las proporciones correspondientes, con un valor continuo entre 0 y 1. Llamamos a estos vectores perfiles fila o perfiles columna.

Las frecuencias marginales de las filas y de las columnas forman un nuevo perfil llamado perfil medio. Existe un perfil columna medio y un perfil fila medio. El análisis de correspondencias puede realizarse tomando las filas o las columnas como referencia, siendo equivalentes los resultados. Se trata de un análisis simétrico.

Si tomamos por ejemplo las filas como referencia, podemos considerar una región de un espacio de dimensión m – 1, siendo m el número de coordenadas o columnas de cada fila, delimitado por los puntos en los que cada una de las filas representaría el 100% de los elementos de una de las columnas. Esta región se denomina simplex, y en un espacio tridimensional, por ejemplo, sería el plano que pasa por los puntos (1,0,0), (0,1,0) y (0,0,1).

Dentro de este espacio, podemos trazar los puntos que corresponden a cada una de las columnas, utilizando como coordenadas las proporciones que corresponden a cada una de las filas. Estos puntos quedarán sobre la superficie del simplex.

Es evidente que estos puntos se encontrarán más cercanos a los vértices correspondientes a las coordenadas con mayores frecuencias relativas de cada columna. En el análisis de correspondencias se llama masa a este peso relativo de cada una de las coordenadas de los perfiles de cada fila o columna. Cada fila o columna tiene además una masa total de fila o de columna que corresponde con su frecuencia marginal.

La fila y columna con las frecuencias marginales, o perfil fila y perfil columna se pueden considerar como el perfil promedio para todas las filas o columnas, y se denominan centroides. A partir de aquí, podemos calcular una distancia de cada una de las filas o columnas a su centroide o fila o columna promedio, de manera que, si esperamos que todas ellas sean parecidas a la media, podemos cuantificar cuanto se apartan de esta hipótesis y su significación estadística.

Como medida de distancia se utiliza la distancia ji-cuadrado, calculada a partir del cociente entre la diferencia entre el valor observado y el esperado elevada al cuadrado y el valor esperado, donde el valor observado son las coordenadas de la fila o columna y el valor esperado es el perfil medio de fila o columna.

Este estadístico sigue una distribución χ2, con (f-1)(c-1) grados de libertad, donde f es el número de filas y c el número de columnas, con lo que podemos aceptar o rechazar la hipótesis de homogeneidad entre filas o columnas fácilmente.

La distancia ji-cuadrado nos da una idea del grado de dispersión de los puntos en el mapa gráfico del análisis de correspondencia. Una medida derivada de este estadístico es la inercia, calculada a partir de la distancia ji-cuadrado y el número total de elementos en la tabla, que nos da una medida de la varianza independiente del tamaño.

Como resulta normal que utilicemos esta técnica para analizar matrices de datos relativamente grandes, donde no es fácil ver las relaciones a simple vista, tendremos espacios de perfiles de alta dimensión, mientras que la representación gráfica se va a realizar en un espacio de dos dimensiones, tres a lo sumo, por lo que será necesario proyectar los puntos. Para realizar esta operación, se utiliza una técnica llamada descomposición en valores singulares, o DVS. También se utilizan técnicas de escalado óptimo para situar los puntos proyectados de manera que se visualicen las relaciones entre ellos de la forma más clara posible.

De este modo, estamos trabajando con datos categóricos como si se tratara de valores continuos.

Análisis de correspondencias con R

Ahora voy a mostrar cómo realizar en la práctica este tipo de análisis con el programa R y uno de los paquetes dedicados al análisis de correspondencias, el paquete ca.

En primer lugar, cargamos los datos de la muestra, en formato csv, en un dataframe, y los scripts con las funciones de muestreo de datos:

data<-read.csv("ca-filters.csv",sep=";")
source("pisa-sampling-code.r")
source("sample-ppc.r")

Recordemos que, en la base de datos PISA, los datos de un alumno no representan a un individuo, sino a un conjunto de individuos, por lo que debemos utilizar los pesos asignados a cada registro para ponderar los cálculos.

Las columnas de datos son las siguientes:

names(data)
[1] "YEAR" "STUDENTID" "SCHOOLID" "COUNTRY_NAME"
[5] "SUBNATIO_NAME" "STRATUM_NAME" "ST115Q01_2012" "ST26Q06_2012"
[9] "ST26Q07_2012" "ST08Q09_2012" "W_FSTUWT"

De estas, solo interesan COUNTRY_NAME, que es el nombre del país, y las cinco últimas, que contienen datos sobre el alumno y el peso.

Existen datos de tres países diferentes, Finlandia, España y Perú, con diferente número de registros:

summary(data[,"COUNTRY_NAME"])
Finland Peru Spain
8829 6035 25313

En primer lugar, obtendremos una muestra con un número aproximadamente igual de registros para todos los países y sin valores faltantes con los datos de país, peso del registro y la columna ST08Q09_2012, que contiene datos sobre los días completos que el alumno ha faltado a clase:

summary(data[,"ST08Q09_2012"])
1-2 3-4 5- N NA's
6356 782 372 32239 428

Los datos están divididos en cuatro categorías, 1 o 2 días, 3 o 4 días, 5 o más días y N para indicar que no se ha faltado ningún día. Para obtener una muestra sin valores faltantes usaremos la siguiente función:

datas<-wght_multiple_sample(data,"COUNTRY_NAME",
c("ST08Q09_2012","W_FSTUWT"),50000,"W_FSTUWT")

Donde indicamos cual es la columna del país, las columnas adicionales que queremos obtener, el número máximo de muestras por país y la columna que contiene los pesos. Renombramos las columnas para facilitar la lectura del gráfico. Este es el resultado:

names(datas)<-c("PAIS","D","PESO")
summary(datas)
PAIS D PESO
Finland: 8645 1-2: 6356 Min. : 1.008
Peru : 5997 3-4: 782 1st Qu.: 3.325
Spain :25107 5- : 372 Median : 8.076
N :32239 Mean : 21.463
3rd Qu.: 33.012
Max. :297.305

Ahora vamos a obtener una tabla de contingencia que cruce los tres países con el número de días, ponderados por los pesos, que han faltado los alumnos a clase:

mtx<-wght_ppc_bycnt(datas,"PAIS","D","PESO")
mtx
D-1-2 D-3-4 D-5- D-N
Finland 0.006319715 0.0005741573 0.0004663525 0.06328732
Peru 0.055626536 0.0107576788 0.0035847888 0.42217349
Spain 0.105852223 0.0115135558 0.0051497598 0.31469442

Con esta tabla, es muy sencillo realizar el análisis de correspondencias:

require(ca)
ca1<-ca(mtx)
plot(ca1,map="colprincipal",mass=c(T,T))

Gráfica del análisis de correspondencias
Gráfico del análisis de correspondencias

Con el parámetro map hemos indicado que queremos que las coordenadas principales sean las columnas, que se muestran en referencia a los vértices, donde se encuentran los países. El parámetro mass sirve para indicar que queremos que el tamaño de los símbolos que representan los distintos puntos sea proporcional a sus masas.

En el gráfico podemos ver que no faltar a clase ningún día completo es lo más común, en proporciones similares en los tres países, aunque algo más en Finlandia y Perú. Faltar unos pocos días, entre 1 y 4, es más común en España que en los otros dos países, aunque faltar 3 o 4 días presenta una frecuencia similar entre España y Perú. También vemos que faltar 5 días o más es bastante anecdótico, por el pequeño tamaño del símbolo, y la frecuencia es más o menos similar en los tres países, ya que está bastante cerca del centro, aunque algo mayor en España. Podemos comprobar todo esto consultando la tabla de contingencia.

Si examinamos el objeto ca1, que contiene los datos del análisis de correspondencias, podemos observar lo siguiente:

Principal inertias (eigenvalues):
1 2
Value 0.033218 0.000423
Percentage 98.74% 1.26%


Rows:
Finland Peru Spain
Mass 0.070648 0.492142 0.437210
ChiDist 0.241314 0.149918 0.205517
Inertia 0.004114 0.011061 0.018467
Dim. 1 1.267201 0.819762 -1.127524
Dim. 2 3.398378 -0.599934 0.126178


Columns:
D-1-2 D-3-4 D-5- D-N
Mass 0.167798 0.022845 0.009201 0.800155
ChiDist 0.391888 0.201091 0.247627 0.089320
Inertia 0.025770 0.000924 0.000564 0.006384
Dim. 1 -2.149648 -0.825093 -1.357733 0.489967
Dim. 2 0.423008 -6.487395 0.443576 0.091414

En primer lugar tenemos la inercia total explicada por cada una de las dos dimensiones. Se puede ver que se puede distribuir el 100% de la inercia en las dos dimensiones.

A continuación, están los valores del análisis de las filas (países). En este caso, la masa es proporcional a la población de cada país. La fila ChiDist contiene las distancias ji-cuadrado al centroide o perfil promedio de cada uno de los países. Tenemos otra fila con la inercia de cada uno de los países y, por último, las coordenadas de cada uno de ellos en las dimensiones 1 y 2.

Lo mismo sucede con las columnas correspondientes con el recuento de los días que los alumnos faltaron a clase.

Podemos ver otro ejemplo con otras dos variables que contiene la muestra de datos de ejemplo. La columna ST26Q06_2012, que indica si el alumno posee una conexión a internet, codificada como N (no) o Y (si), y ST26Q07_2012, que indica si en su casa hay libros de literatura clásica, codificada de la misma manera. En primer lugar, realizamos un muestreo sin valores faltantes:

datas<-wght_multiple_sample(data,4,c(8,9,11),50000,11)

Esta vez hemos realizado el muestreo indicando el índice de las columnas en lugar de sus nombres. Ahora construiremos una columna a partir de los valores de INTERNET y LITERATURA, con las cuatro combinaciones posibles:

c<-paste(datas[,2],datas[,3],sep="-")
datas<-cbind(datas,as.factor(c))
names(datas)<-c("PAIS","INTERNET","LITERATURA","PESO","I+L")

Construimos la tabla de contingencia con esta última columna:

mtx<-wght_ppc_bycnt(datas,1,5,4)
mtx
I+L-N-N I+L-N-Y I+L-Y-N I+L-Y-Y
Finland 0.000225593 4.605372e-05 0.03448387 0.0364791
Peru 0.079078933 2.073570e-01 0.05093388 0.1551462
Spain 0.011895258 1.123424e-02 0.13828133 0.2748386

Y realizamos el análisis de correspondencias de nuevo:

ca1<-ca(mtx)
plot(ca1,map="colprincipal",mass=c(T,T))

Gráfico del análisis de correspondencia para las posesiones internet y literatura
Posesión de internet y literatura

Vemos que en Perú es mucho más común no tener internet que en España o Finlandia. También podemos observar que en Finlandia es más normal tener internet que literatura en casa. En Perú lo más normal es no tener internet, pero si literatura, sin embargo, hay que tener en cuenta que tener ambas cosas tiene una masa bastante grande y se encuentra bastante cerca del centro, lo que indica que es bastante común en todos los países, no hay que dejarse engañar por la posición que ocupa el caso N-N (ni internet ni literatura) tan cercana a Perú, simplemente es en este país donde más se da este caso, pero su incidencia (masa) es muy pequeña.

El análisis de correspondencias es simétrico, lo que quiere decir que siempre se calcula para las filas y para las columnas. Podemos ver el gráfico con las filas como coordenadas principlaes simplemente cambiando el parámetro map:

plot(ca1,map="rowprincipal",mass=c(T,T))

Análisis de correspondencias, uso de las filas como coordenadas principales
Uso de las filas como coordenadas principales

Ahora las categorías de referencia son las columnas, que ocuparían los vértices de un tetraedro de tres dimensiones que hemos proyectado sobre dos dimensiones. Podemos ver que en España y Finlandia no tener internet es prácticamente anecdótico, ya que están situados prácticamente sobre la línea que une los vértices Y-Y y Y-N.

También podemos trazar el mapa utilizando la misma escala para las filas y las columnas:

plot(ca1,map="symmetric",mass=c(T,T))

Gráfico simétrico del análisis de correspondencias
Gráfico de análisis de correspondencias simétrico

Estos ejemplos tienen una dimensión baja, por lo que resultan bastante triviales. En la práctica este tipo de análisis se utiliza para estudiar las relaciones de matrices de contingencia con gran número de filas y de columnas, donde ya no resultan tan evidentes a simple vista las relaciones entre los elementos.

Comparte este artículo: Compartir en Twitter Compártelo en Facebook Compartir en Google Plus Compartir en LinkedIn
Comentarios (0):
* (Su comentario será publicado después de la revisión)

E-Mail


Nombre


Web


Mensaje


CAPTCHA
Change the CAPTCHA codeSpeak the CAPTCHA code