Estadistica Modulo I y II

Profesor: Alonso Quezada

Preparación previa

Instalar paquete UsingR desde la interfaz y summarytools (para resumir estadigrafos). Para instalar summarytools hay que instalar remotes, cargar la libreria y luego instalar de la siguiente forma (más información: https://github.com/dcomtois/summarytools):

install.packages("remotes")

library(remotes)

install_github("rapporter/pander")

library(UsingR)
library(tidyverse)
library(summarytools)
library(openxlsx)

Utilizando la base de datos (father.son) que viene en el paquete UsingR, vamos a explorar los estadigrafos claves del modulo.

# Esta base de datos (father.son) es la medición que hizo Person sobre las alturas de padres e hijos para evaluar correlaciones
bbdd_padre_hijo=father.son

#Obtener nombre de variables
names(bbdd_padre_hijo)
[1] "fheight" "sheight"

Como la medicion de altura esta en pulgadas debemos multiplicar el valor por 2,54 para transformalo en centimetros

bbdd_padre_hijo <- bbdd_padre_hijo %>% 
  mutate(padre_altura = round(fheight*2.54,1),
         hijo_altura = round(sheight*2.54,1))

Medidas de tendencia central

En la mayoría de las situaciones, lo primero que querrás calcular es una medida de tendencia central, es decir, algo sobre la “media” o el “medio o mitad” de tus datos. Las dos medidas más utilizadas son la media, la mediana y la moda. A continuación explicaré cada una de ellas y los motivos por los que son útiles.

Promedio o media

La media de un conjunto de observaciones no es más que una media normal, a la antigua usanza: se suman todos los valores y se dividen por el número total de valores.

La primera notación que debemos introducir es \(N\), que utilizaremos para referirnos al número de observaciones que estamos promediando (en este caso, \(N\) = 5). Es tradicional utilizar \(X\) para ello y utilizar subíndices para indicar de qué observación estamos hablando. Es decir, utilizaremos \(X_1\) para referirnos a la primera observación, \(X_2\) para referirnos a la segunda, y así sucesivamente hasta \(X_N\) para la última. O, para decir lo mismo de forma un poco más abstracta, utilizaremos \(X_i\) para referirnos a la i-ésima observación.

\[ {\displaystyle \overline{X}={\frac {1}{n}}{}\sum _{i=1}^{n}x_{i}={\frac {x_{1}+x_{2}+\cdots +x_{n}}{n}}} \]

Por ejemplo, si queremos calcular el promedio de altura de los padres de las primeras 5 observaciones la formula se escribiría así y se interpretaría como “la suma, tomada sobre todos los valores \(i\) de 1 a 5, del valor \(x_i\)”. Pero básicamente, lo que significa es sumar las cinco primeras observaciones”.

\[ {\displaystyle \overline{X}={\frac {1}{n}}{}\sum _{i=1}^{5}x_{i}} \]

\(\overline{X}\) para la media, \({\displaystyle \sum}\) para la idea de la suma, \(X_i\) para la observación y \(N\) para el número total de observaciones. Vamos a reutilizar estos símbolos bastante, por lo que es importante que los entiendas lo suficientemente bien como para ser capaz de “leer” las ecuaciones, y ser capaz de ver que es sólo decir “sumar un montón de cosas y luego dividir por otra cosa”.

Calcular la media en R

#Calcular promedio
bbdd_padre_hijo %>% 
  slice_head(n = 5)
   fheight  sheight padre_altura hijo_altura
1 65.04851 59.77827        165.2       151.8
2 63.25094 63.21404        160.7       160.6
3 64.95532 63.34242        165.0       160.9
4 65.75250 62.79238        167.0       159.5
5 61.13723 64.28113        155.3       163.3
bbdd_padre_hijo %>% 
  slice_head(n = 5) %>% 
  summarise(suma = sum(padre_altura),
            mean = mean(padre_altura)) %>%
  mutate(mean_manual = suma/5) 
   suma   mean mean_manual
1 813.2 162.64      162.64
#Lenguaje tidyverse
bbdd_padre_hijo %>% slice_head(n = 5) %>%
  summarise(mean = mean(padre_altura))
    mean
1 162.64
#Lenguaje R base
mean(bbdd_padre_hijo$padre_altura[1:5])
[1] 162.64

La Mediana

La segunda medida de tendencia central que se utiliza mucho es la mediana, y es incluso más fácil de describir que la media. La mediana de un conjunto de observaciones es simplemente el valor de al medio. Como antes, imaginemos que sólo nos interesan las 5 primeras observaciones: 165.2, 160.7, 165, 167, 155.3. Para obtener la mediana, ordenamos estos números en orden ascendente:

\(155.3,160.7,165,165.2,167\)

De esos datos, es obvio que el valor mediano de estas 5 observaciones es 165, ya que es el del medio en la lista ordenada. Pero, ¿qué deberíamos hacer si nos interesaran los 6 primeros datos en lugar de los 5 primeros? Las lista ordenada ahora es:

\(155.3, 160.1, 160.7,165,165.2,167\)

y hay dos números medios, 160.7 y 165. La mediana se define como la media de esos dos números, que por supuesto es \((160.7+165)/2 = 162.85\) . Como antes, es muy tedioso hacerlo a mano cuando tienes muchos números. Para ilustrarlo, esto es lo que ocurre cuando se utiliza R para ordenar los 1078 datos de altura de padres e hijos. En primer lugar, utilizaré la función sort() para mostrar los márgenes ganadores en orden numérico creciente:

Utiliza este codigo y ve lo que ocurre

sort(bbdd_padre_hijo$padre_altura)

Por supuesto, nadie calcula la mediana ordenando los datos y luego buscando el valor medio. En trabajo con datos, utilizamos el comando de la mediana:

# R base
median(bbdd_padre_hijo$padre_altura)
[1] 172.1
#Tidyverse
bbdd_padre_hijo %>% summarize(median = median(padre_altura))
  median
1  172.1

Figura 1: Ilustración de media y mediana

La media es básicamente el “centro de gravedad” del conjunto de datos: si imaginamos que el histograma de los datos es un objeto sólido, el punto sobre el que podríamos equilibrarlo (como en un balancín) es la media. En cambio, la mediana es la observación intermedia. La mitad de las observaciones son más pequeñas y la otra mitad más grandes.

Media vs mediana

  • Si sus datos son de escala nominal, probablemente no debas utilizar ni la media ni la mediana. Tanto la media como la mediana dependen de que los números asignados a los valores sean significativos. Si el esquema de numeración es arbitrario, lo mejor es utilizar la moda.

  • Si tus datos son de escala ordinal, es más probable que quiera utilizar la mediana que la media. La mediana sólo utiliza la información de orden de los datos (es decir, qué números son mayores), pero no depende de los números implicados. En cambio, la media utiliza los valores numéricos predeterminados asignados a las observaciones, por lo que no es apropiado para los datos ordinales.

  • Para los datos a escala de intervalo, cualquiera de las dos opciones es generalmente aceptable. El promedio tiene la ventaja de que utiliza toda la información contenida en los datos (lo cual es útil cuando no se dispone de muchos datos), pero es muy sensible a los valores extremos.

Media recortada

Una de las reglas fundamentales de la estadística aplicada es que los datos no son precisos. La vida real nunca es sencilla, y los conjuntos de datos que se obtienen nunca son tan directos como dice la teoría estadística.

\[-100,2,3,4,5,6,7,8,9,10\]

Si no vieras esto en un conjunto de datos de la vida real, probablemente pensarías que algo curioso está pasando con el valor -100. Es probable que se trate de un valor atípico que no encaja con los demás. Se podría considerar la posibilidad de eliminarlo por completo del conjunto de datos y, en este caso concreto, probablemente estaría de acuerdo. Pero en la vida real no siempre hay ejemplos tan claros.

\[ -15,2,3,4,5,6,7,8,9,12 \]

El -15 parece un poco sospechoso, pero no tanto como el -100. En este caso, es un poco más complicado. Puede que sea una observación legítima, puede que no.

Cuando nos enfrentamos a una situación en la que algunas de las observaciones con valores más extremos pueden no ser del todo fiables, la media no es necesariamente una buena medida de la tendencia central. Es muy sensible a uno o dos valores extremos, por lo que no se considera una medida robusta. Una solución que hemos visto es utilizar la mediana.

Una solución más general es utilizar una “media recortada”. Para calcular una media recortada, lo que hay que hacer es “descartar” los ejemplos más extremos de ambos extremos (es decir, el mayor y el menor) y, a continuación, tomar la media de todo lo demás. El objetivo es conservar las mejores características de la media y la mediana: al igual que la mediana, no se ve muy influenciada por los valores extremos, pero al igual que la media, “utiliza” más de una de las observaciones. Generalmente, describimos una media recortada en términos del porcentaje de observaciones a cada lado que se descartan. Así, por ejemplo, una media recortada al 10% descarta el 10% más grande de las observaciones y el 10% más pequeño de las observaciones, y luego toma la media del 80% restante de las observaciones. Como es lógico, la media recortada al 0% es simplemente la media normal, y la media recortada al 50% es la mediana. En este sentido, las medias recortadas proporcionan toda una familia de medidas de tendencia central que abarcan desde la media hasta la mediana.

Para nuestro ejemplo de juguete anterior, tenemos 10 observaciones, por lo que la media recortada del 10% se calcula ignorando el valor mayor (es decir, 12) y el valor menor (es decir, -15) y tomando la media de los valores restantes. En primer lugar, introduzcamos los datos

dataset <- c(-15,2,3,4,5,6,7,8,9,12)
#Calculemos la media y mediana
mean(x=dataset)
[1] 4.1
median(x=dataset)
[1] 5.5

Es una diferencia bastante importante, pero estoy tentado de pensar que la media está demasiado influenciada por los valores extremos de ambos extremos del conjunto de datos, especialmente el -15. Así que vamos a intentar recortar un poco la media. Si tomo una media recortada al 10%, eliminaremos los valores extremos de ambos lados y tomaremos la media del resto:

mean(x=dataset, trim = 0.1)
[1] 5.5

En este caso da exactamente la misma respuesta que la mediana. Tenga en cuenta que, para obtener una media recortada al 10%, escriba trim = .1, no trim = 10.

mean(x=bbdd_padre_hijo$padre_altura)
[1] 171.9252
mean(x=bbdd_padre_hijo$padre_altura, trim = 0.05)
[1] 171.9771

La moda

La moda de una muestra es muy sencilla: es el valor que aparece con mayor frecuencia. Para ilustrar la moda utilizando los datos de nombres de bebes de la base babynames.

babynames <- readr::read_csv('https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2022/2022-03-22/babynames.csv')
Rows: 1924665 Columns: 5
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (2): sex, name
dbl (3): year, n, prop

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
names(babynames)
[1] "year" "sex"  "name" "n"    "prop"

Utiliza este codigo y ve lo que ocurre

table(babynames$name)

Como puedes observar, hacer una tabla es poco eficiente para tantas observaciones y los paquetes básicos de R no tienen una función para calcular la moda, pero podemos utilizar una suma de frecuencias y ordenarla de mayor a menor, para saber el dato que mas se repite. La moda de los nombres de hombres es James y de mujeres Mary.

babynames %>% 
  group_by(name, sex) %>% 
  summarize(n = sum(n)) %>% 
  arrange(-n)
`summarise()` has grouped output by 'name'. You can override using the
`.groups` argument.
# A tibble: 107,973 × 3
# Groups:   name [97,310]
   name    sex         n
   <chr>   <chr>   <dbl>
 1 James   M     5150472
 2 John    M     5115466
 3 Robert  M     4814815
 4 Michael M     4350824
 5 Mary    F     4123200
 6 William M     4102604
 7 David   M     3611329
 8 Joseph  M     2603445
 9 Richard M     2563082
10 Charles M     2386048
# ℹ 107,963 more rows

Rango Interquartil (IQR)

El rango intercuartílico (IQR) es como el rango, pero en lugar de calcular la diferencia entre el valor más grande y el más pequeño, calcula la diferencia entre el cuantil 25 y el cuantil 75. Probablemente ya sepa lo que es un cuantil (se les llama más comúnmente percentiles), pero si no es así: el percentil 10 de un conjunto de datos es el número \(x\) más pequeño tal que el 10% de los datos es menor que \(x\). De hecho, ya nos hemos encontrado con la idea: ¡la mediana de un conjunto de datos es su cuantil / percentil 50! De hecho, R ofrece una forma de calcular cuantiles mediante la función quantile(). Prueba cambiando el numero de probs =

quantile(x=bbdd_padre_hijo$padre_altura, probs = .5)
  50% 
172.1 
quantile(x=bbdd_padre_hijo$padre_altura, probs = c(.25, .75))
  25%   75% 
167.1 176.8 

Por lo tanto, \(176.8-167.1 = 9.7\) es el rango intercuartilico (IQR). Si bien es obvio cómo interpretar el rango (mayor valor - menor valor), es un poco menos obvio cómo interpretar el IQR. La forma más sencilla de entenderlo es la siguiente: el rango intercuartílico es el rango que abarca la mitad de los datos. Es decir, una cuarta parte de los datos está por debajo del percentil 25 y otra cuarta parte está por encima del percentil 75, por lo que la “mitad intermedia” de los datos se encuentra entre ambos. Y el IQR es el intervalo cubierto por esa mitad media.

Varianza

Desde una perspectiva puramente matemática, hay algunas razones de peso para preferir las desviaciones al cuadrado que las desviaciones absolutas, Si hacemos esto, obtenemos una medida llamada varianza. La varianza de un conjunto de datos \(X\) se escribe a veces como \(Var(X)\), pero se denomina más comúnmente \(s^2\) (la razón de esto se aclarará en breve). La fórmula que utilizamos para calcular la varianza de un conjunto de observaciones es la siguiente:

\[ Var{(X)}={\frac{{\displaystyle \sum_{i=1}^{N}\left(x_{i}-\overline{X}\right)^{2}}}{N}} \]

Como podemos observar, la varianza es una medida de desviaciones respecto a la media, pero al cuadrado.

#Recordemos el promedio
mean(bbdd_padre_hijo$padre_altura)
[1] 171.9252
# La varianza de la primera observación es el dato de altura del padre - la media de altura de los padres

165.2-171.9
[1] -6.7
(-6.7)^2
[1] 44.89
#Calculamos la varianza la variable altura del padre de dos formas y dan resultados distintos
mean((bbdd_padre_hijo$padre_altura-mean(bbdd_padre_hijo$padre_altura))^2)
[1] 48.56851
var(bbdd_padre_hijo$padre_altura)
[1] 48.61361

Para hacernos una idea de lo que ocurre, dejemos de utilizar el pequeño conjunto de datos que contiene sólo 5 observaciones.En primer lugar, vamos a calcular la varianza utilizando la fórmula que he descrito anteriormente:

Lo que R está haciendo es evaluar una fórmula ligeramente diferente a la que le mostré anteriormente. En lugar de promediar las desviaciones al cuadrado, lo que requiere dividir por el número de puntos de datos \(N\), R ha optado por dividir por \(N-1\). En otras palabras, la fórmula que R está utilizando es la siguiente:

\[ Var{(X)}={\frac{{\displaystyle \sum_{i=1}^{N}\left(x_{i}-\overline{X}\right)^{2}}}{N-1}} \]

#El mismo resultado cuando se resta el N-1 (de 1078 a 1077)
sum((bbdd_padre_hijo$padre_altura-mean(bbdd_padre_hijo$padre_altura))^2)/1077
[1] 48.61361
var(bbdd_padre_hijo$padre_altura)
[1] 48.61361

Esta es la misma respuesta que R nos dio originalmente cuando calculamos \(var(X)\) originalmente. La verdadera pregunta es por qué R divide por \(N-1\) y no por \(N\). Después de todo, se supone que la varianza es la desviación media al cuadrado, ¿no? ¿No deberíamos dividir por N, el número real de observaciones de la muestra? Pues sí. Sin embargo, existe una sutil distinción entre “describir una muestra” y “hacer conjeturas sobre la población de la que procede la muestra”. Tanto si se trata de describir una muestra como de hacer conjeturas sobre la población, la media se calcula exactamente igual. No ocurre lo mismo con la varianza, la desviación típica o muchas otras medidas. Lo que le he explicado al principio (es decir, tomar la media real y dividirla por N) supone que pretende calcular literalmente la varianza de la muestra. Sin embargo, la mayoría de las veces, la muestra en sí no le interesa demasiado. Más bien, la muestra existe para decirle algo sobre el mundo. Si es así, está empezando a alejarse del cálculo de un “estadístico muestral” y a acercarse a la idea de estimar un “parámetro de población”.

¿Cómo se interpreta la varianza? Al fin y al cabo, las estadísticas descriptivas sirven para describir cosas, y ahora mismo la varianza no es más que un número sin sentido. Por desgracia, la razón por la que no te he dado la interpretación humana de la varianza es porque realmente no existe. Éste es el problema más grave de la varianza. Aunque tiene algunas propiedades matemáticas elegantes que sugieren que realmente es una cantidad fundamental para expresar la variación, es completamente inútil si quieres comunicarte con un ser humano real… ¡las varianzas son completamente ininterpretables en términos de la variable original! Todos los números se han elevado al cuadrado y ya no significan nada.

Desviación estandar

Vale, supongamos que te gusta la idea de utilizar la varianza por esas bonitas propiedades matemáticas de las que no he hablado, pero ya que eres un humano y no un robot te gustaría tener una medida que se exprese en las mismas unidades que los propios datos (es decir, altura, no altura al cuadrado). ¿Qué hay que hacer? La solución al problema es obvia: tomar la raíz cuadrada de la varianza, conocida como desviación estándar, también llamada “desviación cuadrática media” o RMSD. Esto resuelve el problema con bastante claridad. Si la varianza de la altura de los padres era “48.6 centimetros al cuadrado” es mucho más facil entender “una desviación estandar de 6.9 centimetros”, ya que se expresa en la misma unidad de medida original.

Es tradicional referirse a la desviación típica o estandar de una muestra de datos como \(s\), aunque a veces también se utilizan \(sd\) y \(stddev\). Porque la desviación típica es igual a la raíz cuadrada de la varianza, probablemente no te sorprenderá ver que la fórmula es:

\[ s=\sqrt{\frac{{\displaystyle \sum_{i=1}^{N}\left(x_{i}-\overline{X}\right)^{2}}}{N}} \]

y la función de R que utilizamos para calcularla es \(sd()\). Sin embargo, como ya habrá adivinado por nuestro análisis de la varianza, lo que R calcula en realidad es ligeramente distinto de la fórmula anterior. Al igual que vimos con la varianza, lo que R calcula es una versión que divide por \(N-1\) en lugar de por \(N\) y la fórmula para esto es:

\[ \hat{s}=\sqrt{\frac{{\displaystyle \sum_{i=1}^{N}\left(x_{i}-\overline{X}\right)^{2}}}{N-1}} \]

sd(bbdd_padre_hijo$padre_altura)
[1] 6.972346

La interpretación de las desviaciones típicas es algo más compleja. Como la desviación típica se obtiene a partir de la varianza, y la varianza es una cantidad que tiene poco o ningún significado que tenga sentido para nosotros, los humanos, la desviación típica no tiene una interpretación sencilla. En consecuencia, la mayoría de nosotros nos basamos en una simple regla empírica: en general, cabe esperar que el 68% de los datos se sitúen dentro de 1 desviación típica de la media, el 95% de los datos dentro de 2 desviaciones típicas de la media y el 99,7% de los datos dentro de 3 desviaciones típicas de la media. Esta regla suele funcionar bastante bien la mayoría de las veces, pero no es exacta: en realidad se calcula basándose en la suposición de que el histograma es simétrico y tiene forma de campana. Como se puede ver en el histograma de la altura de los padres, no es perfectamente simetrico pero si se acerca mucho.

mean(bbdd_padre_hijo$padre_altura)
[1] 171.9252
#178.87 mean+sd
171.9+6.97
[1] 178.87
#164.93 mean-sd
171.9-6.97
[1] 164.93
bbdd_padre_hijo <- bbdd_padre_hijo %>% 
  mutate(grupo = case_when(padre_altura<=180 & padre_altura>=164.93 ~ "A", 
                           .default = "B"))  

bbdd_padre_hijo %>% 
  count(grupo)
  grupo   n
1     A 767
2     B 311
#71,1% de los datos estan a una sd de la media
767/1078
[1] 0.7115028
ggplot(bbdd_padre_hijo, aes(x=padre_altura, fill = grupo)) +
  geom_histogram(bins = 12, col = "white") +
  scale_fill_manual(values = c("A"= "#CD7F32","B" = "#C0C0C0"),
                    labels = c("1 sd", "más de 1 sd"))

Asimetria o Skewness

Las medidas de asimetría sirven para tener una idea acerca de la forma de una distribución de frecuencias con sólo un número.

La asimetria o skewness es una medida de asimetria de la distribución de los datos. Si el sesgo es igual a cero, la distribución es simétrica; si el sesgo es positivo la distribución tendrá una cola asimétrica extendida hacia los valores positivos. Un sesgo negativo indica una distribución con una cola asimétrica extendida hacia los valores negativos

Si bien no hay un comando para calcular la asimetria de las distribuciones, existen multiples paquetes que si tienen un avanico de calculos (como moments). No obstante, con el paquete de resumen de datos que instalamos podemos obtener todas las medidas rapidamente. La asimetria es de -0.09 por lo tanto, la distribución esta sesgada muy levemente hacía los valores negativos como en el ejemplo a).

