Dos grandes grupos en estadística

datos multidimensionales: series de atributos

Formatos ASCII? isolatin?

Tipos de datos:

Definición dato cualitativo: observaciones osbre las cualidades de un objeto o sobre un individuo.

Pueden ser iguales o diferentes de él pero no admiten ningún otro tipo de comparación significativa. No hay más grandes, más pequeños… . Los niveles son los diferentes valores que pueden tomar estos datos.

Frecuencias absolutas y relativas

La moda de esta variable cualitativa es el nivel con más frecuencia.

La función Table

Creemos una muestra aleatoria simple de una variable cualitativa

respuestas <- factor(sample(c('Si','No'), 
                            size = 12, replace = TRUE))
respuestas
##  [1] No No Si No Si No No Si Si Si No No
## Levels: No Si

La función table es una tabla de contingencia. Nos muestra todas las frecuencas absolutas par cada uno de los niveles, aunque el nivel no tenga ningún valor dentro de él.

table(respuestas)
## respuestas
## No Si 
##  7  5

La función prop.table()nos permite calcular las frecuenias relativas a la table de un dataframe.

prop.table(table(respuestas))
## respuestas
##        No        Si 
## 0.5833333 0.4166667

Ejercicio para practicas, con un vector que contien dos niveles, “Hombres” y “Mujeres”:

ejercicio <- c(rep("H", 6),rep("M", 14))

# tabla de contingencia o tabla de frecuencas absolutas
table(ejercicio)
## ejercicio
##  H  M 
##  6 14
# tabla de frecuencias relativas
prop.table(table(ejercicio))
## ejercicio
##   H   M 
## 0.3 0.7
# la moda 
names(which(table(ejercicio) == max(table(ejercicio))))
## [1] "M"

La función table también nos permite construir tabalas de frecuencias conjuntas de dos o más variables. Veamos un ejemplo:

respuestas <- factor(sample(c('Si','No'), size = 12, replace = TRUE))
sexo <- sample(c("H", "M"), size = length(respuestas), replace = TRUE)
table(respuestas, sexo)
##           sexo
## respuestas H M
##         No 1 6
##         Si 4 1
# transponer varias tablas
t(respuestas)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] No   No   No   No   Si   No   Si   Si   No   No    Si    Si   
## Levels: No Si

Para tablas de frecuencia bidimensionales has dos tipos de frecuencias relativas:

  • Frecuencias relativas globales
prop.table(table(respuestas, sexo))
##           sexo
## respuestas          H          M
##         No 0.08333333 0.50000000
##         Si 0.33333333 0.08333333
  • Freciencias relativas marginales

Con el parámetro margin al aplicar la función prop.table() a la table() obtenemos las frecuencas relativas de las filas, y con margin = 2, de las columnas.

prop.table(table(respuestas, sexo), margin = 2)
##           sexo
## respuestas         H         M
##         No 0.2000000 0.8571429
##         Si 0.8000000 0.1428571

La función CrossTable()

Usaremos un paquete llamado gmodels()

library("gmodels")
CrossTable(sexo, respuestas, prop.chisq = FALSE)
## 
##  
##    Cell Contents
## |-------------------------|
## |                       N |
## |           N / Row Total |
## |           N / Col Total |
## |         N / Table Total |
## |-------------------------|
## 
##  
## Total Observations in Table:  12 
## 
##  
##              | respuestas 
##         sexo |        No |        Si | Row Total | 
## -------------|-----------|-----------|-----------|
##            H |         1 |         4 |         5 | 
##              |     0.200 |     0.800 |     0.417 | 
##              |     0.143 |     0.800 |           | 
##              |     0.083 |     0.333 |           | 
## -------------|-----------|-----------|-----------|
##            M |         6 |         1 |         7 | 
##              |     0.857 |     0.143 |     0.583 | 
##              |     0.857 |     0.200 |           | 
##              |     0.500 |     0.083 |           | 
## -------------|-----------|-----------|-----------|
## Column Total |         7 |         5 |        12 | 
##              |     0.583 |     0.417 |           | 
## -------------|-----------|-----------|-----------|
## 
## 

La leyenda cell content nos comenta los contenidos de las celdas de las tablas. Cada telda tiene los siguientes valores:

  • Frecuencias absolutas
  • Frecuencias relativas en relación a la fila
  • Frecuencias relativas en relación a la columna
  • Frecuencias relativas globales

Ejemplo de estadística multidimensional

Vamos a hacer una tabla de frecuencias multidimensionales o multivariante. Este ejemplo contendrá tres dimensiones:

