Quinta sesión con Rcmdr: estadística descriptica con un vector (variable cuantitativa, datos no agrupados)

En esta sesión (quizá un poco más larga que las anteriores), vamos a empezar por fin el trabajo propiamente estadístico. Vamos a comenzar con un objetivo bastante modesto, pero para eso sirven los comienzos. Nuestro objetivo es trabajar con una colección de datos, concretamente un vector de datos, almacenados en un fichero csv. Para fijar ideas, vamos a trabajar con el mismo fichero edades01.csv, que ya usamos en la anterior sesión.

Hacemos esto para que nuestro viaje hacia el mundo de R sea lo más cómodo posible, partiendo de una cierta experiencia trabajando con hojas de cálculo. En una próxima sesión, una vez que hayamos introducido la noción de dataframe en R, volveremos a hacer este estudio, aprovechando las facilidades que proporciona para ello Rcmdr. Pero creo que es mejor empezar por lo más elemental, para que después podamos ver con más claridad donde estamos.

Así, que si no lo recuerdas, este es un buen momento para volver a la anterior sesión con Rcmdr, y ver cómo allí se utilizaba la función scan para leer el fichero csv y almacenarlo en un vector llamado vectorEdades. (Presta especial atención al directorio de trabajo en el que está ubicado el fichero). Ese vector contiene una lista de valores de una variable cuantitativa (de tipo discreto),  no agrupados por intervalos.  El tipo de análisis que vamos a hacer aquí se aplica a este tipo de variables; en otras entradas del blog comentaremos las diferencias que aparecen cuando el análisis se lleva a cabo con otros tipos de variables, o cuando trabajamos con datos agrupados.

Una vez cargados los datos, vamos a utilizar R para ir obteniendo, paso a paso, la descripción estadística de este conjunto de datos. Esta lista es como la lista que uno utiliza para hacer la maleta cuando se va de viaje. Algunas personas prefieren viajar con más equipaje, otras prefieren viajar más ligeros, y en cualquier caso la decisión siempre depende del tipo de viaje. Pero, a medida que uno va viajando, es muy posible que la lista sea cada vez más completa (sin llegar a ser enciclopédica).  La lista que vamos a presentar aquí es, seguramente, un compromiso razonable, un buen punto de partida, que el lector podrá ir completando a medida que gane experiencia viajando por la Estadísitica.

Iremos presentando los valores uno por uno, y al final los resumiremos todos en un fichero de instrucciones R que el lector puede usar como plantilla para este tipo de análisis.

1) Número y rango de los datos

Lo más básico es saber con cuántos datos estamos trabajando. Y para definir el rango de los datos necesitamos el valor mínimo y el máximo. Las instrucciones en R son:

n=length(vectorEdades)
n
min(vectorEdades)
max(vectorEdades)

2) Valores centrales (“medias”)

El siguiente paso puede ser calcular los valores centrales. Los mas sencillos son la media aritmética y la mediana. Los calculamos así:

mean(vectorEdades)
median(vectorEdades)

3) Medidas de dispersión: varianza, desviación típica.
Como siempre, al hablar de medidas de dispersión y software estadístico, se hace necesario hacer una advertencia. Es fundamental que el usuario comprenda si la varianza que está obteniendo es la varianza poblacional, definida así:

S^2=\dfrac{\sum_{j=1}^n (x_j-\bar x)^2}{n}

con n en el denominador, o si se trata de la varianza muestral (o cuasivarianza), definida así:

s^2=\dfrac{\sum_{j=1}^n (x_j-\bar x)^2}{n-1}

con n-1 en el denominador. En el caso de R, la función varsiempre calcula la varianza muestral (la cuasivarianza). ¿Y la varianza poblacional? Bueno, el caso es que, sorprendentemente, R no tiene una función para calcular directamente la varianza poblacional. Pero si se recuerda que la relación entre ambas varianzas es:

S^2=\dfrac{n-1}{n}\, s^2

entonces es muy fácil recuperar la varianza poblacional a partir de la función var de R (y del valor de n, que ya hemos obtenido en el primer punto).

