Agrupando datos con R

Al agrupar datos, convertimos variable cuantitativa en un factor cuyos niveles son las clases en que ha sido dividida e identificamos cada dato con su clase.

A la hora de etiquetar los niveles, podemos elegir 3 codificaciones.

La función cut

Esta función es la básica en R para agrupar un vector de datos numéricos y codificar sus valores con clases a las que pertenecen.

su sintaxis básica es:

cut(x, breaks=..., labels=...,right=...)

Forma una lista de los elementos del vector original, codificados con las etiquetas de las clases a las que pertenecen. Bien puede ser un factor o un vector.

Estudiando datos agrupados

Frecuencias

Una primera consideración es tratar las clases obtenidas en el paso anterior como los nivele de una variable ordinal y calcular sus frecuencias.

  • La frecuencia absoluta de una clase será el número de datos originales que pertenecen a la clase.
  • La frecuencia absoluta acumulada de una clase será el número de datos que pertenecen a dicha clase o alguna de las anteriores.

Tabla de frecuencias

Normalmente, las frecuencias de un conjuntos de datos agrupados se suele representar en tablas.

Intervalos \(X_j\) \(n_j\) \(N_j\) \(f_j\) \(F_j\)
\([L_1, L_2)\) \(X_1\) \(n_1\) \(N_1\) \(f_1\) \(F_1\)
\([L_2, L_3)\) \(X_2\) \(n_2\) \(N_2\) \(f_2\) \(F_2\)
\(\dots\) \(\dots\) \(\dots\) \(\dots\) \(\dots\) \(\dots\)
\([L_k, L_{k+1})\) \(X_k\) \(n_k\) \(N_k\) \(f_k\) \(F_k\)

La función hist

El cálculo de las frecuencias con R podemos hacerlo mediante las funciones table, prop.table y comsum.

También podemos utilizar la función hist, que internamente genera una list cuya componente count es el vector de frecuencias absolutas de las clases. Por consiguiente, para calcular estas frecuencias, podemos utilizar la sintaxis.

hist(x, breaks=..., right=FLASE, plot=FALSE)$count

Conviene igualar el parámetro breaks al vector de los extremos del intervalo debido a que cut y hist hacen uso de diferentes métodos para agrupar los datos cuando se especifica solamente el número \(k\) de clases.

El resultado de hist incluye la componente mids que contiene el vector de puntos medios de los intervalos, es decir, nuestras marcas de clase.

Tabla de frecuencias con R

Podemos automatizar el cálculo de la ya tan mencionada tabla de frecuencias, utilizando las dos funciones que mostraremos a continuación.

La primera sirve en el caso en que vayamos a tomar todas las clases de la misma amplitud. Sus parámetros son: \(x\), el vector con los datos cuantitativos; \(k\), el número de clases; \(A\), su amplitud; y \(p\), la precisión de los datos (p = 1 si la precisión son unidades, p = 0.1 si la precisión son décimas de unidad…).

Por su parte, la segunda es para cuando conocemos los extremos de las clases. Sus parámetros son: \(x\), el vector con los datos cuantitativos; \(L\), el vector de extremos de clases; y \(V\), un valor lógico, que ha de ser TRUE si queremos que el último intervalo sea cerrado, y FALSE en caso contrario.

Funciones

TablaFrecs = function(x,k,A,p){
  L = min(x)-p/2+A*(0:k)
  x_cut = cut(x, breaks = L, right = FALSE)
  intervals = levels(x_cut)
  mc = (L[1]+L[2])/2+A*(0:(k-1))
  Fr.abs = as.vector(table(x_cut))
  Fr.rel = round(Fr.abs/length(x),4)
  Fr.cum.abs = cumsum(Fr.abs)
  Fr.cum.rel = cumsum(Fr.rel)
  tabla = data.frame(intervals, mc, Fr.abs, Fr.cum.abs, Fr.rel, Fr.cum.rel)
  tabla
}
TablaFrecs.L = function(x,L,V){
  x_cut = cut(x,  breaks = L, right = FALSE, include.lowest = V)
  intervals = levels(x_cut)
  mc = (L[1:(length(L)-1)] + L[2:length(L)])/2
  Fr.abs = as.vector(table(x_cut))
  Fr.rel = round(Fr.abs/length(x),4)
  Fr.cum.abs = cumsum(Fr.abs)
  Fr.cum.rel = cumsum(Fr.rel)
  tabla = data.frame(intervals,mc,Fr.abs,Fr.cum.abs,Fr.rel,Fr.cum.rel)
  tabla
}

Ejemplo

La tabla de frecuencias de la longitud de los pétalos de iris es:

petals = iris$Sepal.Length

TablaFrecs(x = petals, k = nclass.FD(petals), A = 0.5, p = 0.1)
##     intervals  mc Fr.abs Fr.cum.abs Fr.rel Fr.cum.rel
## 1 [4.25,4.75) 4.5     11         11 0.0733     0.0733
## 2 [4.75,5.25) 5.0     34         45 0.2267     0.3000
## 3 [5.25,5.75) 5.5     28         73 0.1867     0.4867
## 4 [5.75,6.25) 6.0     26         99 0.1733     0.6600
## 5 [6.25,6.75) 6.5     31        130 0.2067     0.8667
## 6 [6.75,7.25) 7.0     12        142 0.0800     0.9467
## 7 [7.25,7.75) 7.5      7        149 0.0467     0.9934
## 8 [7.75,8.25) 8.0      1        150 0.0067     1.0001