ans <- sample(c("Si", "No"), size = 100, replace = TRUE)
sex <- sample(c("H", "M"), size = 100, replace = TRUE)
place <- sample(c("País_A", "País_B", "País_C", "País_D", "País_E"), 
                size = 100, replace = TRUE)

Vamos a crear la tabla:

table(sex, ans, place)
## , , place = País_A
## 
##    ans
## sex No Si
##   H  2  2
##   M  4  7
## 
## , , place = País_B
## 
##    ans
## sex No Si
##   H  2  7
##   M  8  6
## 
## , , place = País_C
## 
##    ans
## sex No Si
##   H 17  2
##   M  5  3
## 
## , , place = País_D
## 
##    ans
## sex No Si
##   H  7  4
##   M  5  5
## 
## , , place = País_E
## 
##    ans
## sex No Si
##   H  4  4
##   M  4  2

Podemos ver una tabla en formato plano:

ftable(sex, ans, place)
##         place País_A País_B País_C País_D País_E
## sex ans                                         
## H   No             2      2     17      7      4
##     Si             2      7      2      4      4
## M   No             4      8      5      5      4
##     Si             7      6      3      5      2

En esta función podemos especificar que variable queremos como columnas y cuáles como filas:

ftable(sex, ans, place, col.vars = c("sex", "ans"))
##        sex  H     M   
##        ans No Si No Si
## place                 
## País_A      2  2  4  7
## País_B      2  7  8  6
## País_C     17  2  5  3
## País_D      7  4  5  5
## País_E      4  4  4  2

I podemos aplicar un filtro en las tablas de contingencia:

table(sex, ans, place)["M", "Si", "País_B"]
## [1] 6
table(sex, ans, place)["M", "No",]
## País_A País_B País_C País_D País_E 
##      4      8      5      5      4
table(sex, ans, place)[, "Si",]
##    place
## sex País_A País_B País_C País_D País_E
##   H      2      7      2      4      4
##   M      7      6      3      5      2

E incluso aplicar filtros en tablas de proporción

# Frec. relativas globales
prop.table(table(sex, ans, place))
## , , place = País_A
## 
##    ans
## sex   No   Si
##   H 0.02 0.02
##   M 0.04 0.07
## 
## , , place = País_B
## 
##    ans
## sex   No   Si
##   H 0.02 0.07
##   M 0.08 0.06
## 
## , , place = País_C
## 
##    ans
## sex   No   Si
##   H 0.17 0.02
##   M 0.05 0.03
## 
## , , place = País_D
## 
##    ans
## sex   No   Si
##   H 0.07 0.04
##   M 0.05 0.05
## 
## , , place = País_E
## 
##    ans
## sex   No   Si
##   H 0.04 0.04
##   M 0.04 0.02
# Frecuencia relativa marginal por país
prop.table(table(sex, ans, place), margin = 3)
## , , place = País_A
## 
##    ans
## sex         No         Si
##   H 0.13333333 0.13333333
##   M 0.26666667 0.46666667
## 
## , , place = País_B
## 
##    ans
## sex         No         Si
##   H 0.08695652 0.30434783
##   M 0.34782609 0.26086957
## 
## , , place = País_C
## 
##    ans
## sex         No         Si
##   H 0.62962963 0.07407407
##   M 0.18518519 0.11111111
## 
## , , place = País_D
## 
##    ans
## sex         No         Si
##   H 0.33333333 0.19047619
##   M 0.23809524 0.23809524
## 
## , , place = País_E
## 
##    ans
## sex         No         Si
##   H 0.28571429 0.28571429
##   M 0.28571429 0.14285714
# Frecuencia reltiva marginal por sexo y país 
prop.table(table(sex, ans, place), margin = c(1,3))
## , , place = País_A
## 
##    ans
## sex        No        Si
##   H 0.5000000 0.5000000
##   M 0.3636364 0.6363636
## 
## , , place = País_B
## 
##    ans
## sex        No        Si
##   H 0.2222222 0.7777778
##   M 0.5714286 0.4285714
## 
## , , place = País_C
## 
##    ans
## sex        No        Si
##   H 0.8947368 0.1052632
##   M 0.6250000 0.3750000
## 
## , , place = País_D
## 
##    ans
## sex        No        Si
##   H 0.6363636 0.3636364
##   M 0.5000000 0.5000000
## 
## , , place = País_E
## 
##    ans
## sex        No        Si
##   H 0.5000000 0.5000000
##   M 0.6666667 0.3333333

Podemos poner toda la información anterior de forma más compacta con la función ftable():

# frecuencias relativa globales
ftable(prop.table(table(sex, ans, place)))
##         place País_A País_B País_C País_D País_E
## sex ans                                         
## H   No          0.02   0.02   0.17   0.07   0.04
##     Si          0.02   0.07   0.02   0.04   0.04
## M   No          0.04   0.08   0.05   0.05   0.04
##     Si          0.07   0.06   0.03   0.05   0.02

