El dato ordinal presenta un orden natula que permite ir acumulando observaciones. Podremos contar frecuencias menores o iguales debajo de un tema en concreto.
¿Cuántas veces hemos observado un dato menor o igual al que estamos estudiando?
Veamos un ejemplo sobre notas de un examen de estadística. Primero creemos un vector de datos ordenados:
notas <- ordered(c("S","A","N","Ex","s","S","Ex",
"Ex","N","A","A","A","A","N","S"),
levels = c("S","A","N","Ex"))
# miremos como lo muestra r
notas
## [1] S A N Ex <NA> S Ex Ex N A A A A N
## [15] S
## Levels: S < A < N < Ex
#veamos la función table
table(notas)
## notas
## S A N Ex
## 3 5 3 3
La frecuenca relativa acumulada será la fracción del total de las observaciones en tanto por 1 que representa su frecuencia absoluta acumulada.
Otro ejemplo donde se muestra el trato ofrecido en un restaurante:
set.seed(2018)
clientes <- sample(1:5, 50, replace = TRUE)
clientes
## [1] 2 3 1 1 3 2 4 1 5 3 2 4 5 4 5 4 2 3 4 5 2 3 1 1 4 3 2 5 3 1 1 5 1 3 3
## [36] 4 1 1 3 1 5 4 3 3 4 1 5 1 1 4
En este caso tendriamos 5 niveles (k = 5) y 50 observaciones.
POdemos calcular el valor acumulado con la función cumsum():
# frecuencias absolutas
fAbs <- table(notas)
# frecuencias absolutas acumuladas
cumsum(
fAbs
)
## S A N Ex
## 3 8 11 14
Podemos sacar la tabla de frecuencias relativas acumuladas:
cumsum(
prop.table(fAbs)
)
## S A N Ex
## 0.2142857 0.5714286 0.7857143 1.0000000
barplot(fAbs, main = "Diagrama de barras de frecuencias absolutas")
barplot(cumsum(fAbs), main = "Diagrama de barras de frecuencias absolutas acumuladas")
Resumen de los puntos tratados
Recordad que todos estos pasos se peuden reproducir en un diagrama de barras.
crabs <- read.table("../data/datacrab.txt", header = T)
crabs <- crabs[,-1] # omitimos la columna id
str(crabs)
## 'data.frame': 173 obs. of 5 variables:
## $ color : int 3 4 2 4 4 3 2 4 3 4 ...
## $ spine : int 3 3 1 3 3 3 1 2 1 3 ...
## $ width : num 28.3 22.5 26 24.8 26 23.8 26.5 24.7 23.7 25.6 ...
## $ satell: int 8 0 9 0 4 0 0 0 0 0 ...
## $ weight: int 3050 1550 2300 2100 2600 2100 2350 1900 1950 2150 ...
Convertiremos la variable “width” en una variable ordinal:
intervalos <- cut(crabs$width, breaks = c(21, 25, 29, 33, Inf), right = F,
labels = c("21-25", "25-29", "29-33", "33-..."))
# queremos un ivervalo ordenado
crabs$width.rank <- ordered(intervalos)
str(crabs)
## 'data.frame': 173 obs. of 6 variables:
## $ color : int 3 4 2 4 4 3 2 4 3 4 ...
## $ spine : int 3 3 1 3 3 3 1 2 1 3 ...
## $ width : num 28.3 22.5 26 24.8 26 23.8 26.5 24.7 23.7 25.6 ...
## $ satell : int 8 0 9 0 4 0 0 0 0 0 ...
## $ weight : int 3050 1550 2300 2100 2600 2100 2350 1900 1950 2150 ...
## $ width.rank: Ord.factor w/ 4 levels "21-25"<"25-29"<..: 2 1 2 1 2 1 2 1 1 2 ...
Ahora podemos calcular las tablas con la nueva variable que hemos creado:
# Frecuencias absolutas
Tabla <- table(crabs[,c(1,6)])
Tabla
## width.rank
## color 21-25 25-29 29-33 33-...
## 2 1 9 2 0
## 3 19 62 13 1
## 4 17 24 3 0
## 5 9 12 1 0
# frecuencias relativa marginal por filas
Fr.rel <- round(prop.table(Tabla, margin = 1), 2)
Fr.rel
## width.rank
## color 21-25 25-29 29-33 33-...
## 2 0.08 0.75 0.17 0.00
## 3 0.20 0.65 0.14 0.01
## 4 0.39 0.55 0.07 0.00
## 5 0.41 0.55 0.05 0.00
# visualizemos los datos
azul <- c("cyan", "cyan4", "cyan1", "cyan3")
barplot(t(Fr.rel), beside = T, legend = T, ylim = c(0,1), col = azul,
main = "Diagrama de barras de frecuencias relativas acumuladas",
args.legend = list(x = "topright", cex = 0.55))
Veamos ahora las frecuencias relativas acumuladas:
# creamos la tabla
Fr.rel.acu <- round(apply(prop.table(Tabla, margin = 1), MARGIN = 1, FUN = cumsum), 2)
t(Fr.rel.acu)
## width.rank
## color 21-25 25-29 29-33 33-...
## 2 0.08 0.83 1.00 1
## 3 0.20 0.85 0.99 1
## 4 0.39 0.93 1.00 1
## 5 0.41 0.95 1.00 1
# visualizamos los resultados
barplot(Fr.rel.acu, beside = T, legend = T, col = azul,
main = "Diagrama de barras de frecuencias relativas acumuladas",
args.legend = list(x = "topleft", cex = 0.55))