descr(bbdd_padre_hijo)
Non-numerical variable(s) ignored: grupo
Descriptive Statistics  
bbdd_padre_hijo  
N: 1078  

                    fheight   hijo_altura   padre_altura   sheight
----------------- --------- ------------- -------------- ---------
             Mean     67.69        174.46         171.93     68.68
          Std.Dev      2.74          7.15           6.97      2.81
              Min     59.01        148.60         149.90     58.51
               Q1     65.79        170.00         167.10     66.93
           Median     67.77        174.30         172.10     68.62
               Q3     69.60        179.00         176.80     70.47
              Max     75.43        199.00         191.60     78.36
              MAD      2.84          6.67           7.26      2.61
              IQR      3.82          9.00           9.70      3.53
               CV      0.04          0.04           0.04      0.04
         Skewness     -0.09         -0.04          -0.09     -0.04
      SE.Skewness      0.07          0.07           0.07      0.07
         Kurtosis     -0.17          0.52          -0.17      0.52
          N.Valid   1078.00       1078.00        1078.00   1078.00
        Pct.Valid    100.00        100.00         100.00    100.00

Kurtosis

La curtosis se refiere a la medida de la forma de una distribución en comparación con la distribución normal, también conocida como campana de Gauss. A través de esta medida, podemos descubrir si una distribución tiene colas pesadas o ligeras, así como si su pico es más pronunciado o suave. En esencia, nos proporciona información sobre cómo se distribuyen los datos alrededor de la media y la presencia de valores atípicos.