Caso real de un caso multidimensional

Podemos ver que aquí ya tendremos los datos agregados:

HairEyeColor
## , , Sex = Male
## 
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    32   11    10     3
##   Brown    53   50    25    15
##   Red      10   10     7     7
##   Blond     3   30     5     8
## 
## , , Sex = Female
## 
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    36    9     5     2
##   Brown    66   34    29    14
##   Red      16    7     7     7
##   Blond     4   64     5     8

Poodemos realizar operaciones sobre de ella:

# podemos saber el número totaal de individuos de la tabla
sum(HairEyeColor)
## [1] 592

Podemos preparar una frecuencias margianal:

# frecuencias relativa del color del pelo y de los ojos para cada uno de los sexos:
prop.table(HairEyeColor, margin = 3)
## , , Sex = Male
## 
##        Eye
## Hair          Brown        Blue       Hazel       Green
##   Black 0.114695341 0.039426523 0.035842294 0.010752688
##   Brown 0.189964158 0.179211470 0.089605735 0.053763441
##   Red   0.035842294 0.035842294 0.025089606 0.025089606
##   Blond 0.010752688 0.107526882 0.017921147 0.028673835
## 
## , , Sex = Female
## 
##        Eye
## Hair          Brown        Blue       Hazel       Green
##   Black 0.115015974 0.028753994 0.015974441 0.006389776
##   Brown 0.210862620 0.108626198 0.092651757 0.044728435
##   Red   0.051118211 0.022364217 0.022364217 0.022364217
##   Blond 0.012779553 0.204472843 0.015974441 0.025559105

Tablas a partir de dataframes de variables cualitativas

Beb_Energ <- read.table(file = "../data/EnergyDrink",
                        header = TRUE)

Visualización rápida de la tabla de frecuencias relativas:

summary(Beb_Energ)
##          estudio   bebe        sexo   
##  Industriales:37   No:97   Hombre:83  
##  Informatica :53   Si:25   Mujer :39  
##  Mates       :16                      
##  Telematica  :16

Realizamos la función table para cada una de las columnas:

apply(Beb_Energ, MARGIN = 2, FUN = table)
## $estudio
## 
## Industriales  Informatica        Mates   Telematica 
##           37           53           16           16 
## 
## $bebe
## 
## No Si 
## 97 25 
## 
## $sexo
## 
## Hombre  Mujer 
##     83     39

Vemos una la tabla de las frecuencas absolutas con la función table():

table(Beb_Energ)
## , , sexo = Hombre
## 
##               bebe
## estudio        No Si
##   Industriales 19  6
##   Informatica  30  7
##   Mates         8  1
##   Telematica   10  2
## 
## , , sexo = Mujer
## 
##               bebe
## estudio        No Si
##   Industriales 10  2
##   Informatica  11  5
##   Mates         6  1
##   Telematica    3  1

Podemos hacer una table de solo alguna de las columnas del dataframe:

table(Beb_Energ[,c(1,3)])
##               sexo
## estudio        Hombre Mujer
##   Industriales     25    12
##   Informatica      37    16
##   Mates             9     7
##   Telematica       12     4

La tercera opción es usar ftable() paraa ver la misma tabla de frecuencias pero en formato plano:

ftable(Beb_Energ)
##                   sexo Hombre Mujer
## estudio      bebe                  
## Industriales No            19    10
##              Si             6     2
## Informatica  No            30    11
##              Si             7     5
## Mates        No             8     6
##              Si             1     1
## Telematica   No            10     3
##              Si             2     1

Visualización de datos cualitativos

Diagrama de barras

El tipo de gráfico que se utiliza normalment para representar variables cualitativas son los diagramas de barras. Usaremos la función barplot() con una tabla. Veamos un ejemplo:

barplot(table(sexo), col = c("lightblue","pink"),
        main = "Diagrama de barras de las frecuencias absolutas\n de la variable \"Sexo\"")

Podemos visualizar las frecuencias relativas de la tabla:

barplot(prop.table(table(sexo)),
        main = "Diagrama de barras de\n frecuencias relativas\n de la variable \"Sexo\"")

Podemos mostrar las barras de forma horizontal:

barplot(table(sexo), 
        horiz = TRUE)

I tambíen podemos mostrar una tabla bidimensional de frecuencias absolutas:

barplot(table(sexo, respuestas),
        beside = T, 
        col = c("yellow", "lightblue"),
        names = c("Men", "Women"), 
        legend.text = c("No", "Yes"))

Diagrama circular o “tarta”

