Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Andrés Del Río 31/08/2020 Clase 3: Análisis de datos exploratorios El Análisis de Datos Exploratorios (EDA) es una parte clave de lo que hacemos cuando analizamos datos. Comenzamos cada análisis con EDA para familiarizarnos con los datos. En primer lugar, queremos comprobar si algunas de las muestras o experimentos producen datos inutilizables y sacarlos del análisis. También realizamos EDA al final para comprobar si hay resultados sin sentido. De hecho, uno debe realizar EDA durante todo el análisis. Por ejemplo, antes de aplicar cualquiera de las técnicas que hemos aprendido, queremos asegurarnos de que los datos están de acuerdo con los supuestos necesarios. Presentaremos algunas herramientas EDA básicas como histograma, la gráfica Q-Q, gráficas de dispersión, diagramas de caja, estratificación, entre otras. Histograma Introducción "El mayor valor de una imagen es cuando nos obliga a darnos cuenta de lo que nunca esperábamos ver." -John W. Tukey Los sesgos, los errores sistemáticos y la variabilidad inesperada son comunes en los datos genómicos. El no descubrir estos problemas a menudo conduce a análisis defectuosos y descubrimientos falsos. Por ejemplo, tenga en cuenta que los experimentos a veces fallan y no todas las canalizaciones de procesamiento de datos están diseñadas para detectarlos. Sin embargo, estas canalizaciones todavía le dan una respuesta y el de los resultados finales puede ser difícil o imposible notar un error se hizo. Histogramas Podemos pensar en cualquier conjunto de datos dado como una lista de números. Supongamos que ha medido las alturas de todos los hombres en una población. Imagina que tienes que describir estos números a alguien que no tiene idea de cuáles son estas alturas, digamos un extraterrestre que nunca ha visitado la tierra. library(UsingR) x=father.son$fheight head(father.son) ## fheight sheight ## 1 65.04851 59.77827 ## 2 63.25094 63.21404 ## 3 64.95532 63.34242 ## 4 65.75250 62.79238 ## 5 61.13723 64.28113 ## 6 63.02254 64.24221 Un enfoque es simplemente enumerar todos los números para que el extraterrestre los vea. Aquí hay 20 alturas seleccionadas al azar de 1.078. Andrés Del Río 31/08/2020 round(sample(x,20),1) ## [1] 70.5 70.9 69.8 67.2 66.0 69.8 65.9 68.5 68.3 69.2 65.8 68.1 66 .6 66.3 ## [15] 69.1 64.5 69.2 62.9 68.3 68.4 A partir del escaneo a través de estos números comenzamos a tener una idea aproximada de cómo se ve toda la lista, pero sin duda es ineficiente. Podemos mejorar rápidamente este enfoque creando bins, por ejemplo, redondeando cada valor a su entero más cercano e informando del número de individuos en cada bin. Una gráfica de estas alturas se llama histograma hist(x,breaks=seq(floor(min(x)),ceiling(max(x))),main="",xlab="Height" ) Mostrar esta trama al alienígena es mucho más informativo que mostrar los números. Tenga en cuenta que con esta gráfica simple podemos aproximar el número de individuos en cualquier intervalo dado. Por ejemplo, hay alrededor de 70 individuos de más de seis pies (72 pulgadas) de altura. xs<-seq(floor(min(x)),ceiling(max(x)),0.1) plot(xs,ecdf(x)(xs),type="l",xlab="x=Height",ylab="F(x)") Andrés Del Río 31/08/2020 Ejercicios de histograma Ejercicios de histograma #1 Dado el histograma anterior, ¿cuántas personas tienen entre 35 y 45 años? Andrés Del Río 31/08/2020 #sum(age>=35 & age<45) A:6 Aproximación normal Si en lugar de los números totales reportamos las proporciones, entonces el histograma es una distribución de probabilidad. La distribución de probabilidad que vemos arriba se aproxima a una que es muy común en una naturaleza: la curva de campana o distribución normal o distribución gaussiana. Cuando el histograma de una lista de números se aproxima a la distribución normal podemos utilizar una fórmula matemática conveniente para aproximar la proporción de individuos en cualquier intervalo dado Pr(a<x<b)=∫ba12πσ2−−−−√exp(−(x−μ)22σ2)dxPr(a<x<b)=∫ab12πσ2exp(−(x−μ )22σ2)dx En este caso, σ y μ se denominan como media y desviación estándar. Si esta aproximación se mantiene para nuestra lista, entonces la media de la población y la varianza de nuestra lista se pueden utilizar en la fórmula anterior. Para ver esto con un ejemplo recuerde que arriba señalamos que 70 individuos o 6% de nuestra población eran más altos que 6 pies. La aproximación normal funciona bien: 1-pnorm(72,mean(x),sd(x)) ## [1] 0.05806108 Una característica muy útil de esta aproximación es que sólo se necesita saber μ y σ para describir toda la distribución. Todo lo que realmente tenemos que decirle a nuestro amigo alienígena es que las alturas siguen una distribución normal con una altura media de 68''y una desviación estándar de 3''. A partir de esto podemos calcular la proporción de individuos en cualquier intervalo. Gráficas cuantitativas cuantitativas (gráficos Q-Q) Para corroborar que una distribución teórica, por ejemplo la distribución normal, es de hecho una buena aproximación, podemos utilizar parcelas cuantitativas-cuantitativas (qq- plots). Los cuantiles se entienden mejor considerando el caso especial de los percentiles. El percentil p-ésimo de una lista de una distribución se define como el número q que es mayor que p% de números (por lo que la inversa de la función de distribución acumulativa que definimos anteriormente). Por ejemplo, la mediana del percentil 50 es la mediana. Podemos calcular los percentiles para nuestra lista de alturas: library(rafalib) data(father.son,package="UsingR") x <- father.son$fheight Primer ejemplo de qqplot. Andrés Del Río 31/08/2020 qqnorm(x) qqline(x) Segundo ejemplo de qqplot. Aquí utilizamos la función qqnorm que calcula los cuantiles normales teóricos automáticamente. Sin embargo, la función qqnorm se traza con una distribución normal estándar. Esta es la razón por la que la línea tiene la pendiente popsd(x) e interceptar media(x). En el ejemplo anterior, los puntos coinciden muy bien con la línea. De hecho, podemos ejecutar simulaciones de Monte Carlo para ver parcelas como esta para los datos que se sabe que se distribuyen normalmente. n <-1000 x <- rnorm(n) qqnorm(x) qqline(x) Andrés Del Río 31/08/2020 Ejemplo de la función qqnorm. Aquí lo aplicamos a los números generados para seguir una distribución normal. También podemos tener una idea de cómo se verán los datos distribuidos no normalmente en una gráfica qq. Aquí generamos datos de la distribución t con diferentes grados de libertad. Observe que cuanto más pequeños son los grados de libertad, más gordos son las colas. Llamamos a estas "colas gordas" porque si trazamos una densidad empírica o histograma, la densidad en los extremos sería mayor que la curva teórica. En la gráfica qq, esto se puede ver en que la curva es más baja que la línea de identidad en el lado izquierdo y más alto en el lado derecho. Esto significa que hay más valores extremos de lo predicho por la densidad teórica trazada en el eje X. dfs <- c(3,6,12,30) mypar(2,2) for(df in dfs){ x <- rt(1000,df) qqnorm(x,xlab="t quantiles",main=paste0("d.f=",df),ylim=c(-6,6)) qqline(x) } Andrés Del Río 31/08/2020 Generamos datos distribuidos en t durante cuatro grados de libertad y hacemos qqplots contra cuantiles teóricos normales. Ejercicios de QQ-plot Descargue este archivo RData en su directorio de trabajo: link. A continuación, cargue los datos en R con el siguiente comando: load("skew.RData") #Debe tener una matriz dimensional de 1000 x 9 'dat' dim(dat) ## [1] 1000 9 str(dat) ## num [1:1000, 1:9] -0.626 0.184 -0.836 1.595 0.33 ... names(dat) ## NULL Andrés Del Río 31/08/2020 Usando gráficas QQ, compare la distribución de cada columna de la matriz con una normal. Es decir, utilice qqnorm() en cada columna. Para lograr esto rápidamente, puede utilizar la siguiente línea de código para configurar unacuadrícula para trazados de 3x3 a 9. ("mfrow" significa que queremos una cuadrícula multifigura llenada de fila por fila. Otra opción es mfcol.) par(mfrow = c(3,3)) #A continuación, puede utilizar un for loop, para recorrer las columnas y mostrar una gráfica qqnor m() a la vez. for (i in 1:9) { x <- dat[,i] qqnorm(x,xlab="quantiles",main=paste0("Col No=",i)) qqline(x) } #plotting múltiples histogramas par(mfrow = c(3,3)) #A continuación, puede utilizar un for loop, para recorrer las columnas y mostrar una gráfica qqn orm() a la vez. for (i in 1:9) { x <- dat[,i] Andrés Del Río 31/08/2020 hist(x,xlab="X",main=paste0("Col.No=",i)) } Identifique las dos columnas que están sesgadas. Examine cada una de estas dos columnas utilizando un histograma. Tenga en cuenta qué columna tiene "sesgo positivo", es decir, el histograma muestra una cola larga a la derecha (hacia valores más grandes). Tenga en cuenta qué columna tiene "sesgo negativo", es decir, una cola larga a la izquierda (hacia valores más pequeños). Tenga en cuenta que el sesgo positivo parece una curva de modelado hacia arriba en una gráfica qqnorm(), mientras que el sesgo negativo parece una curva de forma hacia abajo. Puede utilizar la siguiente línea para restablecer el gráfico para mostrarlo uno a la vez: par(mfrow-c(1,1)) Ejercicios de trazado QQ #1 ¿Qué columna tiene sesgo positivo (una cola larga a la derecha)? par(mfrow=c(1,1)) hist(dat[,4]) Andrés Del Río 31/08/2020 A: 4 Ejercicios de trazado QQ #2 ¿Qué columna tiene sesgo negativo (una larga cola a la izquierda)? hist(dat[,9]) A:9 Andrés Del Río 31/08/2020 Boxplots Los datos no siempre se distribuyen normalmente. Los ingresos son un ejemplo ampliamente citado. En estos casos, la desviación media y estándar no son necesariamente informativas, ya que no se puede inferir la distribución de solo estos dos números. Las propiedades descritas anteriormente son específicas de la normal. Por ejemplo, la distribución normal no parece ser una buena aproximación para la compensación directa para 199 CEOs de los Estados Unidos en el año 2000. data(exec.pay,package="UsingR") mypar(1,2) hist(exec.pay) qqnorm(exec.pay) qqline(exec.pay) Histograma y QQ-gráfico de pago ejecutivo. Además de las gráficas qq, un resumen práctico de los datos es calcular 3 percentiles: 25-o, 50-th (la mediana) y el 75-o. Una gráfica de caja muestra estos 3 valores junto ±con un rango de los puntos dentro de la medianade 1,5 (percentil 75 -percentil 25). Los valores fuera de este rango se muestran como puntos y a veces se denominan valores atípicos.. boxplot(exec.pay, ylab="10,000s of dollars", ylim=c(0,400)) Andrés Del Río 31/08/2020 Una simple gráfica de caja de la paga ejecutiva. Aquí mostramos sólo una gráfica de caja. Sin embargo, uno de los grandes beneficios de las gráficas de caja es que podríamos mostrar fácilmente muchas distribuciones en una parcela, a reenciéndolas, una al lado de la otra. Veremos varios ejemplos de esto a lo largo del libro. Ejercicios de Boxplot El conjunto de datos InsectSprays mide los recuentos de insectos en unidades experimentales agrícolas tratadas con diferentes insecticidas. Este conjunto de datos se incluye en R y puede examinarlo escribiendo: head(InsectSprays) ## count spray ## 1 10 A ## 2 7 A ## 3 20 A Andrés Del Río 31/08/2020 ## 4 14 A ## 5 14 A ## 6 12 A Pruebe dos formas equivalentes de dibujar diagramas de caja en R, utilizando el conjunto de datos InsectSprays. A continuación se muestra el pseudocódigo, que debe modificar para trabajar con el conjunto de datos InsectSprays. 1. Usando split: boxplot(split(values, factor)) 1. utilizando una fórmula: boxplot(values ~ factor) Ejercicios de diagrama de caja #1 ¿Qué spray parece el más eficaz (tiene la mediana más baja)? #Usando split boxplot(split(InsectSprays$count, InsectSprays$spray)) #Usando formula boxplot(InsectSprays$count ~ InsectSprays$spray) A :C Andrés Del Río 31/08/2020 Boxplot Exercises #2 Consideremos una muestra aleatoria de remates del Maratón de Nueva York en 2002. Este conjunto de datos se puede encontrar en el paquete UsingR. Cargue la biblioteca y, a continuación, cargue el conjunto de datos nym.2002. library(dplyr) data(nym.2002, package="UsingR") Utilice diagramas de caja e histogramas para comparar los tiempos de acabado de hombres y mujeres. ¿Cuál de las siguientes opciones describe mejor la diferencia? data(nym.2002, package="UsingR") str(nym.2002) ## 'data.frame': 1000 obs. of 5 variables: ## $ place : num 3592 13853 12256 10457 9686 ... ## $ gender: Factor w/ 2 levels "Female","Male": 2 1 2 1 2 2 1 2 2 2 ... ## $ age : num 52 40 31 33 33 40 30 27 42 48 ... ## $ home : Factor w/ 165 levels "","--","AB","ABE",..: 50 107 47 91 107 103 23 50 100 15 ... ## $ time : num 217 273 265 256 252 ... head(nym.2002) ## place gender age home time ## 3475 3592 Male 52 GBR 217.4833 ## 13594 13853 Female 40 NY 272.5500 ## 12012 12256 Male 31 FRA 265.2833 ## 10236 10457 Female 33 MI 256.1500 ## 9476 9686 Male 33 NY 252.2500 ## 1720 1784 Male 40 NJ 201.9667 library(dplyr) males<-filter(nym.2002, gender=="Male") females<-filter(nym.2002, gender=="Female") library(rafalib) mypar(1,3) boxplot(females$time, males$time) hist(females$time,xlim=c(range( nym.2002$time))) hist(males$time,xlim=c(range( nym.2002$time))) Andrés Del Río 31/08/2020 A:Male and females have similar right skewed distributions with the former, 20 minutes shifted to the left. Scatterplots y Correlación Los métodos descritos anteriormente se relacionan con variables univariadas. En las ciencias biomédicas, es común estar interesado en la relación entre dos o más variables. Un ejemplo clásico son los datos de altura padre/hijo utilizados por Francis Galton para entender la herencia. Si tuviéramos que resumir estos datos, podríamos usar los dos promedios y dos desviaciones estándar ya que ambas distribuciones están bien aproximadadas por la distribución normal. Este resumen, sin embargo, no describe una característica importante de los datos. data(father.son,package="UsingR") x=father.son$fheight y=father.son$sheight plot(x,y,xlab="Father's height in inches",ylab="Son's height in inches ",main=paste("correlation =",signif(cor(x,y),2))) https://en.wikipedia.org/wiki/Francis_Galton Andrés Del Río 31/08/2020 Alturas de las parejas de padre e hijo conspiraron entre sí. La parcela de dispersión muestra una tendencia general: cuanto más alto es el padre, más alto es el hijo. Un resumen de esta tendencia es el coeficiente de correlación, que en estos casos es 0.5. Motivaremos esta estadística tratando de predecir la altura del hijo usando la altura del padre. Estratificación Supongamos que se nos pide que adivinemos la altura de los hijos seleccionados al azar. La altura promedio, 68,7 pulgadas, es el valor con la proporción más alta (ver histograma) y sería nuestra predicción. Pero, ¿y si nos dicen que el padre mide 72 pulgadas de alto, sí que adivinamos 68.7? El padre es más alto que el promedio. Específicamente, es 1.75 desviaciones estándar más altas que el padre promedio. Entonces, ¿debemos predecir que el hijo es también 1.75 desviaciones estándar más altas? Resulta que esto sería una sobreestimación. Para ver esto, miramos a todos los hijos con padres que son de unos 72 pulgadas. Hacemos esto estratificando las alturas del padre. groups <- split(y,round(x)) boxplot(groups) Andrés Del Río 31/08/2020 Caja de alturas de hijo estratificadas por las alturas del padre. print(mean(y[ round(x) == 72])) ## [1] 70.67719 La estratificación seguida de diagramas de caja nos permite ver la distribución de cada grupo. La altura promediode los hijos con padres de 72 pulgadas de alto es de 70,7 pulgadas. También vemos que las medianas de los estratos parecen seguir una línea recta (recuerde que la línea media en la gráfica de caja muestra la mediana, no la media). Esta línea es similar a la línea de regresión,con una pendiente que está relacionada con la correlación, como aprenderemos a continuación. Correlación de Spearman Al igual que la desviación media y estándar no son buenos resúmenes cuando los datos no son bien aproximados por la distribución normal, la correlación no es un buen resumen cuando los pares de listas no son aproximados por la distribución normal bivariada. Los ejemplos incluyen casos en los que la variable está relacionada con otra mediante una función parabólica. Otro ejemplo más común es causado por valores atípicos o valores extremos. a=rnorm(100);a[1]=10 b=rnorm(100);b[1]=11 plot(a,b,main=paste("correlation =",signif(cor(a,b),2))) cor(x, method= #c(‘pearon’,’spearman’), hay varias mas… Andrés Del Río 31/08/2020 En el ejemplo anterior los datos no están asociados, pero para un par ambos valores son muy grandes. La correlación aquí es de aproximadamente 0.5. Esto es impulsado por sólo ese punto como sacarlo reduce a la correlación a aproximadamente 0. Un resumen alternativo para los casos con valores atípicos o valores extremos es la correlación de Spearman que se basa en rangos en lugar de los propios valores. Ejercicios de diagrama de dispersión Consideremos una muestra aleatoria de remates del Maratón de Nueva York en 2002. Este conjunto de datos se puede encontrar en el paquete UsingR. Cargue la biblioteca y, a continuación, cargue el conjunto de datos nym.2002. Aquí usaremos las gráficas que hemos aprendido para explorar un conjunto de datos: algunas estadísticas sobre una muestra aleatoria de corredores del Maraton de la ciudad de Nueva York en 2002. Este conjunto de datos se puede encontrar en el paquete UsingR (utilizado en la evaluación anterior). Cargue la biblioteca y, a continuación, cargue el conjunto de datos nym.2002 con la siguiente línea: data(nym.2002, package="UsingR") head(nym.2002) ## place gender age home time ## 3475 3592 Male 52 GBR 217.4833 ## 13594 13853 Female 40 NY 272.5500 ## 12012 12256 Male 31 FRA 265.2833 ## 10236 10457 Female 33 MI 256.1500 ## 9476 9686 Male 33 NY 252.2500 ## 1720 1784 Male 40 NJ 201.9667 Ejercicios de trazado de dispersión #1 Andrés Del Río 31/08/2020 Utilice dplyr para crear dos nuevos marcos de datos: machos y mujeres, con los datos de cada género. Para los hombres, ¿cuál es la correlación de Pearson entre la edad y el tiempo para terminar? library(dplyr) males <- filter(nym.2002, gender=="Male") females <- filter(nym.2002, gender=="Female") cor(males$age,males$time) ## [1] 0.2432273 Un: Ejercicios de trazado de dispersión #2 Para las mujeres, ¿cuál es la correlación de Pearson entre la edad y el tiempo para terminar? cor(females$age,females$time) ## [1] 0.2443156 A:0.2443156 Ejercicios de trazado de dispersión #3 Si interpretamos estas correlaciones sin visualizar los datos, llegaríamos a la conclusión de que cuanto más viejos seamos, más lentos corremos maratones, independientemente del género. Mira las gráficas de dispersión y las gráficas de cajas de los tiempos estratificados por grupos de edad (20-25, 25-30, etc.). Después de examinar los datos, ¿qué es una conclusión más razonable? library(rafalib) mypar(2,2) plot(females$age, females$time) plot(males$age, males$time) group <- floor(females$age/5) * 5 boxplot(females$time~group) group <- floor(males$age/5) * 5 boxplot(males$time~group) Andrés Del Río 31/08/2020 R: Los tiempos de finalización son constantes hasta algún momento entre 50-60, luego nos ponemos más lentos.
Compartir