La desviación típica muestral (respectivamente poblacional) es la raíz cuadrada de la varianza muestral (resp. poblacional). Como en el caso de las varianzas, R incluye una función, concretamente la función sd (de standard deviation),  para calcular directamente la desviación típica muestral de los elementos de un vector. Si lo que queremos es calcular la desviación típica poblacional,  calcularemos la varianza poblacional y haremos su raíz cuadrada. Y para eso es necesario saber que la raíz cuadrada se calcula con la función sqrt (de square root).

Con estas ideas, el código adecuado para calcular (y mostrar) ambas varianzas y desviaciones típicas es:

varianzaMuestral=var(vectorEdades)
varianzaMuestral
desvTipicaMuestral=sd(vectorEdades)

varianzaPoblacional=((n-1)/n)*varianzaMuestral
varianzaPoblacional
desvTipicaPoblacional=sqrt(varianzaPoblacional)
desvTipicaPoblacional

4) Medidas de posición: cuartiles y percentiles.

El cálculo de los cuartiles (o percentiles) en R, como en cualquier otro programa estadístico, requiere una discusión más detallada que los  valores anteriores que hemos discutido. Por un lado, si lo único que se desea es obtener la información por defecto que proporciona R, dejándo que sea el programa el que decida la mejor forma de proceder, entonces las cosas son muy sencillas. Basta con escribir

summary(vectorEdades)

Y, para el ejemplo con el que estamos trabajando, obtenemos (en la ventana de resultados) una tabla como esta:

> summary(vectorEdades)
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
3.00    6.00    7.00    6.75    8.00   10.00

En la que aparece la información que buscábamos. Por otra parte, en lugar de utilizar summary, si sólo queremos uno de los cuantiles, o si lo que queremos son percentiles, podemos conseguir un control más fino de la respuesta utilizando la función quantile. Esta función necesita dos argumentos: el vector de datos, y un segundo vector en el que aparecen los porcentajes (expresados como tantos por uno) de los percentiles que queremos calcular. Por ejemplo, para pedirle a R que calcule (con el método que más le gusta) los percentiles 5%, 15% y 75% de vectorEdades escribimos este comando:

quantile(vectorEdades,c(0.05,0.15,0.75))
Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
3.00    6.00    7.00    6.75    8.00   10.00

y obtenemos

> quantile(vectorEdades,c(0.05,0.15,0.75))
5%  15%  75%
4.95 5.00 8.00

Aquí, como queremos mantener la discusión lo más simple posible, no vamos a entrar en más detalles técnicos sobre las decisiones que R toma para calcular estos números, pero queremos prevenir al lector de que las cosas se complican enseguida: en R hay varias (concretamente, nueve) formas distintas de calcular los cuartiles. Para no entretenernos aquí, dejaremos la información más detallada para otra entrada del blog.

5) Medidas de forma: simetría y apuntamiento.

En muchos cursos de introducción a la Estadística, al presentar la Estadística Descriptiva (típicamente uno de los primeros, si no el primer tema del curso), se describen también las llamadas medidas de forma de un vector de datos. Concretamente, se describen a menudo la simetría y apuntamiento (skewness y kurtosis, en inglés), como formas de saber cuánto se alejan nuestros datos de una distribución normal. Yo prefiero dejar que la distribución normal aparezca de una manera más natural, y más adelante en el curso,  pero en cualquier caso, añado aquí los comandos necesarios para calcular los coeficientes de simetría y apuntamiento  con R. UNa observación, el comando kurtosis no forma parte del núcleo central de comandos de R, y por eso es necesario cargar una librería para aplicarlo (de ahí el comando library(e1071) ):

skewness(vectorEdades)
library(e1071)
kurtosis(vectorEdades)

6) Tablas de frecuencias (absolutas, acumuladas, relativas)

A veces necesitaremos analizar los datos de un vector en forma de tabla de frecuencias. La tabla de frecuencias puede definirse agrupando los valores por intervalos, o simplemente haciendo un recuento de frecuencias para cada uno de los valores diferentes que forman el vector. La decisión depende de la naturaleza de los datos que forman el vector. Para el caso de vectorEdades (el ejemplo que estamos usando), la tabla de frecuencias (absolutas) , sin agrupar por intervalos se obtiene con el sencillo comando:

table(vectorEdades)

Y la respuesta es:

> table(vectorEdades)
vectorEdades
3  4  5  6  7  8  9 10
1  4 16 21 25 23  9  1