Podemos generar gráficos con forma de pastel de forma ràpida con la función pie() aplicada a la tabla de frecuencias.

pie(table(respuestas),
    main = "Diagrama circular de la variable \"respuestas\"")

Diagrama de mosaico

Veamos un ejemplo:

plot(table(sexo, respuestas), 
     main = "Gráfico de mosaico de las variables\n \"Sexo\" y \"Respuestas\"")

Ejemplo con “HairEyeColor”:

plot(HairEyeColor, 
     main = "Gráfico de mosaico de la tabla HairEyeColor",
     col = c("pink", "lightblue"))

Hay dos paquetes que son muy útiles para este tipo de visualizaciones; vcd y vdcExtra. Sin embargo se puede usar el paquete ggplot para hacer toda visualización que queramos hacer. Ejemplos de visualización:

# vcdExtra::mosaic3d(HairEyeColor)

Ejercicio completo de datos cualitativos

Haremos un análisis completo del objeto de datos de HairEyeColor. Este objeto consta de tres variables cualitativas:

Objetivo extraer una tabla bidimensional de frecuencas absolutas de las variables Eye y hair, sin distinguis según el sexo. La manera más fácil de obtener esta tabla es sumando las subtabla de frecuencias para hombres y mujeres, y aplicando as.table() al resultaso para transformarlo en una table por si no lo es.

Primer paso: Juntar color de ojos y pelo sin destingui por sexo

#  Subtabla para los hombres
male <- HairEyeColor[, ,"Male"]

# Subtabla para las mujeres
female <- HairEyeColor[, ,"Female"]
data <- as.table(male + female)
data
##        Eye
## Hair    Brown Blue Hazel Green
##   Black    68   20    15     5
##   Brown   119   84    54    29
##   Red      26   17    14    14
##   Blond     7   94    10    16
# nos queda una tabla agregada, donde estan hombres y mujeres sin distinción

Ahora vamos a cambiarlos nombres del inglés al español:

# Vamos a hcer una manipulación de datocambiando los nombres de data 
colnames(data) <- c("Marrón","Azul","Avellana", "Verdes")
rownames(data) <- c("Negro","Marrón","Pelirrojo","Rubio")

# otra forma de hacerlos es a través de dimnames
dimnames(data) <- list(
  Pelo <- c("Negro","Marrón","Pelirrojo","Rubio"),
  Ojos <- c("Marrón","Azul","Avellana", "Verdes")
)
data
##           Marrón Azul Avellana Verdes
## Negro         68   20       15      5
## Marrón       119   84       54     29
## Pelirrojo     26   17       14     14
## Rubio          7   94       10     16

Ahora vamos a crear un diagrama de mosaico para visualizar las entradas de los ojos y del cabello:

plot(data, col = c("lightblue"), 
     main = "Diagrama de mosaico de la tabla bidimensional de frecuencias\n  de colores de cabello y ojos")

Ahora calcular el número total de individuos que hay en esta tabla:

sum(data)
## [1] 592

Ahora crearemos la tabla de frecuencias absolutas y relativas para cada una de las variables:

# tabla de frecuencias absolutas pelo
rowSums(data)
##     Negro    Marrón Pelirrojo     Rubio 
##       108       286        71       127
# tabla de frecuencias relativas pelo 
prop.table(rowSums(data))
##     Negro    Marrón Pelirrojo     Rubio 
## 0.1824324 0.4831081 0.1199324 0.2145270
# tabla de frecuencas absolitas ojos
colSums(data)
##   Marrón     Azul Avellana   Verdes 
##      220      215       93       64
# tabla de frecuencias relativas ojos
prop.table(colSums(data))
##    Marrón      Azul  Avellana    Verdes 
## 0.3716216 0.3631757 0.1570946 0.1081081

Representación a través de los barplots():

# ojos
barplot(prop.table(colSums(data)),
        main = "Frecuencias relativas\n de colores de ojos", 
        col = c("burlywood4","lightblue","orange3","lightgreen"),
        ylim = c(0,0.4))

# cabello
barplot(prop.table(rowSums(data)),
        main = "Frecuencias relativas\n de color de cabello",
        col = c("black","burlywood4","red","yellow"),
        ylim = c(0,0.4))

Vemos que el color de ojos esta muy repartido entre azul y marrón, y el pelo tiene mayoría marrón.

Vamos a hacer la tabla de relativa global:

round(prop.table(data), 3)
##           Marrón  Azul Avellana Verdes
## Negro      0.115 0.034    0.025  0.008
## Marrón     0.201 0.142    0.091  0.049
## Pelirrojo  0.044 0.029    0.024  0.024
## Rubio      0.012 0.159    0.017  0.027

