Capítulo 2. Laboratorio 2: Estadística descriptiva.

2.1 Objetivos generales

  1. Calcular medidas de tendencia central mediante software.
  2. Calcular medidad de variación utilizando software.
  3. Haga algunas preguntas a un conjunto de datos utilizando estadísticas descriptivas.

2.2 R

Descripciones básicas en R

En clase y en el libro vimos que trabajar con datos implica manejar muchísimos números, tantos que resulta difícil analizarlos uno por uno. Para simplificar, usamos estadística descriptiva, que nos permite resumir toda esa información en uno o dos valores representativos. Así podemos entender mejor el comportamiento general de los datos sin perdernos en los detalles. En R, hay varias funciones básicas que nos ayudan a calcular estas medidas. La idea es repasar esas funciones y luego aplicarlas para responder preguntas con datos reales.

2.2.1.1 Hacer números en R

Para realizar estadística descriptiva de debemos introducir números en una variable de la siguiente manera:

• Usamos c() para combinar valores.
• Usamos seq() para crear secuencias.
• Usamos rep() para repetir valores.

Ejemplo:

one_to_one_hundred <- seq(1,100,1)

Se pueden ir repitiendo cosas usando rep.

rep(10,5)
## [1] 10 10 10 10 10
rep(1,25)
##  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
all_together_now <- c(rep(10,5),rep(1,2))

2.2.1.1 Suma

one_to_one_hundred <- seq(1,100,1)
sum(one_to_one_hundred)
## [1] 5050

2.2.1.3 Longitud

Si tenemos un conjunto de 100 números guardados en la variable one_to_one_hundred, podemos contar cuántos elementos contiene con la función length().

one_to_one_hundred <- seq(1,100,1)
length(one_to_one_hundred)
## [1] 100

##2.2.2 Medidas de Tendencia Central

Media

La media de un conjunto de números se obtiene al dividr la suma total de valores entre la cantidad de números.

En R se puede calcular manualmente:

one_to_one_hundred <- seq(1,100,1)
sum(one_to_one_hundred) / length(one_to_one_hundred)
## [1] 50.5

Usando Mean sería de la siguiente manera:

mean(one_to_one_hundred)
## [1] 50.5

#2.2.2.2 Mediana La mediana es el número que se encuentra en el centro exacto de los números de menos a mayor.

Cuando hay un número par de números (ningún número en el centro), tomamos el número intermedio (0,5).

median(c(1,2,3))
## [1] 2

2.2.3 Moda

Es el número o dato qué más se repite en un conjunto de datos.

Como R no tiene una dunción base para calcularla. Es necesario escribir una por nuestra cuenta o, en este caso, sacarla de internet.

Ejemplo:

my_mode <- function(x) {
  ux <- unique(x)
  ux[which.max(tabulate(match(x, ux)))]
}

my_mode(c(1,1,1,1,1,1,1,2,3,4))
## [1] 1

Variación

Entrando a ver medidas de dispersión, cuando queremos saber qué tan variables son los números es que usamos el rango, la varianza, la desviación estándar, etc.

La variación nos indica qué tan diferentes son los números dentro de un conjunto de datos.

Tomando una muestra de 100 números aleatorios de una distribución normal con media = 10 y desviación estándar = 5. Esto nos permite visualizar cómo se dispersan los datos alrededor de la media.

sample_numbers <- rnorm(100,10,5)
hist(sample_numbers)

#2.2.3.1 Rango

Son aquellos valores mínimo y máximo del conjunto, utilizamos la función range.

range(sample_numbers)
## [1] -0.6571013 23.9100803

#2.2.3.2 var = varianza

También podemos hallar la varianza muestral utlizando var. Nota: se divide entre (n-1)

var(sample_numbers)
## [1] 23.7009

sd = Desviación estándar

Calculamos la desviación estándar de la muestra. Nota: Se divide entre (n-1)

sd(sample_numbers)
## [1] 4.868357

La desviación estándar es la raíz cuadrada de la varianza.

sqrt(var(sample_numbers))
## [1] 4.868357

Todos los descriptivos

Pongamos en un mismo lugar todos los descriptivos y otras funciones.

sample_numbers <- rnorm(100,10,5)

sum(sample_numbers)
## [1] 981.976
length(sample_numbers)
## [1] 100
mean(sample_numbers)
## [1] 9.81976
median(sample_numbers)
## [1] 10.18024
my_mode(sample_numbers)
## [1] 10.48366
range(sample_numbers)
## [1] -2.911156 22.527952
var(sample_numbers)
## [1] 27.96219
sd(sample_numbers)
## [1] 5.287928

2.2.4 Descriptivo por condiciones

