Contenido
PalancaEjercicios de claves de respuestas sobre análisis de datos exploratorios
Esta página presenta dos ejercicios corregidos y detallados con código python sobre análisis exploratorio de datos.
Ejercicio 1
Considere una muestra aleatoria de finalistas del maratón de la ciudad de Nueva York en 2002. Este conjunto de datos se encuentra en el paquete UsingR. Cargue la biblioteca, luego cargue el conjunto de datos nym.2002.
biblioteca(dplyr)
datos(nombre.2002, paquete="UsandoR")
Utilice diagramas de caja e histogramas para comparar los tiempos de llegada de hombres y mujeres. ¿Cuál de los resúmenes describe mejor la diferencia?
datos(nombre.2002, paquete="UsandoR")
masculino <- nym.2002 %>% filtrar(género == 'Masculino')
femenino <- nym.2002 %>% filtrar(género == 'Femenino')
mi par(1,2)
historia(femenino$tiempo, xlim= vs(100,600))
historia(masculino$tiempo, xlim= vs(100,600))
Ambos histogramas tienen una distribución similar (sesgada a la derecha). Pero el centro del histograma parece ser diferente. Podemos verificar esto calculando la diferencia absoluta entre la media y la mediana.
abdominales(significar(masculino$tiempo) - significar(femenino$tiempo))
## [1] 23.11574
abdominales(mediana(masculino$tiempo) - mediana(femenino$tiempo))
## [1] 21.70833
Hay una diferencia de unos 21-23 minutos entre hombres y mujeres. Los machos y las hembras tienen distribuciones similares sesgadas a la derecha, con los primeros 20 minutos desplazados hacia la izquierda.
Utilice dplyr para crear dos nuevos marcos de datos: masculino y femenino, con datos para cada género. Para los hombres, ¿cuál es la correlación de Pearson entre la edad y el tiempo de finalización?
semental(masculino$edad, masculino$tiempo, mano = 'masculino')
bocina(masculino$edad, masculino$tiempo)
## [1] 0.2432273
Para las mujeres, ¿cuál es la correlación de Pearson entre la edad y el tiempo para completar?
semental(femenino$edad sexo femenino$tiempo, mano = 'femenino')
bocina(femenino$edad sexo femenino$tiempo)
## [1] 0.2443156
Si interpretamos estas correlaciones sin visualizar los datos, concluiríamos que cuanto más envejecemos, más lentos corremos maratones, independientemente del género. Examine los diagramas de dispersión y los diagramas de caja de horas estratificados por grupos de edad (20-24, 25-30, etc.). Después de ver los datos, ¿cuál es la conclusión más razonable?
grupos_m <- separar(masculino$tiempo, piso(masculino$edad/5)*5) # 10-14, 15-19, etc
grupos_f <- separar(femenino$tiempo, piso(femenino$edad/5)*5) # 10-14, 15-19, etc
mi par(1,2)
diagrama de caja(grupos_m)
diagrama de caja(grupos_f)
Esta es una pregunta complicada porque le pide que estratifique los datos en grupos. La estratificación se puede lograr a través de la función de división. Para que cada grupo tenga un rango de 5 (por ejemplo, 25-30), todos los números de edad deberán redondearse hacia arriba o hacia abajo para que los números resultantes sean divisibles por 5. Redondeé los números hacia abajo usando la función de piso .
Por lo tanto, 40 representa el rango de edad de 40 a 44 años. También puede utilizar la función de techo para estratificar los datos, que luego se redondearán. Entonces, 45 representa el grupo de edad 41-45. En el siguiente ejemplo, la edad de 42 años se clasifica utilizando las funciones de suelo y techo.
piso(42/5)*5
## [1] 40
techo(42/5)*5
## [1] 45
Los tiempos de finalización son constantes hasta los 40 años, luego nos volvemos más lentos.
Ejercicio 2
Carguemos los datos:
datos(Peso del pollito)
mi par()
semental(Peso del pollito$Tiempo, peso del pollito$peso, col=Peso del pollito$Dieta)
polluelo = remodelar(Peso del pollito, idvar=vs("Polluelo","Dieta"), vartiempo="Tiempo",
dirección="amplio")
polluelo = na.omitir(polluelo)
Concéntrese en los pesos de los pollitos el día 4 (verifique los nombres de las columnas de pollitos y anote los números). ¿Cuánto aumenta el peso promedio de los pollitos en el día 4 si agregamos un valor atípico de 3000 gramos? Específicamente, ¿cuál es el peso promedio de los pollitos del día 4, incluido el pollito atípico, dividido por el peso promedio de los pollitos del día 4 sin el atípico? Sugerencia: use c para agregar un número a un vector.
chica_w4 <- polluelo[,'peso.4']
chica_w4_añadir <- adjuntar(chica_w4, 3000)
# o use la función c
# chica_w4_add <- c(chica_w4, 3000)
chica_w4_añadir
## [1] 59 58 55 56 48 59 57 59 52 63 56 53 62
## [14] 61 55 54 62 64 61 58 62 57 58 58 59 59
## [27] 62 65 63 63 64 61 56 61 61 66 66 63 69
## [40] 61 62 66 62 64 67 3000
significar(chica_w4_añadir) - significar(chica_w4) # Diferencia entre con y sin valor atípico
## [1] 63.90966
significar(chica_w4_añadir)/significar(chica_w4) # Relación entre con y sin valor atípico
## [1] 2.062407
En la primera parte, vimos cuán sensible es la media a los valores atípicos. Ahora veamos qué sucede cuando usamos la mediana en lugar de la media. Calcula la misma razón, pero ahora usando la mediana en lugar de la media. Específicamente, ¿cuál es la mediana del peso del pollito del día 4, incluido el pollito atípico, dividido por la mediana del peso del pollito del día 4 sin el atípico?
mediana(chica_w4_añadir) - mediana(chica_w4) # diferencia
## [1] 0
mediana(chica_w4_añadir)/mediana(chica_w4) relación #
## [1] 1
Ahora intente lo mismo con el ejemplo de la desviación estándar (la función sd en R). Agregue un pollito que pese 3000 gramos a los pesos de los pollitos del día 4. ¿Cuánto cambia la desviación estándar? ¿Cuál es la desviación estándar con el pollito atípico dividido por la desviación estándar sin el pollito atípico?
Dakota del Sur(chica_w4_añadir) - Dakota del Sur(chica_w4) # diferencia
## [1] 429.1973
Dakota del Sur(chica_w4_añadir)/ Dakota del Sur(chica_w4) relación #
## [1] 101.2859
Compare el resultado anterior con la desviación absoluta mediana de R, que se calcula con la función loca. Tenga en cuenta que el loco no se ve afectado por la adición de un solo valor atípico. La función mad en R incluye el factor de escala 1,4826, por lo que mad y sd son muy similares para una muestra de una distribución normal. ¿Cuál es la MAD con el pollito atípico dividido por la MAD sin el pollito atípico?
enojado(chica_w4_añadir) - enojado(chica_w4) # diferencia
## [1] 0
enojado(chica_w4_añadir)/ enojado(chica_w4) relación #
## [1] 1
Nuestra pregunta final es sobre cómo la correlación de Pearson se ve afectada por un valor atípico de la correlación de Spearman. La correlación de Pearson entre xey viene dada en R por cor(x,y). La correlación de Spearman viene dada por cor(x,y,method=”spearman”).
Grafique los pesos de los pollitos del día 4 y del día 21. Podemos ver que hay una tendencia general, con pollitos de menor peso en el día 4 que vuelven a tener bajo peso en el día 21, y lo mismo para los pollitos de menor peso criados.
Calcule la correlación de Pearson de los pesos de los pollitos del día 4 y el día 21. Ahora calcule cuánto cambia la correlación de Pearson si agregamos un pollito que pesa 3000 el día 4 y 3000 el día 21. Nuevamente divida la correlación de Pearson con el valor atípico del pollito en la correlación de Pearson calculada sin los valores atípicos.
chica_w21 <- polluelo[, 'peso.21']
chica_w21
## [1] 205 215 202 157 223 157 305 98 124 175 205 96 266 142 157 117
## [17] 331 167 175 74 265 251 192 233 309 150 256 305 147 341 373 220
## [33] 178 290 272 321 204 281 200 196 238 205 322 237 264
semental(chica_w4, chica_w21)
bocina(chica_w4,chica_w21) Correlación # antes
## [1] 0.4159499
chica_w21_añadir <- adjuntar(chica_w21, 3000)
bocina(chica_w4_añadir, chica_w21_añadir) Correlación # después de un valor atípico
## [1] 0.9861002
bocina(chica_w4_añadir, chica_w21_añadir)/bocina(chica_w4,chica_w21) Relación # entre antes y después
## [1] 2.370719
Registre los pesos de los pollitos el día 4 de la dieta 1 como el vector x. Registre los pesos de los pollitos el día 4 de la dieta 4 como un vector y. Realice una prueba t comparando xey (en R, la función t.test(x,y) realizará la prueba). Luego realice una prueba de Wilcoxon de xey (en R, la función wilcox.test(x,y) realizará la prueba). Aparecerá una advertencia que indica que no se puede calcular un valor p exacto con enlaces, por lo que se usa una aproximación, lo cual está bien para nuestros propósitos.
Realice una prueba t de x e y, después de agregar un solo pollito de 200 gramos a x (los pollitos en la dieta 1). ¿Cuál es el valor p de esta prueba? El valor p de una prueba está disponible con el siguiente código: t.test(x,y)$p.value
X <- polluelo %>% filtrar(Dieta == 1)
X <- X[,'peso.4']
y <- polluelo %>% filtrar(Dieta == 4)
y <- y[,'peso.4']
prueba t(x, y)$p.valor Resultado de la prueba t # sin valores atípicos
## [1] 7.320259e-06
Wilcox.test(x, y)$p.valor # resultado de Wilcox sin valores atípicos
## Advertencia en wilcox.test.default(x, y): no se puede calcular el valor p exacto ## con vínculos
## [1] 0.0002011939
x_añadir <- vs(X,200) Se agregó un valor atípico de #
prueba t(x_sumar, y)$p.valor Prueba t # después de valor atípico
## [1] 0.9380347
Haz lo mismo con la prueba de Wilcoxon. La prueba de Wilcoxon es robusta frente a valores atípicos. Además, tiene menos suposiciones que la prueba t sobre la distribución de los datos subyacentes.
Wilcox.test(x_sumar, y)$p.valor # incluso con valores atípicos, el valor p no se perturba
## Advertencia en wilcox.test.default (x_add, y): no se puede calcular el valor exacto de p- ## con vínculos
## [1] 0.0009840921
Ahora estudiaremos un posible inconveniente del estadístico de prueba de Wilcoxon-Mann-Whitney. Usando el siguiente código para crear tres diagramas de caja, que muestren los pesos reales de la dieta 1 versus 4, luego dos versiones modificadas: una con una diferencia adicional de 10 gramos y otra con una diferencia adicional de 100 gramos. Use las x y las y como se define arriba, NO las que tienen el valor atípico agregado.
biblioteca(rafalib)
mi par(1,3)
diagrama de caja(x, y)
diagrama de caja(x, y+10)
diagrama de caja(x, y+100)
¿Cuál es la diferencia en el estadístico de prueba t (obtenido por t.test(x,y)$statistic) entre sumar 10 y sumar 100 a todos los valores del grupo y? Tome la estadística de la prueba t con xey + 10 y reste la estadística de la prueba t con xey +100. El valor debe ser positivo.
prueba t(x, y+10)$Estadísticas - prueba t(x, y+100)$Estadísticas
## t ## 67.75097
Examine el estadístico de prueba de Wilcoxon para x e y+10 y para x e y+100. Dado que Wilcoxon funciona en rangos, una vez que los dos grupos muestran una separación completa, es decir, todos los puntos del grupo y son mayores que todos los puntos del grupo x, la estadística no cambiará, independientemente de la magnitud de la diferencia. De manera similar, el valor de p tiene un valor mínimo, independientemente de la distancia entre los grupos.
Esto significa que la prueba de Wilcoxon puede considerarse menos poderosa que la prueba t en algunos contextos. De hecho, para muestras pequeñas, el valor de p no puede ser muy pequeño, incluso cuando la diferencia es muy grande. ¿Cuál es el valor de p si comparamos c(1,2,3) con c(4,5,6) usando una prueba de Wilcoxon?
Wilcox.test(x, y+10)$p.valor
## Advertencia en wilcox.test.default (x, y + 10): no se puede calcular el valor exacto de p- ## con vínculos
## [1] 5.032073e-05
Wilcox.test(x, y+100)$p.valor
## Advertencia en wilcox.test.default (x, y + 100): no se puede calcular el valor exacto de p- ## con vínculos
## [1] 5.032073e-05
Wilcox.test(vs(1,2,3),vs(4,5,6))$p.valor # Respuesta
## [1] 0.1
¿Cuál es el valor de p si comparamos c(1,2,3) con c(400 500 600) usando una prueba de Wilcoxon?
Wilcox.test(vs(1,2,3),vs(400,500,600))$p.valor
## [1] 0.1