Por convención, decimos que la “curva normal” (líneas negras) tiene curtosis cero, por lo que la puntualidad de un conjunto de datos se evalúa en relación con esta curva. Si la curtosis es negativa decimos que la forma es plana y si es positiva decimos que es muy puntiaguda.

Para simplificar la visualización es necesario instalar dos paquetes por el interfaz de R packages -> Install: ggh4x y fitdistrplus

library(ggh4x)
library(fitdistrplus)

ggplot(bbdd_padre_hijo, aes(x=padre_altura)) +
  geom_density() +
  stat_theodensity(colour = "red")

Podemos observar que nuestra distribución de la altura de los padres esta bastante ajustada a lo que sería una distribución normal de los datos.

Histograma

Un histograma es una descripción visual de los datos. Lo único que hay que hacer es dividir los valores posibles en intervalos (bins) y contar el número de observaciones que caen dentro de cada intervalo. Este recuento se denomina frecuencia de la horquilla y se muestra en forma de barra. Otra sutileza que hay que tener en cuenta a la hora de dibujar histogramas es determinar dónde deben situarse los puntos de ruptura (breaks) que separan las casillas y (en relación con esto) cuántos puntos de ruptura debe haber.

#Histograma
ggplot(bbdd_padre_hijo, aes(x = fheight)) +
  geom_histogram() +
  labs(x="altura padre en pulgadas")
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Los histogramas estan construidos en intervalos. Por tanto, R por defecto elige un numero de intervalos para representar la distribución de la variable (por defecto son 30, se denomina bins = 30). Eso lo podemos modificar.