Ahora vamos a hacer la tablla de frecuencias relativa marginal:

round(prop.table(data, margin = 1),3)
##           Marrón  Azul Avellana Verdes
## Negro      0.630 0.185    0.139  0.046
## Marrón     0.416 0.294    0.189  0.101
## Pelirrojo  0.366 0.239    0.197  0.197
## Rubio      0.055 0.740    0.079  0.126
round(prop.table(data, margin = 2),3)
##           Marrón  Azul Avellana Verdes
## Negro      0.309 0.093    0.161  0.078
## Marrón     0.541 0.391    0.581  0.453
## Pelirrojo  0.118 0.079    0.151  0.219
## Rubio      0.032 0.437    0.108  0.250

Podemos usar la función CrossTable() para ver una visualización de los datos, però la tabla sería demasiado grande.

Ahora vamos a usar las frecuencias marginales para hacer un diagrama de barras una al lado del otro:

barplot(prop.table(data, margin = 1),
        beside = TRUE, col = c("black","brown","red","gold"),
        legend.text = T, main = "Frecuencias relativas de colores de\n cabello para cada color de ojos",
        ylim = c(0,0.8))

barplot(t(prop.table(data, margin = 2)),
        beside = TRUE, 
        col = c("burlywood4","lightblue","gold","lightgreen"),
        legend.text = T, main = "Frecuencias relativas de colores de\n ojos para cada color de pelo",
        ylim = c(0,0.6))

Tarea 10

Vamos a trabajar con un Data Frame que contiene información sobre bebés recién nacidos e información de sus respectivas madres.

