Estadística Descriptiva Unidimensional

Algunas representaciones gráficas.
read.table
names
ifelse
data.frame
table
pie
col
barplot
xlab
ylab
main
min
max
hist
boxplot
lwd
Author

Román Salmerón Gómez

Published

November 8, 2022

El primer paso a realizar cuando se tiene un conjunto de datos es la de realizar un análisis descriptivo de los mismos. De esta forma sabremos lo que tenemos entre manos.

En primer lugar cargamos los datos a usar:

  datos = read.table("https://www.ugr.es/local/romansg/material/WebTC1/TC1/datos.txt", header=T, sep=";")
  names(datos) # nombre de las variables cargadas
[1] "Altura"      "Peso"        "Edad"        "Genero"      "Hermanos"   
[6] "Lateralidad"
  attach(datos) # agrego el nombre de las variables a la memoria

Si bien el comando read.table ya había sido usado con anterioridad, es importante destacar que en este caso se incorporan datos disponibles en una dirección web.

En este caso, se tiene información sobre la altura (medida en centímetros), peso (en kilogramos), edad (en meses), género (1 hombre, 0 mujer), número de hermanos y lateralidad (1 zurdo, 2 diestro).

Antes de empezar con los análisis, vamos a codificar las variables binarias relativas al género y lateralidad:

  Gen = ifelse(Genero == 1, "Hombre", "Mujer") # genero una variable cualitativa a partir de otra numérica
  data.frame(Genero, Gen) # vemos qué se ha hecho
   Genero    Gen
1       0  Mujer
2       0  Mujer
3       0  Mujer
4       0  Mujer
5       1 Hombre
6       1 Hombre
7       0  Mujer
8       0  Mujer
9       1 Hombre
10      1 Hombre
11      0  Mujer
12      1 Hombre
13      1 Hombre
14      0  Mujer
15      1 Hombre
16      0  Mujer
17      0  Mujer
18      1 Hombre
19      0  Mujer
20      1 Hombre
21      0  Mujer
22      1 Hombre
23      0  Mujer
24      1 Hombre
25      1 Hombre
26      1 Hombre
27      1 Hombre
28      1 Hombre
29      0  Mujer
30      0  Mujer
31      0  Mujer
32      0  Mujer
33      0  Mujer
34      0  Mujer
35      0  Mujer
36      0  Mujer
37      1 Hombre
38      1 Hombre
39      0  Mujer
40      1 Hombre
41      1 Hombre
42      0  Mujer
43      1 Hombre
44      1 Hombre
45      0  Mujer
46      1 Hombre
47      1 Hombre
48      1 Hombre
49      1 Hombre
50      1 Hombre
  Late = ifelse(Lateralidad == 1, "Zurdo", "Diestro") # idem
  data.frame(Lateralidad, Late) # idem
   Lateralidad    Late
1            2 Diestro
2            1   Zurdo
3            2 Diestro
4            2 Diestro
5            2 Diestro
6            2 Diestro
7            2 Diestro
8            1   Zurdo
9            2 Diestro
10           2 Diestro
11           2 Diestro
12           2 Diestro
13           2 Diestro
14           2 Diestro
15           2 Diestro
16           2 Diestro
17           2 Diestro
18           1   Zurdo
19           2 Diestro
20           2 Diestro
21           2 Diestro
22           1   Zurdo
23           2 Diestro
24           2 Diestro
25           2 Diestro
26           1   Zurdo
27           2 Diestro
28           2 Diestro
29           2 Diestro
30           2 Diestro
31           2 Diestro
32           2 Diestro
33           2 Diestro
34           2 Diestro
35           2 Diestro
36           1   Zurdo
37           2 Diestro
38           2 Diestro
39           2 Diestro
40           2 Diestro
41           2 Diestro
42           2 Diestro
43           2 Diestro
44           1   Zurdo
45           2 Diestro
46           2 Diestro
47           2 Diestro
48           1   Zurdo
49           2 Diestro
50           2 Diestro

¿Podemos obtener alguna información sin tener conocimientos de estadística? Vamos a intentarlo a partir de algunas representaciones gráficas.

Diagrama de sectores

