El dato ordinal presenta un orden natula que permite ir acumulando observaciones. Podremos contar frecuencias menores o iguales debajo de un tema en concreto.

Frecuencia acumulada

¿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.

Convertir datos cuantitativos en factores ordinales

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))