Si lo que queremos es una tabla de frecuencias acumuladas, entonces debemos aplicar la función cumsum al resultado de table. Es decir:

cumsum(table(vectorEdades))

que produce el resultado deseado:

> cumsum(table(vectorEdades))
3   4   5   6   7   8   9  10
1   5  21  42  67  90  99 100

Antes de seguir, queremos detenernos en un punto que puede pasar inadvertido. Hasta ahora, en este blog, y desde que empezamos a aprender sobre R, sólo hemos usado variables y vectores. Pero ahora estamos empezando a obtener tablas como resultado de nuestras operaciones. Las tablas son otra forma de almacenar, mostrar  y manipular datos en R. Y aún nos quedan muchos otros objetos en el camino: matrices, listas, datasets, factores… La lista es larga. Pero iremos aprendiendo sobre todos estos recursos sólo a medida que los necesitemos, y sólo los más sencillos ser necesarios en un primer encuentro con la Estadística.

Las tablas, que acabamos de conocer, se comportan en algunos sentidos como los vectores de R. Por ejemplo, si queremos multiplicar por dos todos los elementos de la tabla de frecuencias de vectorEdades, basta con hacer:

2*table(vectorEdades)

Y la respuesta es:

> 2*table(vectorEdades)
vectorEdades
3  4  5  6  7  8  9 10
2  8 32 42 50 46 18  2

Es decir, que lo que aprendimos de aritmética vectorial se extiende a las tablas. Esto tiene una consecuencia inmediata: la tabla de frecuencias relativas se obtiene simplemente dividiendo la tabla de frecuencias absolutas por el número n (el total de datos, es decir length(vectorEdades)). Y para la tabla de frecuencias acumuladas relativas aplicamos cumsum y luego dividimos. Esto es:

table(vectorEdades)/n
cumsum(table(vectorEdades))/n

7) Gráficos (de columnas y boxplot)

En Estadística el tipo de representación gráfica adecuada depende de la naturaleza de los datos. Para los datos que forman el vectorEdades, un gráfico de barras (no confundir con un histograma) puede ser la opción más sencilla y razonable, al tratarse de una variable aleatoria discreta, que ya hemos decidido antes no agrupar en intervalos. El gráfico se obtiene muy fácilmente mediante la función barplot de R, pero aplicada a la tabla de frecuencias de vectorEdades. Es decir:

barplot(table(vectorEdades))

Y el gráfico que se obtiene es este (cuidado; al menos en Windows, el gráfico no aparece en la ventana de Rcmdr, sino en la ventana llamada Rgui, que puede haber quedado cubierta por la de Rcmdr. A primera vista, puede parecer que el comando barplot no ha tenido efecto):

Dos observaciones:

  1. En R disponemos de muchísimas opciones para cambiar los colores, forma, rótulos, etc. de los gráficos. Nos vamos a conformar por el momento con las opciones más simples, pero conviene que el lector sepa que esto no es ni mucho menos el final de la historia con los gráficos de R.
  2. Naturalmente se pueden obtener gráficos similares a partir de las frecuencias relativas, acumuladas, etc.

El gráfico de caja y bigotes es otro tipo habitual de gráficos para datos como los que estamos manejando en este ejemplo. Y obtenerlo con R es también inmediato:

boxplot(table(vectorEdades))

produce como resultado: 

Resumen final

Con esto hemos completado un conjunto de análisis descriptivos del vector de datos bastante completo. Como resumen, y para faciltar el trabajo, agrupamos en este fichero todos los comandos que hemos utilizado. Hemos remplazado vectorEdades por un vectorDatos más genérico, para que el lector no tenga dificultad en reuitlizar este fichero para sus propios datos. Y hemos intercalado comentarios en el listado de comandos para ayudar a recordar el tipo de análisis que se está efectuando. En próximas entradas veremos análisis similares para valores agrupados por intervalos, variables cualitativas, etc.

Gracias por la atención

Un pensamiento en “Quinta sesión con Rcmdr: estadística descriptica con un vector (variable cuantitativa, datos no agrupados)

  1. Pingback: Novena sesión con Rcmdr: variables aleatorias discretas en R. Sampleando en R. | PostData

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s