library(MASS)
birthwt
##     low age lwt race smoke ptl ht ui ftv  bwt
## 85    0  19 182    2     0   0  0  1   0 2523
## 86    0  33 155    3     0   0  0  0   3 2551
## 87    0  20 105    1     1   0  0  0   1 2557
## 88    0  21 108    1     1   0  0  1   2 2594
## 89    0  18 107    1     1   0  0  1   0 2600
## 91    0  21 124    3     0   0  0  0   0 2622
## 92    0  22 118    1     0   0  0  0   1 2637
## 93    0  17 103    3     0   0  0  0   1 2637
## 94    0  29 123    1     1   0  0  0   1 2663
## 95    0  26 113    1     1   0  0  0   0 2665
## 96    0  19  95    3     0   0  0  0   0 2722
## 97    0  19 150    3     0   0  0  0   1 2733
## 98    0  22  95    3     0   0  1  0   0 2751
## 99    0  30 107    3     0   1  0  1   2 2750
## 100   0  18 100    1     1   0  0  0   0 2769
## 101   0  18 100    1     1   0  0  0   0 2769
## 102   0  15  98    2     0   0  0  0   0 2778
## 103   0  25 118    1     1   0  0  0   3 2782
## 104   0  20 120    3     0   0  0  1   0 2807
## 105   0  28 120    1     1   0  0  0   1 2821
## 106   0  32 121    3     0   0  0  0   2 2835
## 107   0  31 100    1     0   0  0  1   3 2835
## 108   0  36 202    1     0   0  0  0   1 2836
## 109   0  28 120    3     0   0  0  0   0 2863
## 111   0  25 120    3     0   0  0  1   2 2877
## 112   0  28 167    1     0   0  0  0   0 2877
## 113   0  17 122    1     1   0  0  0   0 2906
## 114   0  29 150    1     0   0  0  0   2 2920
## 115   0  26 168    2     1   0  0  0   0 2920
## 116   0  17 113    2     0   0  0  0   1 2920
## 117   0  17 113    2     0   0  0  0   1 2920
## 118   0  24  90    1     1   1  0  0   1 2948
## 119   0  35 121    2     1   1  0  0   1 2948
## 120   0  25 155    1     0   0  0  0   1 2977
## 121   0  25 125    2     0   0  0  0   0 2977
## 123   0  29 140    1     1   0  0  0   2 2977
## 124   0  19 138    1     1   0  0  0   2 2977
## 125   0  27 124    1     1   0  0  0   0 2922
## 126   0  31 215    1     1   0  0  0   2 3005
## 127   0  33 109    1     1   0  0  0   1 3033
## 128   0  21 185    2     1   0  0  0   2 3042
## 129   0  19 189    1     0   0  0  0   2 3062
## 130   0  23 130    2     0   0  0  0   1 3062
## 131   0  21 160    1     0   0  0  0   0 3062
## 132   0  18  90    1     1   0  0  1   0 3062
## 133   0  18  90    1     1   0  0  1   0 3062
## 134   0  32 132    1     0   0  0  0   4 3080
## 135   0  19 132    3     0   0  0  0   0 3090
## 136   0  24 115    1     0   0  0  0   2 3090
## 137   0  22  85    3     1   0  0  0   0 3090
## 138   0  22 120    1     0   0  1  0   1 3100
## 139   0  23 128    3     0   0  0  0   0 3104
## 140   0  22 130    1     1   0  0  0   0 3132
## 141   0  30  95    1     1   0  0  0   2 3147
## 142   0  19 115    3     0   0  0  0   0 3175
## 143   0  16 110    3     0   0  0  0   0 3175
## 144   0  21 110    3     1   0  0  1   0 3203
## 145   0  30 153    3     0   0  0  0   0 3203
## 146   0  20 103    3     0   0  0  0   0 3203
## 147   0  17 119    3     0   0  0  0   0 3225
## 148   0  17 119    3     0   0  0  0   0 3225
## 149   0  23 119    3     0   0  0  0   2 3232
## 150   0  24 110    3     0   0  0  0   0 3232
## 151   0  28 140    1     0   0  0  0   0 3234
## 154   0  26 133    3     1   2  0  0   0 3260
## 155   0  20 169    3     0   1  0  1   1 3274
## 156   0  24 115    3     0   0  0  0   2 3274
## 159   0  28 250    3     1   0  0  0   6 3303
## 160   0  20 141    1     0   2  0  1   1 3317
## 161   0  22 158    2     0   1  0  0   2 3317
## 162   0  22 112    1     1   2  0  0   0 3317
## 163   0  31 150    3     1   0  0  0   2 3321
## 164   0  23 115    3     1   0  0  0   1 3331
## 166   0  16 112    2     0   0  0  0   0 3374
## 167   0  16 135    1     1   0  0  0   0 3374
## 168   0  18 229    2     0   0  0  0   0 3402
## 169   0  25 140    1     0   0  0  0   1 3416
## 170   0  32 134    1     1   1  0  0   4 3430
## 172   0  20 121    2     1   0  0  0   0 3444
## 173   0  23 190    1     0   0  0  0   0 3459
## 174   0  22 131    1     0   0  0  0   1 3460
## 175   0  32 170    1     0   0  0  0   0 3473
## 176   0  30 110    3     0   0  0  0   0 3544
## 177   0  20 127    3     0   0  0  0   0 3487
## 179   0  23 123    3     0   0  0  0   0 3544
## 180   0  17 120    3     1   0  0  0   0 3572
## 181   0  19 105    3     0   0  0  0   0 3572
## 182   0  23 130    1     0   0  0  0   0 3586
## 183   0  36 175    1     0   0  0  0   0 3600
## 184   0  22 125    1     0   0  0  0   1 3614
## 185   0  24 133    1     0   0  0  0   0 3614
## 186   0  21 134    3     0   0  0  0   2 3629
## 187   0  19 235    1     1   0  1  0   0 3629
## 188   0  25  95    1     1   3  0  1   0 3637
## 189   0  16 135    1     1   0  0  0   0 3643
## 190   0  29 135    1     0   0  0  0   1 3651
## 191   0  29 154    1     0   0  0  0   1 3651
## 192   0  19 147    1     1   0  0  0   0 3651
## 193   0  19 147    1     1   0  0  0   0 3651
## 195   0  30 137    1     0   0  0  0   1 3699
## 196   0  24 110    1     0   0  0  0   1 3728
## 197   0  19 184    1     1   0  1  0   0 3756
## 199   0  24 110    3     0   1  0  0   0 3770
## 200   0  23 110    1     0   0  0  0   1 3770
## 201   0  20 120    3     0   0  0  0   0 3770
## 202   0  25 241    2     0   0  1  0   0 3790
## 203   0  30 112    1     0   0  0  0   1 3799
## 204   0  22 169    1     0   0  0  0   0 3827
## 205   0  18 120    1     1   0  0  0   2 3856
## 206   0  16 170    2     0   0  0  0   4 3860
## 207   0  32 186    1     0   0  0  0   2 3860
## 208   0  18 120    3     0   0  0  0   1 3884
## 209   0  29 130    1     1   0  0  0   2 3884
## 210   0  33 117    1     0   0  0  1   1 3912
## 211   0  20 170    1     1   0  0  0   0 3940
## 212   0  28 134    3     0   0  0  0   1 3941
## 213   0  14 135    1     0   0  0  0   0 3941
## 214   0  28 130    3     0   0  0  0   0 3969
## 215   0  25 120    1     0   0  0  0   2 3983
## 216   0  16  95    3     0   0  0  0   1 3997
## 217   0  20 158    1     0   0  0  0   1 3997
## 218   0  26 160    3     0   0  0  0   0 4054
## 219   0  21 115    1     0   0  0  0   1 4054
## 220   0  22 129    1     0   0  0  0   0 4111
## 221   0  25 130    1     0   0  0  0   2 4153
## 222   0  31 120    1     0   0  0  0   2 4167
## 223   0  35 170    1     0   1  0  0   1 4174
## 224   0  19 120    1     1   0  0  0   0 4238
## 225   0  24 116    1     0   0  0  0   1 4593
## 226   0  45 123    1     0   0  0  0   1 4990
## 4     1  28 120    3     1   1  0  1   0  709
## 10    1  29 130    1     0   0  0  1   2 1021
## 11    1  34 187    2     1   0  1  0   0 1135
## 13    1  25 105    3     0   1  1  0   0 1330
## 15    1  25  85    3     0   0  0  1   0 1474
## 16    1  27 150    3     0   0  0  0   0 1588
## 17    1  23  97    3     0   0  0  1   1 1588
## 18    1  24 128    2     0   1  0  0   1 1701
## 19    1  24 132    3     0   0  1  0   0 1729
## 20    1  21 165    1     1   0  1  0   1 1790
## 22    1  32 105    1     1   0  0  0   0 1818
## 23    1  19  91    1     1   2  0  1   0 1885
## 24    1  25 115    3     0   0  0  0   0 1893
## 25    1  16 130    3     0   0  0  0   1 1899
## 26    1  25  92    1     1   0  0  0   0 1928
## 27    1  20 150    1     1   0  0  0   2 1928
## 28    1  21 200    2     0   0  0  1   2 1928
## 29    1  24 155    1     1   1  0  0   0 1936
## 30    1  21 103    3     0   0  0  0   0 1970
## 31    1  20 125    3     0   0  0  1   0 2055
## 32    1  25  89    3     0   2  0  0   1 2055
## 33    1  19 102    1     0   0  0  0   2 2082
## 34    1  19 112    1     1   0  0  1   0 2084
## 35    1  26 117    1     1   1  0  0   0 2084
## 36    1  24 138    1     0   0  0  0   0 2100
## 37    1  17 130    3     1   1  0  1   0 2125
## 40    1  20 120    2     1   0  0  0   3 2126
## 42    1  22 130    1     1   1  0  1   1 2187
## 43    1  27 130    2     0   0  0  1   0 2187
## 44    1  20  80    3     1   0  0  1   0 2211
## 45    1  17 110    1     1   0  0  0   0 2225
## 46    1  25 105    3     0   1  0  0   1 2240
## 47    1  20 109    3     0   0  0  0   0 2240
## 49    1  18 148    3     0   0  0  0   0 2282
## 50    1  18 110    2     1   1  0  0   0 2296
## 51    1  20 121    1     1   1  0  1   0 2296
## 52    1  21 100    3     0   1  0  0   4 2301
## 54    1  26  96    3     0   0  0  0   0 2325
## 56    1  31 102    1     1   1  0  0   1 2353
## 57    1  15 110    1     0   0  0  0   0 2353
## 59    1  23 187    2     1   0  0  0   1 2367
## 60    1  20 122    2     1   0  0  0   0 2381
## 61    1  24 105    2     1   0  0  0   0 2381
## 62    1  15 115    3     0   0  0  1   0 2381
## 63    1  23 120    3     0   0  0  0   0 2410
## 65    1  30 142    1     1   1  0  0   0 2410
## 67    1  22 130    1     1   0  0  0   1 2410
## 68    1  17 120    1     1   0  0  0   3 2414
## 69    1  23 110    1     1   1  0  0   0 2424
## 71    1  17 120    2     0   0  0  0   2 2438
## 75    1  26 154    3     0   1  1  0   1 2442
## 76    1  20 105    3     0   0  0  0   3 2450
## 77    1  26 190    1     1   0  0  0   0 2466
## 78    1  14 101    3     1   1  0  0   0 2466
## 79    1  28  95    1     1   0  0  0   2 2466
## 81    1  14 100    3     0   0  0  0   2 2495
## 82    1  23  94    3     1   0  0  0   0 2495
## 83    1  17 142    2     0   0  1  0   0 2495
## 84    1  21 130    1     1   0  1  0   3 2495
  1. Utiliza str() y head() para explorar la estructura, y con help(), mirar el significado de cada variable.