Creamos un marco de fechas con 10 números en cada condición. Hay 10 condiciones, cada una etiquetada como A, B, C, D, E, F, G, H, I, J En otras palabras, se crean 10 grupos, cada grupo es una “condición”, y ese grupo es cada letra, o sea, A es un grupo/condición, B es otro grupo/condición y así sucesivamente hasta completar los 10 grupos. Cada grupo/condición se repite 10 veces con un score distinto cada vez. Esos son los datos que componen nuestra base.

scores <- rnorm(100,10,5)
conditions <- rep(c("A","B","C","D","E","F","G","H","I","J"), each =10)
my_df <- data.frame(conditions,scores)

Vamos a tratar de encontrar la media para cada condición, es decir, la media del score del grupo, la media del score del grupo B y así sucesivamente; pero primero de la forma lenta:

mean(my_df[my_df$conditions=="A",]$scores)
## [1] 8.737068
mean(my_df[my_df$conditions=="B",]$scores)
## [1] 10.83224
mean(my_df[my_df$conditions=="C",]$scores)
## [1] 7.416073

2.2.4.1 agrupar_por y resumir

Y así seguiría y seguiría, pero no es lo que buscamos. Vamos a hacerlo ahora de la forma eficiente usando agrupar y resumir

library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
my_df %>%
  group_by(conditions) %>%
  summarise(means = mean(scores))
## # A tibble: 10 × 2
##    conditions means
##    <chr>      <dbl>
##  1 A           8.74
##  2 B          10.8 
##  3 C           7.42
##  4 D           8.86
##  5 E          10.2 
##  6 F          10.1 
##  7 G          13.0 
##  8 H          12.0 
##  9 I          13.2 
## 10 J           8.77

Para hacerlo más estético vamos a crear una variable nueva que contenga los resultados anteriores y usaremos el comando knitr

summary_df <- my_df %>%
               group_by(conditions) %>%
               summarise(means = mean(scores))
knitr::kable(summary_df)
conditions means
A 8.737068
B 10.832237
C 7.416073
D 8.858991
E 10.165285
F 10.142674
G 13.012756
H 12.034849
I 13.186767
J 8.771618

#Descriptivos Múltiples

Siguiendo con dplyr, agregaremos más funciones para obtener resultados más completos, por ejemplo, en este caso, agregando la desviación estándar.

summary_df <- my_df %>%
               group_by(conditions) %>%
               summarise(means = mean(scores),
                         sds = sd(scores))

knitr::kable(summary_df)
conditions means sds
A 8.737068 3.536784
B 10.832237 5.574790
C 7.416073 5.595073
D 8.858991 4.670323
E 10.165285 4.159205
F 10.142674 5.871412
G 13.012756 6.317362
H 12.034849 3.975971
I 13.186767 3.047313
J 8.771618 5.970681

Además, también agregaremos el mínimo y máximo como dice el laboratorio:

summary_df <- my_df %>%
               group_by(conditions) %>%
               summarise(means = mean(scores),
                         sds = sd(scores),
                         min = min(scores),
                         max = max(scores))

knitr::kable(summary_df)
conditions means sds min max
A 8.737068 3.536784 2.4463834 15.51674
B 10.832237 5.574790 2.5832394 18.83093
C 7.416073 5.595073 -0.6015067 17.04223
D 8.858991 4.670323 -0.7449633 16.09298
E 10.165285 4.159205 5.0084679 17.81393
F 10.142674 5.871412 -3.4122152 15.58288
G 13.012756 6.317362 5.7107482 26.57300
H 12.034849 3.975971 7.2871111 19.66143
I 13.186767 3.047313 9.0613325 19.55585
J 8.771618 5.970681 -1.1122139 19.48155

#Descripción de gapminder

Ahora bien, superados estos ejercicios de práctica y saber cómo funciona, es hora de aplicarlo a un conjunto de datos como es Gapminder:

  1. Llamamos el paquete ya instalado para el laboratorio anterior.

(En este caso en la segunda línea de código estamos creando una copia del objeto ¿por qué? para mayor organización. Además, existirán casos en los que sea necesario convertir la base en data frames para que los paquetes funcionen de la mejor forma posible. Esta es una aclaración para dudas propias.)

library(gapminder)
## Warning: package 'gapminder' was built under R version 4.4.3
gapminder_df <- gapminder

#2.2.5.1 ¿Cuáles son algunos indicadores de esperanza de vida por continenete?

A continuación, usaremos los mismos comandos que anteriormente para hacer las descripciones, solo que reemplazamos los llamados a gapminder.

