Algunos definen la Estadística como el área que se enfoca en transformar información en conocimiento. El primer paso en ese proceso es el de resumir y describir la información en crudo – los datos. En esta práctica laboratorial ganarás perspicacia en salud pública mediante la generación de resúmenes gráficos y numéricos simples de un conjunto de datos recolectado por los Centros para el Control y Prevención de Enfermedades de los Estados Unidos (CDC). Ya que este es un conjunto grande de datos, por el camino también aprenderás las habilidades indispensables para el procesamiento y selección (“subagrupación”) de datos.
El Sistema de Vigilancia de Comportamiento para Factores de Riesgo (BRFSS, por sus siglas en inglés, “Behavioral Risk Factor Surveillance System”) es un sondeo telefónico anual de 350.000 personas en los Estados Unidos. Como su nombre indica, el BRFSS está diseñado para identificar factores de riesgo en la población adulta y reportar tendencias de salud emergentes. Por ejemplo, se pregunta a los sondeados sobre su dieta y actividad física semanal, su estado de VIH/SIDA, posible uso de tabaco, e incluso el nivel de covertura de su seguro médico. El sitio web de la BRFSS (http://www.cdc.gov/brfss) contiene una descripción completa del sondeo, incluyendo las preguntas de investigación que motivaron el estudio y muchos resultados interesantes derivados a partir de los datos.
Nos enfocaremos en una muestra aleatoria de 20.000 personas del sondeo BRFSS conducido en el 2000. Mientras que hay más de 200 variables en este conjunto de datos, nosotros trabajaremos con un subgrupo pequeño.
Empezamos con cargar el conjunto de datos de 20.000 observaciones dentro del espacio de trabajo de R. Después de lanzar RStudio, ingresa el siguiente comando
source("http://www.openintro.org/stat/data/cdc.R")
El conjunto de datos cdc que se muestra en tu espacio de trabajo es una matriz de datos (“data matrix”), con cada fila representando un caso y cada columna representando una variable. R denomina a este formato de datos como marco de datos (“data frame”), término que utilizaremos a lo largo de las prácticas laboratoriales.
Para ver los nombres de las variables tipea el comando
names(cdc)
Esto retorna los nombres genhlth, exerany, hlthplan, smoke100, height, weight, wtdesire, age, y gender. Cada una de estas variables corresponde a una pregunta que fue hecha en el sondeo. Por ejemplo, para genhlth se pidió a los sondeados que evaluen su estado general de salud, respondiendo ya sea excelente (“excellent”), muy bueno (“very good”), bueno (“good”), aceptable (“fair”), o pobre (“poor”). La variable exerany indica si el sondeado realizó ejercicios en el mes pasado (1) o no (0). De manera similar, hlthplan indica si el sondeado tiene alguna forma de covertura de salud (1) o no (0). La variable smoke100 indica si el sondeado ha fumando al menos 100 cigarrillos durante su vida. Las otras variables registran la altura (height) en pulgadas, peso (weight) en libras, así como su peso deseado (wtdesire), su edad (age) en años, y su género (gender).
Podemos observar las primeras entradas (filas) de nuestros datos con el comando
head(cdc)
y de manera similar podemos mirar a las últimas entradas tipeando
tail(cdc)
También podrías mirar a todos los datos del marco de una vez tipeando su nombre dentro de la consola, pero eso podría no ser muy inteligente aquí. Sabemos que cdc tiene 20.000 filas, por lo tanto visualizar el conjunto de datos por completo inundaría tu pantalla. Es mejor mirar de a poco a los datos con head (“cabeza”), tail (“cola”) o algunas de las técnicas de subagrupación que aprenderás en un momento.
El cuestionario BRFSS es un tesoro masivo de información. Un buen primer paso en cualquier análisis es el de destilar toda la información en unos pocos sumarios y gráficos estadísticos. Como un ejemplo sencillo, la función summary (“sumario”) regresa un sumario numérico: mínimo, primer cuartilo, mediana, promedio, segundo cuartilo, y máximo. Para weight esto es
summary(cdc$weight)
R también funciona como una calculadora muy sofisticada. Si quisieras calcular el rango intercuartilo para el peso de los sondeados podrías buscar en los resultados del comando summary y luego ingresar
190 - 140
R también tiene funciones incluidas para calcular las estadísticas de sumario una por una. Por ejemplo, para calcular el promedio (“mean”), mediana (“median”), y la varianza (“variance”) de weight tipea
mean(cdc$weight)
var(cdc$weight)
median(cdc$weight)
Mientras que tiene sentido el describir una variable cuantitativa como weight (“peso”) en términos de estos estadìsticos, ¿qué hay acerca de los datos categóricos? Consideraríamos en vez la frecuencia de la muestra o la distribución de la frecuencia relativa. La función table (“tabla”) hace esto contando el número de veces que cada tipo de respuesta fue dada. Por ejemplo, para ver el número de personas que han fumado al menos 100 cigarrillos en su vida tipea
table(cdc$smoke100)
o mira en su lugar la distribución de la frecuencia relativa tipeando
table(cdc$smoke100)/20000
Nota cómo R automáticamente divide todas las entradas en la tabla por 20.000 con el comando de arriba. Esto es similar a algo que observamos en la práctica de “Introducción a R y RStudio”: cuando multiplicamos o dividimos por un número un vector, R aplica esa acción a través de todas las entradas de los vectores. Como se ve arriba, esto también funciona para tablas. A continuación, hacemos un gráfico de barras para las entradas en la tabla poniendo la tabla dentro del comando barplot (“gráfico de barras”).
barplot(table(cdc$smoke100))
¡Nota lo que hemos hecho aquí! Hemos calculado la tabla para cdc$smoke100 y luego aplicamos inmediatamente la función gráfica barplot. Esta es una idea importante: los comandos en R pueden anidarse. Podrías también hacer esto en dos pasos tipeando lo siguiente
smoke <- table(cdc$smoke100)
barplot(smoke)
Aquí hemos creado un nuevo objeto, una tabla llamada smoke (el contenido de la misma lo podemos ver tipeando smokeen la consola) y luego usamos este objetivo como dato de entrada para barplot. El símbolo especial <- realiza una asignación, tomando el resultado de una línea de código y guardándolo en un objeto en tu espacio de trabajo. Esta es otra idea importante a la que regresaremos más tarde.
height y age, y calcular el rango intercuartilo para cada uno. Calcular la distribución de la frecuencia relativa para gender y exerany. ¿Cuántos hombres hay en la muestra? ¿Qué proporción de la muestra reporta estar en excelente estado de salud?El comando table puede ser utilizado para tabular cualquier número de variables que proveas. Por ejemplo, para examinar cuáles participantes han fumando por cada género podríamos usar lo siguiente
table(cdc$gender,cdc$smoke100)
Aquí vemos etiquetas de columnas de 0s y 1s. Recuerda que 1 indica que un sondeado ha fumado al menos 100 cigarrillos. Las filas se refieren al género. Para crear un gráfico de mosaico a partir de esta tabla ingresaríamos el siguiente comando
mosaicplot(table(cdc$gender,cdc$smoke100))
Podríamos haber conseguido esto en dos pasos guardando la tabla en una línea y aplicando mosaicplot en la siguiente (mira el ejemplo sobre la tabla/gráfico de barras de más arriba).
Hemos mencionado que R almacena los datos en marcos de datos, a los que puedes considerarlos como un tipo de hoja de cálculo. Cada fila es una observación diferente (un sondeado diferente) y cada columna es una variable diferente (la primera es genhlth, la segunda exerany y sucesivamente). Podemos ver el tamaño del marco de datos al lado del nombre del objeto en el espacio de trabajo o podemos tipear
dim(cdc)
lo que regresará el número de filas y columnas. Ahora, si queremos acceder a un subgrupo del marco de datos completo podemos usar una notación de fila-y-columna. Por ejemplo, para ver la sexta variable del 567º sondeado usamos el formato
cdc[567,6]
lo que significa que queremos ver el elemento de nuestro conjunto de datos que se encuentra en la 567º fila (es decir, la 567º persona u observación) y la 6º columna (en este caso, peso). Sabemos que weight es la 6º variable porque se encuentra en la 6º entrada en la lista de nombres de variables
names(cdc)
Para ver los pesos de los primeros 10 sondeados podemos tipear
cdc[1:10,6]
En esta expresión, hemos pedido sólo por las filas en el rango de 1 a 10. R usa el símbolo : para crear un rango de valores, por lo que 1:10 se expande a 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Puedes ver esto ingresando
1:10
Finalmente, si queremos todos los datos de los primeros 10 sondeados, tipeamos
cdc[1:10,]
Al dejar en blanco un índice o rango (no tipeamos nada entre la coma y el corchete) obtenemos todas las columnas. Cuando se empieza a utilizar R esto puede parecer un poco contraintuitivo. Como regla, omitimos el número de la columna para ver todas las columnas en un marco de datos. De manera similar, si dejamos en blanco un índice o rango para las filas accederíamos a todas las observaciones, no solamente la 567º fila o las filas 1 a 10. Intenta lo siguiente para ver los pesos de todos los 20.000 sondeados volando por toda tu pantalla
cdc[,6]
Recuerda que la columna 6 representa el peso de los sondeados, por lo tanto el comando de arriba reporta todos los pesos en el conjunto de datos. Un método alternativo para acceder a los datos del peso es referenciarlos por el nombre. Previamente, hemos tipeado names(cdc) para ver todas las variables contenidas en el conjunto de datos cdc. Podemos usar cualquiera de los nombres de las variables para seleccionar los elementos en nuestro conjunto de datos.
cdc$weight
El símbolo dólar $ le dice a R para buscar en el marco de datos cdc la columna llamada weight. Debido a que es un vector simple, podemos subagruparlo con un único índice encerrado en corchetes. Vemos el peso del 567º sondeado tipeando
cdc$weight[567]
De manera similar, sólo los primeros 10 sondeados
cdc$weight[1:10]
El comando de arriba regresa el mismo resultado que el comando cdc[1:10,6]. Tanto la notación fila-y-columna como la notación con el símbolo dólar se usan ampliamente. El que elijas usar depende de tu preferencia personal.
Con frecuencia es útil extraer todos los individuos (casos) en un conjunto de datos que tienen características específicas. Conseguimos esto a través de comandos condicionantes. Primero, considera expresiones como
cdc$gender == "m"
o
cdc$age > 30
Estos comandos producen una serie de valores TRUE y FALSE. Hay un valor por cada sondeado, donde TRUE indica que la persona era hombre (a través del primer comando) o mayor a 30 años (segundo comando).
Supongamos que queremos extraer sólo los datos de los hombres en la muestra, o sólo aquellos con más de 30 años. Podemos usar la función de R subset (“subagrupar”). Por ejemplo, el comando
mdata <- subset(cdc, cdc$gender == "m")
creará un nuevo conjunto de datos llamado mdata que contiene sólo los hombres del conjunto de datos cdc. Además de encontrarlo en tu espacio de trabajo con sus dimensiones, puedes visualizar las primeras filas como es habitual con
head(mdata)
Este nuevo conjunto de datos contiene todas las mismas variables pero sólo un poco menos de la mitad de las filas. Es también posible decirle a R que retenga sólo algunas variables específicas, un tópico que discutiremos en una práctica laboratorial futura. Por ahora, lo importante es que podemos excabar los datos basados en valores de una o más variables.
Como complomento, puedes usar varias de estas condiciones juntas con & y |. El símbolo & se lee “y”, de modo a que
m_and_over30 <- subset(cdc, gender == "m" & age > 30)
te dará los datos de hombres de más de 30 años. El símbolo | se lee “o”, de modo a que
m_or_over30 <- subset(cdc, gender == "m" | age > 30)
seleccionará personas que son hombres o de más de 30 años (el por qué esto sería un grupo interesante es difícil saber, pero ahora mismo lo importante es cómo funciona el subagrupamiento). En principio, puedes usar tantos “y” y “o” como quieras para formar un subgrupo.
under23_and_smoke que contenga todas las observaciones de sondeados de menos de 23 años que hayan fumado al menos 100 cigarrillos durante su vida. Escribe el comando que usaste para crear el nuevo objeto como respuesta a este ejercicio.Con nuestras herramientas de subagrupación en mano, regresaremos ahora a la tarea del día: hacer sumarios básicos del cuestionario BRFSS. Ya hemos visto datos categóricos como smoke y gender, así que centremos nuestra atención en los datos cuantitativos. Dos maneras habituales de visualizar datos cuantitativos son los gráficos de cajas (“boxplots”) y los histogramas. Podemos construir un gráfico de cajas para una variable única con el siguiente comando.
boxplot(cdc$height)
Puedes comparar las localizaciones de los componentes de la caja examinando los estadísticos de sumario.
summary(cdc$height)
Confirma que la mediana y los cuartiles superior e inferior reportados en el sumario numérico se corresponden con los del gráfico. El propósito de un gráfico de cajas es el de proveer de un esquema reducido de una variable con el fin de compararla a través de distintas categorías. Podemos, por ejemplo, comparar las alturas de hombres y mujeres con
boxplot(cdc$height ~ cdc$gender)
La notación aquí es nueva. El símbolo ~ puede leerse como versus o como función de. Así que le estamos pidiendo a R que nos provea de unos gráficos de cajas de alturas donde los grupos son definidos por el género.
A continuación consideremos una nueva variable que no se muestra directamente en este conjunto de datos: el índice de masa corporal o BMI, por sus siglas en inglés, “body mass index”(http://es.wikipedia.org/wiki/%C3%8Dndice_de_masa_corporal). El BMI corresponde a una razón del peso sobre la altura y puede se calculado como:
\[ BMI = \frac{peso~(libras)}{altura~(pulgadas)^2} * 703 \]
703 es el factor de conversión aproximado para cambiar unidades desde el sistema métrico (metros y kilogramos) al sistema imperial (pulgadas y libras).
Las siguientes dos líneas primero crean un nuevo objeto llamado bmi y luego crean gráficos de cajas para estos valores, definiendo grupos mediante la variable cdc$genhlth.
bmi <- (cdc$weight / cdc$height^2) * 703
boxplot(bmi ~ cdc$genhlth)
Nota que la primera línea de arriba es sólo un poco de aritmética, pero se aplica a todos los 20.000 números en el conjunto de datos cdc. Esto es, para cada uno de los 20.000 participantes, tomamos su peso, lo dividimos por el cuadrado de su altura y luego lo multiplicamos por 703. El resultado es 20.000 valores de BMI, uno por cada sondeado. Esta es una de las razones por las que nos gusta R: nos deja realizar cálculos como éste usando expresiones muy simples.
bmi. Lista la variable que has elegido, explica por qué crees que estaría relacionada con bmi, e indica qué es lo que el gráfico parece sugerir.Finalmente, hagamos algunos histogramas. Podemos ver el histograma para la edad de nuestros sondeados con el comando
hist(cdc$age)
Los histogramas son generalmente una buena manera de ver la forma de una única distribución, pero la forma puede cambiar dependiendo de cómo los datos son partidos entre los diferentes contenedores (“bins”). Puedes controlar el número de contenedores agregando un argumento al comando. En las siguientes 2 líneas, primero creamos un histograma por defecto de bmi y luego otro con 50 cortes (“breaks”).
hist(bmi)
hist(bmi, breaks = 50)
Nota que puedes cambiar entre los gráficos que has creados haciendo click en las flechas de ir adelante e ir atrás en la región inferior derecha de RStudio, justo por encima de los gráficos. ¿Cómo son estos dos histogramas en comparación?
Hasta este punto, hemos hecho una buena primera pasada al análisis de la información del cuestionario BRFSS. Hemos encontrado una interesante asociación entre fumar y género, y podemos decir algunas cosas acerca de la relación entre la evaluación de las personas acerca de su propio estado de salud y su índice de masa corporal. También hemos agarrado algunas herramientas de cálculo esenciales – sumario de estadísticos, subagrupación, y gráficos – que nos servirán bien a través de todo el curso.
Haz un gráfico de dispersión de peso sobre peso deseado. Describe la relación entre estas dos variables.
Consideremos una nueva variable: la diferencia entre el peso deseado (wtdesire) y el peso actual (weight). Crea esta nueva variable substrayendo las dos columnas en el conjunto de datos y asignándolas a una nueva variable llamda wdiff.
¿Qué tipo de datos es wdiff? Si una observación en wdiff es 0, ¿qué eso indica sobre el peso y el peso deseado de la persona? ¿Qué implica que wdiff sea positivo o negativo?
Describe la distribución de wdiff en términos de su centro, forma, y dispersión, incluyendo cualquier gráfico que uses. ¿Qué nos dice esto acerca de cómo las personas se sienten con respecto a su peso actual?
Usando sumarios numéricos y gráficos de caja uno al lado del otro, determina si los hombres tienden a ver su peso de manera diferente a las mujeres.
Ahora es momento de ponernos creativos. Encuentra el promedio y la desviación estándar de weight y determina cuál es la proporción de los pesos que se encuentran dentro de una desviación estándar del promedio.