str(birthwt)
## 'data.frame':    189 obs. of  10 variables:
##  $ low  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ age  : int  19 33 20 21 18 21 22 17 29 26 ...
##  $ lwt  : int  182 155 105 108 107 124 118 103 123 113 ...
##  $ race : int  2 3 1 1 1 3 1 3 1 1 ...
##  $ smoke: int  0 0 1 1 1 0 0 0 1 1 ...
##  $ ptl  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ ht   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ ui   : int  1 0 0 1 1 0 0 0 0 0 ...
##  $ ftv  : int  0 3 1 2 0 0 1 1 1 0 ...
##  $ bwt  : int  2523 2551 2557 2594 2600 2622 2637 2637 2663 2665 ...
head(birthwt)
##    low age lwt race smoke ptl ht ui ftv  bwt
## 85   0  19 182    2     0   0  0  1   0 2523
## 86   0  33 155    3     0   0  0  0   3 2551
## 87   0  20 105    1     1   0  0  0   1 2557
## 88   0  21 108    1     1   0  0  1   2 2594
## 89   0  18 107    1     1   0  0  1   0 2600
## 91   0  21 124    3     0   0  0  0   0 2622
help("birthwt")
## starting httpd help server ... done
  1. Calcula una tabla de frecuencias relativas marginales de los pares (raza de la madre, peso inferior a 2.5 kg o no) que permita ver si la raza de la madre influye en el peso del bebé.