#Histograma en cm
ggplot(bbdd_padre_hijo, aes(x = padre_altura)) +
  geom_histogram(bins = 30) +
  labs(x="altura padre en cm")

#El comando de R base es hist y podemos llegar al mismo resultado
hist(bbdd_padre_hijo$padre_altura, breaks = 30, xlab = "altura padre en cm")

R calcula por defecto el intervalo de clase con la Regla de Sturges, es decir, transformamos la tabla de frecuencias en intervalos de datos agrupados y sobre cada intervalo acumulamos una frecuencia.

La Regla de Sturges se define como:

\[ K = 1 + 3,3*log(n) \]

#Resumen de estadigrafos
descr(bbdd_padre_hijo)
Non-numerical variable(s) ignored: grupo
Descriptive Statistics  
bbdd_padre_hijo  
N: 1078  

                    fheight   hijo_altura   padre_altura   sheight
----------------- --------- ------------- -------------- ---------
             Mean     67.69        174.46         171.93     68.68
          Std.Dev      2.74          7.15           6.97      2.81
              Min     59.01        148.60         149.90     58.51
               Q1     65.79        170.00         167.10     66.93
           Median     67.77        174.30         172.10     68.62
               Q3     69.60        179.00         176.80     70.47
              Max     75.43        199.00         191.60     78.36
              MAD      2.84          6.67           7.26      2.61
              IQR      3.82          9.00           9.70      3.53
               CV      0.04          0.04           0.04      0.04
         Skewness     -0.09         -0.04          -0.09     -0.04
      SE.Skewness      0.07          0.07           0.07      0.07
         Kurtosis     -0.17          0.52          -0.17      0.52
          N.Valid   1078.00       1078.00        1078.00   1078.00
        Pct.Valid    100.00        100.00         100.00    100.00
