La organización de los datos constituye la primera etapa en el tratamiento y análisis de cualquier estudio estadístico. Las tablas son un modo habitual de organización y presentación de los resultados, si bien con el desarrollo de los medios informáticos ha perdido la relevancia de tiempos anteriores.
Una tabla consiste en una ordenación, asignando a cada valor/valores su frecuencia (número de veces qué aparece) agrupada en clases o categorías mutuamente excluyentes.
Su elaboración require:
Elegir el tipo de variable a tabular.
Conocer el número de observaciones (casos).
Saber cuántas veces se repite cada valor dentro de cada categoría.
Las tablas de frecuencias están compuestas básicamente por los siguientes elementos:
La frecuencia absoluta \(n_i\). Consiste en contar el número de veces que aparece un determinado valor. La suma de las frecuencias absolutas es igual al número total de datos (\(N = n_1+n_2+n_3+...+n_n\)).
La frecuencia relativa \(f_i = \frac{n_i}{N}\). Es el cociente entre la frecuencia absoluta y el número total de datos. La suma de las frecuencias relativas es igual a 1 (o a 100 en caso de trabajar con porcentajes).
Si además nuestros datos poseen un orden interno (variables cualitativas ordinales), las tablas pueden incluir:
La frecuencia absoluta acumulada \(N_i= \sum^i_j n_i\). Equivale a la suma de las frecuencias absolutas de todos los valores inferiores o iguales al valor considerado.
La frecuencia relativa acumulada \(F_i = \frac{N_j}{N}\). Cociente entre la frecuencia acumulada de un determinado valor y el número total de datos. Al igual que la frecuencia relativa, se puede expresar en tantos por ciento.
La naturaleza de los datos (atributos, variables), es decir, el número de valores distintos y el número de observaciones influyen en el tipo de tabla de frecuencias. Podemos considerar dos tipos de tablas:
Tablas sobre datos no agrupados (variables cualitativas, variables cuantitativas discretas).
Tablas sobre datos agrupados en clases o intervalos (variables cuantitativas continuas).
Son apropiadas para el análisis de variables cualitativas o variables cuantitativas discretas. En el caso de variable cualitativas nominales, las tablas estadísticas suelen incluir cuántos valores diferentes aparecen (su frecuencia absoluta) y qué fracción del total representan (la frecuencia relativa).
Para ilustrar la elaboración de una tabla de frecuencias con datos no
agrupados sobre una variable cualitativa nominal, se creará un vector
con la función sample()
, que generará un conjunto de datos
aleatorios con reemplazo (argumento replace=TRUE
es decir,
se pueden repetir) en forma de caracteres (que corresponden a los
niveles), con un tamaño específico
(size=100
) y una probabilidad de aparición. En este caso,
tenemos 3 niveles o categorías (\(k\)=3) y 100 observaciones (\(n\)=100)
datos1 <- sample(c("María", "Pedro","Jaime"), # Caracteres a reproducir
size = 100, # Número de caracteres
replace = TRUE, # Se pueden repetir
prob=c(0.5,0.3,0.2)) # Probabilidades de aparición
La tabla con las frecuencias absolutas (\(n_i\)) se obtiene con la función
table()
. La función devuelve una tabla unidimensional con
dos filas, una con los niveles de la variable y otra con su frecuencia
absoluta.
table(datos1)
## datos1
## Jaime María Pedro
## 15 55 30
La tabla de frecuencias relativas (\(f_i\)) se calcula anidando la
función prop.table()
a la tabla calculada previamente,
¡no al vector original!. Su estructura es análoga a la
tabla anterior.
prop.table(table(datos1))
## datos1
## Jaime María Pedro
## 0.15 0.55 0.30
ATENCIÓN:
En caso de trabajar con un dataframe compuesto por diferentes
variables (atributos) y no por vectores, en la función
table()
sustituye el nombre del vector por el de la
variable, por ejemplo, table(df$var1)
Si convertimos esas tablas en vectores, podemos unirlos con la
función cbind()
, que puede visualizarse con
View()
.
datos1_ni <- table(datos1)
datos1_fi <- prop.table(table(datos1))
tabla1 <- cbind(datos1_ni, datos1_fi)
View(tabla1)
📝 ACTIVIDAD DE EVALUACIÓN CONTINUA TABLAS DE FRECUENCIA 1
Carga el dataframe zonas_verdes
.
Calcula las frecuencias relativas y absolutas de la variable
(atributo) barrio
. Recuerda que para llamar a una variable
concreta de un dataframe utilizamos la sintaxis
nombre_dataframe$nombre_variable
.
barrios_ni <- table(zonas_verdes$barrio)
barrios_fi <- prop.table(table(zonas_verdes$barrio))
tabla_barrio
.tabla_barrios <- cbind(barrios_ni, barrios_fi)
tabla_barrios
Preguna 1: ¿Cuál es el barrio que posee más zonas verdes? ¿Cúal es su frecuencia relativa?
Preguna 2: ¿Cuál es el barrio que posee menos zonas verdes? ¿Cúal es su frecuencia relativa?
Carga el dataframe alumnos_uc
.
Calcula las frecuencias relativas y absolutas de la variable
grupo_sanguineo
.
gs_ni <- table(alumnos_uc$grupo_sanguineo)
gs_fi <- prop.table(table(alumnos_uc$grupo_sanguineo))
tabla_grupo_sanguineo
.tabla_grupo_sanguineo <- cbind(gs_ni, gs_fi)
tabla_grupo_sanguineo
¿Cuál es el grupo sanguíneo con mayor número de personal? ¿Y el que tiene menos?
¿Cuántas personas tiene el grupo sanguíneo O-?
Las variables cualitativas ordinales, en este caso los resultados de una encuesta en la que se ha preguntado a los clientes de un supermercado si están de acuerdo en el cobro de una tasa por el uso de bolsas de plastico, tienen un orden natural (“escala de tipo Likert). Esto permite acumular observaciones, es decir, contar cuántas hay por debajo de un nivel, mediante el cálculo de las frecuencias acumuladas.
Como paso previo a la elaboración de la tabla, se crea un vector con los datos (hipotéticos) de la encuesta.
datos2 <- sample(c("1_Totalmente de acuerdo", "2_De acuerdo con matices","3_No estoy seguro","4_En desacuerdo con matices","5_Totalmente en desacuerdo"),
size = 100,
replace = TRUE,
prob=c(0.25,0.30,0.20,0.15,0.10))
El procedimiento de elaboración de este tipo de tabla es análogo al visto en el apartado anterior. Primero se crean los vectores que corresponden a las frecuencias absolutas y relativas, a las que se añadirán los vectores correspondientes a las frecuencias absolutas acumuladas y relativas acumuladas. Todos estos vectores se unirán finalmente en una única tabla.
datos2_ni <- table(datos2)
datos2_ni
## datos2
## 1_Totalmente de acuerdo 2_De acuerdo con matices
## 25 25
## 3_No estoy seguro 4_En desacuerdo con matices
## 23 11
## 5_Totalmente en desacuerdo
## 16
cumsum()
a la tabla anterior. Estas frecuencias
acumuladas informan de cuántas veces hemos observado un dato menor o
igual que él.datos2_Ni <- cumsum(table(datos2))
datos2_Ni
## 1_Totalmente de acuerdo 2_De acuerdo con matices
## 25 50
## 3_No estoy seguro 4_En desacuerdo con matices
## 73 84
## 5_Totalmente en desacuerdo
## 100
datos2_fi <- prop.table(table(datos2))
datos2_fi
## datos2
## 1_Totalmente de acuerdo 2_De acuerdo con matices
## 0.25 0.25
## 3_No estoy seguro 4_En desacuerdo con matices
## 0.23 0.11
## 5_Totalmente en desacuerdo
## 0.16
cumsum
a prop.table
y a
table
. Equivale a la fracción del total de estudiantes que
representa su frecuencia absoluta acumulada.datos2_Fi <- cumsum(prop.table(table(datos2)))
datos2_Fi
## 1_Totalmente de acuerdo 2_De acuerdo con matices
## 0.25 0.50
## 3_No estoy seguro 4_En desacuerdo con matices
## 0.73 0.84
## 5_Totalmente en desacuerdo
## 1.00
Finalmente, podemos crear una única tabla juntando todos los vectores anteriores
tabla2 <- cbind(datos2_ni,datos2_fi,datos2_Ni,datos2_Fi)
View(tabla2)
Para mejorar la presentación de la tabla tabla2, conviene cambiar los nombres de las variables a otros más legibles.
colnames(tabla2) <- c("ni","fi","Ni","Fi")
View(tabla2)
Para tabular una variable cuantitativa sin agrupar los datos se calculan las frecuencias absolutas y absolutas acumuladas, como en las variables ordinales, puesto que podemos ordenarla siguiendo el orden natural de los números reales. Como ejemplo vamos a considerar la temperatura máxima diaria medida en el observatorio de Reinosa durante el mes de julio de 2023.
Los datos originales se crean como un vector:
datos3 <- c(32,31,28,29,33,32,31,30,31,31,27,28,29,30,32,31,31,30,30,29,29,30,30,31,30,31,34,33,33,29,29)
A continuación se procede al cálculo de las diferentes frecuencias:
datos3_ni <- table(datos3) # Frecuencias absolutas
datos3_Ni <- cumsum(table(datos3)) # Frecuencias absolutas acumuladas
datos3_fi <- prop.table(table(datos3)) # Frecuencias relativas
datos3_Fi <- cumsum(prop.table(table(datos3))) # Frecuencias relativas acumuladas
Para crear una columna en la tabla con las etiquetas correspondientes a los valores originales procedemos de esta manera:
datos3_min <- min(datos3)
datos3_max <- max(datos3)
Valores_tem <- min(datos3):max(datos3)
A continuación se crea la tabla
tabla3 <- cbind(Valores_tem, datos3_ni,datos3_fi,datos3_Ni,datos3_Fi) # Tabla con todas las frecuencias (4 columnas)
colnames(tabla3) <- c("tem", "ni","fi","Ni","Fi")
View(tabla3)
Una vez realizado el ejemplo, o bien podemos borra todos los objetos que figuran en el Global Environment, o bien grabarlos como un
#rm(list=ls())
#save.image("tablas_frecuencias.RData")
Cuando el número de observaciones numéricas de una variable es muy elevado (normalmente una variable cuantitativa continua) es habitual agrupar el campo de variación en intervalos de clase, clases o categorías. Cada uno no incluye un único valor sino un conjunto de valores (\(a_i\)).
Cada una de estas clases tiene dos límites de clase \(L_{i1}-L_i\) , el inferior (\(L_{i1}\)) y el superior (\(Li\)).
La diferencia entre ambos límites se conoce como intervalo de clase.
Cada clase está representada por un único valor o marca de clase \(x_i\)
El proceso para su elaboración es el siguiente:
Decidir el número de intervalos o categorías.
Calcular la amplitud de cada intervalo.
Obtener los extremos de los intervalos.
Establecer las marcas de clase.
Supongamos que el vector datos4
contiene una variable
continua que hemos redondeado en unidades enteras.
datos4 <- c(3,15,24,28,33,35,38,42,43,38,36,34,29,25,17,7,34,36,39,44,31,26,20,11,13,22,27,47,39,37,34,32,35,28,38,41,48,15,32,13)
Podemos decidir el número de clases \(k\) de acuerdo a criterios subjetivos, o recurrir a procedimientos más objetivos para orientar la elección. Entre los más populares se encuentran los siguientes:
Regla de Nordcliffe o de la raíz cuadrada: \(k=\big\lceil \sqrt{n}\big\rceil\).
Regla de Sturges: \(k= \big\lceil 1+\log_{2}(n)\big\rceil.\)
Regla de Scott: Se determina primero la amplitud teórica \(A_S\) de las clases mediante la fórmula \[ A_S= 3.5\cdot \widetilde{s}\cdot n^{-\frac{1}{3}} \] (donde \(\widetilde{s}\) es la desviación típica del conjunto de datos), y entonces se toma \[ k=\left\lceil\frac{\max(x) -\min(x)}{A_S}\right\rceil. \]
Regla de Freedman-Diaconis: Se determina primero la amplitud teórica \(A_{FD}\) de las clases por medio de la fórmula \[ A_{FD}= 2 \cdot (Q_{0.75}-Q_{0.25}) \cdot n^{-\frac{1}{3}} \] (siendo \(Q_{0.75}-Q_{0.25}\) el rango intercuartílico), y entonces se toma de nuevo \[ k= \left\lceil \frac{\max(x) -\min(x)}{A_{FD}}\right\rceil.\]
Los dos primeros métodos sólo dependen del número de casos \(n\), mientras que los dos últimos tienen en cuenta también su dispersión**. No hay una regla mejor que las otras, es habitual la repetición del mismo procedimiento con métodos diferentes para poder revelar fenómenos diversos.
En primer lugar, implementaremos estos criterios manualmente; los
tres últimos también están implementadas en R a través de las funciones
nclass.Sturges()
, nclass.scott()
y
nclass.FD()
.
N <- length(datos4)
norcliffe <- ceiling(sqrt(N)) # Criterio de Norcliffe (raíz cuadrada)
sturgess <- ceiling(1+log(N,2)) # Criterio de Sturgess
# Criterio de Scott
As <- 3.5*sd(datos4)*N^(-1/3) # Amplitud teórica
scott <- ceiling(diff(range(datos4))/As)
scott
## [1] 4
# Criterio de Freedman-Diaconis
Afd <- 2*(quantile(datos4,0.75, names = FALSE)-quantile(datos4,0.25,names = FALSE))*N^(-1/3)
diaconis <- ceiling(diff(range(datos4))/Afd)
diaconis
## [1] 6
nclass.Sturges(datos4)
## [1] 7
nclass.scott(datos4)
## [1] 4
nclass.FD(datos4)
## [1] 6
El número de clases elegido será 6.
k <- 6
Uno vez calculado el número de intervalos (\(k\)), se debe calcular su amplitud. Ello requiere a su vez calcular el rango (\(R\), que es la diferencia entre el valor más alto y el valor más bajo), y dividirlo posteriormente por el número de clases \(k\).
El rango se calcula anidando la función diff()
sobre la
función range()
(esta última proporciona el valor mínimo y
el valor máximo de nuestros datos).
range(datos4)
## [1] 3 48
a <- ceiling(diff(range(datos4)) / k)
a
## [1] 8
Para ello necesitamos saber, inicialmente, el valor mínimo de los datos que manejamos.
L1 <- min(datos4)-1/2
L1
## [1] 2.5
En el ejemplo que se está trabajando, deben crearse 7 límites (que corresponden a 6 clases). Se pueden obtener mediante dos procedimientos:
(0:6)
y
posteriormente suma el límite inferior.L <- L1 + a*(0:6)
L
## [1] 2.5 10.5 18.5 26.5 34.5 42.5 50.5
L2 <- L1 + a
L3 <- L2 + a
L4 <- L3 + a
L5 <- L4 + a
L6 <- L5 + a
L7 <- L6 + a
Lbis <- c(L1,L2,L3,L4,L5,L6,L7)
Lbis # Son los límites de clase
## [1] 2.5 10.5 18.5 26.5 34.5 42.5 50.5
A partir de los límites de clase, podemos calcular la marca de cada clase (el teórico punto medio).
Como en el caso anterior, podemos calcularlos a través de dos procedimientos.
(0:5)
y
posteriormente suma la primer marca.X1 <- (L[1]+L[2])/2
X <- X1 + a*(0:5)
X
## [1] 6.5 14.5 22.5 30.5 38.5 46.5
X1 <- (L[1]+L[2])/2
X1
## [1] 6.5
X2 <- X1 + a
X3 <- X2 + a
X4 <- X3 + a
X5 <- X4 + a
X6 <- X5 + a
X <- c(X1,X2,X3,X4,X5,X6)
X
## [1] 6.5 14.5 22.5 30.5 38.5 46.5
En realidad, hasta este momento, lo único que ha sido definido
realmente es el número de categorías o clases, y las etiquetas de esas
categorias, es decir, la columna encabezada por \(L_{i1}-Li\). En esta última, los límites
pueden aparecer precedidos o seguidos de un corchete []
o
de un paréntesis ())
.
Un corchete al principio (final) indica que el primer (último) número está incluido dentro de ese intervalo. Se considera entonces un intervalo cerrado.
Un paréntesis al principio (final) indica que el primer (último) número está excluido de ese intervalo. Se considera entonces un intervalo abierto.
Ejemplo:
(3,8)
no incluye ni el 3 ni el 8 (pero si 4, 5, 6,
7).
[3,8]
incluye el 3 y el 8, además de los
intermedios.
(3,8]
incluye al 8, pero no al 3 (está abierto por
el 3 y cerrado por el 8).
[3,8)
incluye al 3, pero no al 8 (está cerrado por
el 3 y abierto por el 8).
Para rellenar el resto de columas de nuestra tabla es necesario
contar el número de veces que los valores originales caen dentro de cada
uno de las clases o categorías. Esta tarea la lleva a cabo la función
cut()
. Su sintaxis básica incluye los siguientes
argumentos:
cut()
Ejemplos:
particion <- cut(datos4,
breaks = L,
right = FALSE)
particion_2 <- cut(datos4,
breaks = 6,
right = FALSE)
particion_3 <- cut(datos4,
breaks = ceiling(sqrt(length(datos4))),
right = FALSE)
particion_4 <- cut(datos4,
breaks = L,
right = FALSE,
labels = c("Peq", "Norm", "Gran", "XGran", "Gigan","Monst")) # Podemos incluir etiquetas
particion_5 <- cut(datos4,
breaks = c(0,10,20,30,40,50),
right = FALSE,
labels = FALSE)
Se pueden comprobar las etiquetas correspondientes a cada una de esas
categorías, mediante la función levels()
aplicada al vector
particion_1. Igualmente, podemos verificar las marcas de clase.
etiquetas <- levels(particion) # Etiquetas con los límites de clase
etiquetas
## [1] "[2.5,10.5)" "[10.5,18.5)" "[18.5,26.5)" "[26.5,34.5)" "[34.5,42.5)"
## [6] "[42.5,50.5)"
marcas <- X # Etiquetas con las marcas de clase
marcas
## [1] 6.5 14.5 22.5 30.5 38.5 46.5
Al añadir a nuestra base de datos el vector generado por dicha función resulta en en un dataframe con 2 columnas, la primera con los datos originales y la segunda con la clase o categoría a la que pertenece.
datos4 <- cbind(datos4,particion)
datos4
## datos4 particion
## [1,] 3 1
## [2,] 15 2
## [3,] 24 3
## [4,] 28 4
## [5,] 33 4
## [6,] 35 5
## [7,] 38 5
## [8,] 42 5
## [9,] 43 6
## [10,] 38 5
## [11,] 36 5
## [12,] 34 4
## [13,] 29 4
## [14,] 25 3
## [15,] 17 2
## [16,] 7 1
## [17,] 34 4
## [18,] 36 5
## [19,] 39 5
## [20,] 44 6
## [21,] 31 4
## [22,] 26 3
## [23,] 20 3
## [24,] 11 2
## [25,] 13 2
## [26,] 22 3
## [27,] 27 4
## [28,] 47 6
## [29,] 39 5
## [30,] 37 5
## [31,] 34 4
## [32,] 32 4
## [33,] 35 5
## [34,] 28 4
## [35,] 38 5
## [36,] 41 5
## [37,] 48 6
## [38,] 15 2
## [39,] 32 4
## [40,] 13 2
Una vez obtenidas las etiquetas y las marcas de cada categoría, estamos en condiciones de crear la tabla de frecuencias sobre datos agrupados.
⚠️ ¡ATENCIÓN!: en este caso, las funciones
table()
yprop.table()
etc… no pueden aplicarse directamente al factor particion; requiere su transformación en vector.
Repetimos la secuencia de operaciones vista anteriormente.
datos4_ni <- as.vector(table(particion)) # Frecuencias absolutas
datos4_fi <- as.vector(prop.table(table(particion))) # Frecuencias relativas
datos4_Ni <- as.vector(cumsum(datos4_ni)) # Frecuencias absolutas acumuladas
datos4_Fi <- as.vector(cumsum(datos4_fi)) # Frecuencias relativas acumuladas
tabla4 <- data.frame(etiquetas,
marcas,
datos4_ni,
datos4_fi,
datos4_Ni,
datos4_Fi)
tabla4
## etiquetas marcas datos4_ni datos4_fi datos4_Ni datos4_Fi
## 1 [2.5,10.5) 6.5 2 0.050 2 0.050
## 2 [10.5,18.5) 14.5 6 0.150 8 0.200
## 3 [18.5,26.5) 22.5 5 0.125 13 0.325
## 4 [26.5,34.5) 30.5 11 0.275 24 0.600
## 5 [34.5,42.5) 38.5 12 0.300 36 0.900
## 6 [42.5,50.5) 46.5 4 0.100 40 1.000
También podemos cambiar los nombres de las etiquetas de algunas columnas de nuestra tabla de frecuencias. A continuación se cambiarán los nombres de la 3ª a la 6ª columna.
colnames(tabla4)[3:6] <- c("ni", "fi", "Ni", "Fi")
tabla4
## etiquetas marcas ni fi Ni Fi
## 1 [2.5,10.5) 6.5 2 0.050 2 0.050
## 2 [10.5,18.5) 14.5 6 0.150 8 0.200
## 3 [18.5,26.5) 22.5 5 0.125 13 0.325
## 4 [26.5,34.5) 30.5 11 0.275 24 0.600
## 5 [34.5,42.5) 38.5 12 0.300 36 0.900
## 6 [42.5,50.5) 46.5 4 0.100 40 1.000
Si quisiéramos recuperar posteriormente esta información, convendría exportar todos los objetos (como imagen del entorno de trabajo)
save.image(file = "tablas_frecuencias.RData")
📝 ACTIVIDAD DE EVALUACIÓN CONTINUA:
superficie
del dataframe
zonas_verdes
, comparando al menos lo resultados de dos de
los procedimientos para la obtención del número de clases comentados en
clase.sup_N <- length(zonas_verdes$superficie)
sup_norcliffe <- ceiling(sqrt(sup_N)) # Criterio de Norcliffe (raíz cuadrada)
sup_sturgess <- ceiling(1+log(sup_N,2)) # Criterio de Sturgess
# Criterio de Scott
sup_As <- 3.5*sd(zonas_verdes$superficie)*sup_N^(-1/3) # Amplitud teórica
sup_scott <- ceiling(diff(range(zonas_verdes$superficie))/sup_As)
sup_scott
# Criterio de Freedman-Diaconis
sup_Afd <- 2*(quantile(zonas_verdes$superficie,0.75, names = FALSE)-quantile(zonas_verdes$superficie,0.25,names = FALSE))*sup_N^(-1/3)
sup_diaconis <- ceiling(diff(range(zonas_verdes$superficie))/sup_Afd)
sup_diaconis
nclass.Sturges(zonas_verdes$superficie)
nclass.scott(zonas_verdes$superficie)
nclass.FD(zonas_verdes$superficie)
superficie
con la partición que consideres más
adecuada.sup_k <- 5
range(zonas_verdes$superficie)
sup_a <- round(diff(range(zonas_verdes$superficie)) / sup_k)
sup_a
sup_L1 <- min(zonas_verdes$superficie)-1/2
sup_L1
sup_L <- sup_L1 + sup_a*(0:5)
sup_L
sup_X1 <- (sup_L[1]+sup_L[2])/2
sup_X <- sup_X1 + sup_a*(0:4)
sup_X
sup_particion <- cut(zonas_verdes$superficie,
breaks = sup_L,
right = FALSE)
sup_etiquetas <- levels(sup_particion) # Etiquetas con los límites de clase
sup_etiquetas
sup_marcas <- sup_X # Etiquetas con las marcas de clase
sup_marcas
superficie <- cbind(zonas_verdes$superficie, sup_particion)
superficie
superficie_ni <- as.vector(table(sup_particion)) # Frecuencias absolutas
superficie_fi <- as.vector(prop.table(table(sup_particion))) # Frecuencias relativas
superficie_Ni <- as.vector(cumsum(superficie_ni)) # Frecuencias absolutas acumuladas
superficie_Fi <- as.vector(cumsum(superficie_fi)) # Frecuencias relativas acumuladas
tabla_sup <- data.frame(sup_etiquetas,
sup_marcas,
superficie_ni,
superficie_fi,
superficie_Ni,
superficie_Fi)
tabla_sup
colnames(tabla_sup)[1:6] <- c("Rangos de superficie", "marcas", "ni", "fi", "Ni", "Fi")
tabla_sup
peso
correspondientes a los dos géneros, masculino y
femenino, por separado. Compara los resultados y coméntalos
brevemente.masculino <- subset(alumnos_uc, genero == "Masculino", select = "peso")
femenino <- subset(alumnos_uc, genero == "Femenino", select = "peso")
nclass.Sturges(masculino$peso)
nclass.scott(masculino$peso)
nclass.FD(masculino$peso)
nclass.Sturges(femenino$peso)
nclass.scott(femenino$peso)
nclass.FD(femenino$peso)
A continuación, se deben salvar los cálculos realizados y posteriormente, eliminar todos los objetos para comenzar una nueva actividad
save.image("tablas_frecuencias.RData")
rm(list=ls())
De vez en cuando, también es conveniente limpiar la consola de órdenes previas.
cat("\014")