summary_df <- gapminder_df %>%
               group_by(continent) %>%
               summarise(means = mean(lifeExp),
                         sds = sd(lifeExp),
                         min = min(lifeExp),
                         max = max(lifeExp))

knitr::kable(summary_df)
continent means sds min max
Africa 48.86533 9.150210 23.599 76.442
Americas 64.65874 9.345088 37.579 80.653
Asia 60.06490 11.864532 28.801 82.603
Europe 71.90369 5.433178 43.585 81.757
Oceania 74.32621 3.795611 69.120 81.235

2.2.6 Ejercicio de generalización

  1. ¿Cuál es la media, la desviación estándar, la esperanza de vida mínima y máxima para todos los datos de Gapminder (en todos los años y países)? Consejo: no usargroup_by
mean(gapminder_df$lifeExp)       # media = 59.47444
## [1] 59.47444
sd(gapminder_df$lifeExp)         # desviación estándar = 12.91711 
## [1] 12.91711
min(gapminder_df$lifeExp)        # valor mínimo = 23.599
## [1] 23.599
max(gapminder_df$lifeExp)        # valor máximo = 82.603
## [1] 82.603
  1. ¿Cuál es la media, la desviación estándar, la esperanza de vida mínima y máxima para todos los continentes en 2007, el año más reciente del conjunto de datos? Sugerencia: agregue otra barra vertical usandofilter(year==2007) %>%

Para responder a esta pregunta primero filtraremos los datos como es la indicación y luego si usaremos nuevamente los comandos aprendidos.

continentes_2007 <- filter(gapminder_df, year==2007) %>%
  group_by(continent) %>%
               summarise(means = mean(lifeExp),
                         sds = sd(lifeExp),
                         min = min(lifeExp),
                         max = max(lifeExp))
knitr::kable(continentes_2007)
continent means sds min max
Africa 54.80604 9.6307807 39.613 76.442
Americas 73.60812 4.4409476 60.916 80.653
Asia 70.72848 7.9637245 43.828 82.603
Europe 77.64860 2.9798127 71.777 81.757
Oceania 80.71950 0.7290271 80.204 81.235

2.2.7 Tarea de Escritura

  1. Define la moda

La moda es el valor que aparece con mayor frecuencia en un conjunto de datos. Es decir, es el número que más veces se repite.

  1. Explique qué debería suceder para que un conjunto de números tenga dos modas.

Un conjunto de números tiene dos modas, se dice que es bimodal y es cuando existen dos valores diferentes que se repiten con la misma frecuencia y más veces que los demás.

  1. Definir la mediana

La mediana es el valor central de un conjunto de datos cuando estos están ordenados de menor a mayor. Si hay un número impar de datos, es el del centro; si hay un número par, es el promedio de los dos valores centrales.

  1. Definir la media

La media o media aritmética (promedio) es el resultado de sumar todos los valores de un conjunto y dividir esa suma entre la cantidad total de valores.

  1. Definir el rango

El rango es la diferencia que existe entre el valor mínimo y máximo de la muestra o un conjunto de datos. Por ejemplo, en un conjunto de datos que tiene las edades de cierto número de edades, la máxima podría ser 89 y la mínima 13. Por tanto el rango sería igual a la distancia existente entre ambos valores, es decir, 76. Hay que recalcar que de acuerdo con _____ esta medida no es “robusta” pues es fácilmente influenciada por los datos extremos o atípicos.

  1. Al calcular la desviación estándar, explique qué representan las puntuaciones de diferencia

Las puntuaciones de diferencia al calcular la desviación estándar indican cuánto se alejan los datos de la media. Sin embargo, no es tan sencilla la interpretación como leer valores absolutos, en cambio la desviación estándar me muestra que tan alejados están los datos pero en medida de 1 desviación estándar, o 2 desviación estándar, o 3, etc.

  1. Explique por qué las puntuaciones de diferencia se elevan al cuadrado al calcular la desviación estándar

Las puntuaciones de diferencia se elevan al cuadrado para: i) evitar valores negativos, pues técnicamente las distancias no son negativas; y ii) porque los estadísticos decidieron que al elevar al cuadrado añadían un mayor peso a la distancia, haciéndola crecer exponencialmente para los datos que más se alejan.

  1. Si un conjunto de números tuviera una desviación estándar de 5 y otro tuviera una desviación estándar de 10, ¿qué conjunto de números tendría mayor varianza? Explique por qué.

Para responder esta pregunta basta con saber que la desviación estándar es la raíz cuadrada de la varianza, por tanto, en este caso, elevamos estos valores al cuadrado y obtendremos la respuesta. 5 2 = 25 10 2 = 100 De esta forma tenemos que la mayor varianza es la segunda, 100, debido a que estos datos están más dispersos.