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.
La moda de esta variable cualitativa es el nivel con más frecuencia.
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:
prop.table(table(respuestas, sexo))
## sexo
## respuestas H M
## No 0.08333333 0.50000000
## Si 0.33333333 0.08333333
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
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:
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
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
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
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"))
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\"")
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)
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))
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
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
# 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
mosaicplot(data, color = "lightblue")
barplot(data,
beside = T, legend.text = T,
col = c("lightblue","gold","lightgreen"))
Las mujeres de raza blanca son las que sus bebes pesan por lo general más de 2.5kg.
# 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"))
# 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
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"))