El diagrama de sectores es una representación gráfica pensada para variables discretas que permite visualizar rápidamente características relacionadas con cada variable. Por ejemplo, es claro que hay más hombres que mujeres o que lo más frecuente es tener 1 ó 2 hermanos, mientras que lo menos son los 4 hermanos:

  pie(table(Genero), col=c("red", "blue")) # ¿quién es cero y uno?

  pie(table(Gen), col=c("lightblue", "blue")) # la duda anterior la solventamos con el ifelse anterior

  pie(table(Hermanos), col=2:7) # ¿tiene sentido esta representación para una variable continua?

Diagrama de barras

El diagrama de barras es otra representación gráfica con la misma filosofía que el diagrama de sectores:

  barplot(table(Late), col=c("lightblue","pink"), xlab="Lateralidad", ylab="Número de Individuos", main="Diagrama de barras") 

  barplot(table(Hermanos), col=2:7) # ¿tiene sentido esta representación para una variable continua?

En este segundo caso, queda muy claro que hay el mismo número de individuos que tienen 1 y 2 hermanos (a partir del diagrama de sectores podría quedar alguna duda).

Es interesante tener claro la misión de table, col, xlab, ylab o main.

Histograma

Si las representaciones gráficas anteriores están pensadas para variables discretas (con pocas modalidades), en el caso de tener una variable continua, la representación gráfica a usar es el histograma:

  variable = Altura # cualquier variable que sea continua
  minimo = min(variable)
  maximo = max(variable)
  rango = maximo - minimo
  intervalos = 9 # número de intervalos de igual amplitud que quiero crear
  hist(variable, breaks=seq(minimo, maximo, rango/intervalos), col="lightblue", freq=F, xlab="Altura", ylab="Porcentaje") 

  hist(variable, breaks=seq(minimo, maximo, rango/intervalos), col="lightblue", freq=T, xlab="Altura", ylab="Frecuencia")

Mediante la opción freq se controla si en el eje vertical se representa la frecuencia relativa de cada modalidad (porcentaje) o absoluta (número de).

A partir de esta representación nos podemos hacer una idea de qué valores son más/menos frecuentes y en qué zona se encuentran.

Diagrama de Tallo y Hojas

Mediante esta representación gráfica se obtienen resultados similares al histograma, con la ventaja de que se observan todos y cada uno de los datos:

  stem(Altura) 

  The decimal point is 1 digit(s) to the right of the |

  16 | 00
  16 | 55557889
  17 | 000122234444
  17 | 5788899
  18 | 0000000000011111
  18 | 5688
  19 | 
  19 | 6

Aunque pueda usarse para variables discretas también, pierde toda su potencia:

  stem(Genero)

  The decimal point is 1 digit(s) to the left of the |

   0 | 000000000000000000000000
   2 | 
   4 | 
   6 | 
   8 | 
  10 | 00000000000000000000000000

¡Ojo! Hay que tener claro que el software informático va a calcular todo lo que le pidamos, independientemente de si es adecuado o no.

Otro ejemplo de que la potencia sin control no tiene sentido:

  pie(Edad)

Diagrama Box-Whisker

Todo lo que se diga sobre esta representación gráfica es poco. En este punto inicial, la utilidad más evidente es la detección de datos anómalos, es decir, datos que se comportan de forma manifiestamente distinta al resto:

    boxplot(variable, ylab="Altura") # ¿hay algunos datos anómalos?

    boxplot(variable~Late, col=c("lightgreen","lightyellow"), ylab="Altura", xlab="Lateralidad")

    boxplot(variable~Gen, col=c("lightgreen","lightyellow"), ylab="Altura", xlab="Género") 

Cuando existen este tipo de datos (también conocidos como outliers), es interesante comprobar a qué se deben. Podrían deberse simplemente a un error de transcripción fácilmente subsanable.

Curva de Lorenz

La última representación que vamos a comentar es la curva de Lorenz:

    # install.packages("ineq") # sólo hay que instalarlo una vez 
    library(ineq) # para usarlo hay que cargarlo en la memoria
    plot(Lc(Hermanos), col="darkred", lwd=2)   

Para saber qué información proporciona esta gráfica os recomiendo la visualización del siguiente video: https://www.youtube.com/watch?v=QditfY6P8uc.

Para finalizar, mencionar que si bien las representaciones gráficas son muy útiles por su potencia visual, son igualmente peligrosas debida a la facilidad con la que se pueden manipular. Aquí http://estadisticaportodaspartes.blogspot.com/2013/04/graficos-estadisticos-manipulados-en.html algunos ejemplos.