#Otra forma de obtener lo mismo
#obs: 1078
nrow(bbdd_padre_hijo)
[1] 1078
#maximo altura padre en cm: 191.6
max(bbdd_padre_hijo$padre_altura)
[1] 191.6
#minimo altura padre en cm: 149.9
min(bbdd_padre_hijo$padre_altura)
[1] 149.9
#Regla de Sturges (redondeando decimales con round)
# 11 intervalos
round(1+3.3*log10(1078))
[1] 11
# Rango: Valormax - Valormin
# 41.7
191.6-149.9
[1] 41.7
#Amplitud: Rango/K
# 4
round(41.7/11)
[1] 4
write.xlsx(bbdd_padre_hijo, file = "./base de datos/padre_hijo.xlsx")
#Histograma en cm
ggplot(bbdd_padre_hijo, aes(x = padre_altura)) +
  geom_histogram(bins = 12) +
  labs(x="altura padre en cm")

hist(bbdd_padre_hijo$padre_altura, breaks = 11,  xlab = "altura padre en cm")

Correlaciones

Para evaluar la relación entre dos variables podemos visualizar scatterplots que nos den una visión general de como estan relacionadas dos variables continuas. El grafico parece señalar que a medida que aumenta la altura del padre, aumentaa la altura del hijo. Podríamos inferir una correlación positiva fuerte.