# creating the table 
data <- table(birthwt$race,birthwt$low)

# giving names to the table
dimnames(data) <- list(
  race <-  c("white","black","other"),
  birth_weight <- c(">2.5kg","<2.5kg")
)
data
##       >2.5kg <2.5kg
## white     73     23
## black     15     11
## other     42     25
sum(data)
## [1] 189
  1. Dibuja un diagrama de mosaico de la tabla del ejercicio anterior.
mosaicplot(data, color = "lightblue")

  1. Dibuja un diagrama bidimensional de barras, con las barras organizadas en bloques, que permita visualizar la información de los ejercicios anteriores. Aprovecha para nombres adecuados a los bloques, colores a las barras, y añadir una leyenda que explique qué representa cada barra.
barplot(data,
        beside = T, legend.text = T,
        col = c("lightblue","gold","lightgreen")) 

  1. ¿Se puede obtener alguna conclusión de la tabla y el diagrama de barras anterior? Argumenta tu respuesta

Las mujeres de raza blanca son las que sus bebes pesan por lo general más de 2.5kg.

  1. Repite los cuatro ejercicios anteriores para los pares (madre fumadora o no, peso inferior a 2.5 kg o no) y para los pares (madre hipertensa o no, peso inferior a 2.5 kg o no.
# madre fumadora con peso inferior a 2.5kg
smke_low <- table(birthwt$smoke, birthwt$low)
dimnames(smke_low) <- list(
  smoke <-  c("no","yes"),
  birth_weight <- c(">2.5kg","<2.5kg")
)
round(prop.table(smke_low, margin = 1),3)
##     >2.5kg <2.5kg
## no   0.748  0.252
## yes  0.595  0.405
mosaicplot(smke_low)

barplot(smke_low,beside = T, legend.text = T, col = c("lightblue","lightgreen"))

# madre hipertensa o no a 2.5kg
hiper_low <- table(birthwt$ht, birthwt$low)
dimnames(hiper_low) <- list(
  hipert. <-  c("no","yes"),
  birth_weight <- c(">2.5kg","<2.5kg")
)
round(prop.table(hiper_low, margin = 1),3)
##     >2.5kg <2.5kg
## no   0.706  0.294
## yes  0.417  0.583
mosaicplot(hiper_low)

barplot(hiper_low,beside = T, legend.text = T, col = c("gold","brown"))

  1. Calcula una tabla de frecuencias relativas marginales de las ternas (raza de la madre, madre fumadora o no, peso inferior a 2.5 kg o no) que permita ver si la raza de la madre y su condición de fumadora o no fumadora influyen en el peso del bebé.
# raza 
round(prop.table(data, margin = 1),3)
##       >2.5kg <2.5kg
## white  0.760  0.240
## black  0.577  0.423
## other  0.627  0.373
# fumadora
round(prop.table(smke_low, margin = 1),3)
##     >2.5kg <2.5kg
## no   0.748  0.252
## yes  0.595  0.405
# hipertension
round(prop.table(hiper_low, margin = 1),3)
##     >2.5kg <2.5kg
## no   0.706  0.294
## yes  0.417  0.583
  1. Dibuja un diagrama de mosaico de la tabla del ejercicio anterior.
total_data <- table(birthwt$race, birthwt$smoke, birthwt$ht,birthwt$low)
dimnames(total_data) <- list(
  race <-  c("white","black","other"),
  smoke <-  c("no","yes"),
  hipert. <-  c("no","yes"),
  birth_weight <- c(">2.5kg","<2.5kg")
)
mosaicplot(total_data, col = c("lightblue","lightgreen"))