ggplot(bbdd_padre_hijo, aes(x=padre_altura, y=hijo_altura)) +
  geom_point() +
  geom_smooth()
`geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'

El coeficiente de correlación

El coeficiente de correlación de Pearson, que tradicionalmente se denota por \(r\) es una medida que varía de -1 a 1. Cuando \(r= -1\) significa que tenemos una relación negativa perfecta y cuando \(r=1\) significa que tenemos una relación positiva perfecta.

\[ r = \frac{ \sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y}) }{% \sqrt{\sum_{i=1}^{n}(x_i-\bar{x})^2}\sqrt{\sum_{i=1}^{n}(y_i-\bar{y})^2}} \]

Esa formula que parece tan compleja no es más que

La covarianza entre dos variables X e Y es una generalización de la noción de varianza; es una forma matemáticamente sencilla de describir la relación entre dos variables. Debido a que estamos multiplicando (es decir, tomando el producto de) una cantidad que depende de X por una cantidad que depende de Y y luego promediando, se puede pensar en la fórmula de la covarianza como un “producto cruzado promediado” entre X e Y . La covarianza tiene la agradable propiedad de que, si X e Y no tienen ninguna relación, la covarianza es exactamente cero. Si la relación entre ellos es positiva, la covarianza también es positiva; y si la relación es negativa, la covarianza también es negativa. En otras palabras, la covarianza capta la idea cualitativa básica de la correlación. Por desgracia, la magnitud bruta de la covarianza no es fácil de interpretar: depende de las unidades en las que se expresan X e Y y, lo que es peor, las unidades en las que se expresa la covarianza son realmente extrañas.

El coeficiente de correlación de Pearson resuelve este problema de interpretación estandarizando la covarianza: dividiendo por la desviación estándar. Sin embargo, como tenemos dos variables que contribuyen a la covarianza, la estandarización sólo funciona si dividimos por ambas desviaciones estándar.

Calculando correlaciones

El cálculo de correlaciones en R puede realizarse utilizando el comando cor(). La forma más sencilla de utilizar el comando es especificar dos argumentos de entrada x e y, cada uno de los cuales corresponde a una de las variables.

cor(x=bbdd_padre_hijo$padre_altura,y=bbdd_padre_hijo$hijo_altura)
[1] 0.5010942

Naturalmente, en la vida real no se ven muchas correlaciones de 1. Entonces, ¿cómo interpretar una correlación de, por ejemplo, r = 0,4? La respuesta honesta es que depende de para qué se quieran utilizar los datos y de lo fuertes que tiendan a ser las correlaciones en el campo de estudio. Un amigo ingeniero me dijo una vez que cualquier correlación inferior a 0,95 es completamente inútil (creo que exageraba, incluso para la ingeniería).

Instala el paquete ggpubr desde la interfaz de R para generar un grafico de correlacion que contenga toda la información necesaria.

library(ggpubr)
ggscatter(bbdd_padre_hijo, x="padre_altura", y="hijo_altura",
  add = "reg.line",  # Add regressin line
   add.params = list(color = "blue", fill = "lightgray"), # Customize reg. line
   conf.int = TRUE # Add confidence interval
   ) + 
  stat_cor(method = "pearson")