Al tener una muestra de datos numéricos, conviene calcular los estadísticos antes de realizar los agrupamientos, puesto que de lo contrario podemos perder información.
No obstante, hay situaciones en que los datos los obtenemos ya agrupados. En estos casos, aún sigue siendo posible calcular los estadísticos y utilizarlos como aproximaciones de los estadísticos “reales”, los cuales no conocemos.
La media \(\bar{x}\), la varianza \(s ^2\), la desviación estándar \(s\), de un conjunto de datos agrupados se calculan mediante las mismas fórmulas que para los datos no agrupados con la única diferencia de que sustituimos cada clase por su marca de clase y la contamos con su frecuencia.
Es decir, si tenemos \(k\) clases, con sus respectivas marcas \(X_1 ,\dots, X_k\) con frecuencias absolutas \(n_1, \dots n_k\) de forma que \(n = \sum n_j\). Entonces.
\[\bar{x} = \frac{\sum_{j=1}^{k}{n_j \times X_j}}{n}\]
\[\sigma^2 = \frac{\sum_{j=1}^{k}{n_j \times X_j^2}}{n} - \bar{x}^2\]
\[s^2 = \frac{\sum_{j=1}^{k}{n_j \times X_j^2}}{n-1} - \bar{x}^2\]
\[s^2 = \frac{n}{n-1} \times \sigma^2\]
\[s = \sqrt{s^2},\ \ \sigma = \sqrt{\sigma^2}\]
Ya que no es posible calcular la moda, se sustituye por el intervalo modal, que es la clase con mayor frecuencia.
En el caso en que un valor numérico fuera necesario, se tomaría su marca de clase.
Se conoce como intervalo crítico para la mediana, \([L_c, L_{c+1})\), al primer intervalo donde la frecuencia relativa acumulada sea mayor o igual que 0.5
Denotemos por \(n_c\) su frecuencia absoluta, por \(A_c = L_{c+1} - L_c\) su amplitud y por \(N_{c-1}\) la frecuencia absoluta acumulada del intervalo inmediatamente anterior (en caso de ser \([L_c, L_{c+1}) = [L_1, L_2)\), entonces \(N_{c-1}=0\)). Entonces, \(M\) será una aproximación para la mediana de los datos “reales” a partir de datos agrupados.
\[M = L_c + A_c \times \frac{\frac{n}{2}-N_{c-1}}{n_c}\]
La fórmula anterior nos permite aproximar el cuantil \(Q_p\) de los datos “reales” a partir de los datos agrupados:
\[Q_p = L_p + A_p \times \frac{p \times n - N_{p-1}}{n_p}\]
donde el intervalo \([L_p, L_{p+1})\) denota el primer intervalo cuya frecuencia relativa acumulada es mayor o igual a \(p\).
Vamos a seguir trabajando con nuestra variable cw y, esta vez, lo que haremos será calcular los estadísticos de la variable con los datos agrupados y, para acabar, la mediana y algunos cuantiles.
crab = read.table("https://raw.githubusercontent.com/joanby/r-basic/master/data/datacrab.txt", header = TRUE, stringsAsFactors = TRUE, sep = " ")
cw = crab$width
TablaFrecs = function(x,k,A,p){
L = min(x)-p/2+A*(0:k)
x_cut = cut(x, breaks = L, right = FALSE, include.lowest = TRUE)
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 = FALSE){
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
}
k = nclass.FD(cw)
A = diff(range(cw))/k
L1 = min(cw) #- (0.5 * 0.1)
L = L1 + (0:k)*A
tabla = TablaFrecs.L(cw, L, V = TRUE)
tabla
## intervals mc Fr.abs Fr.cum.abs Fr.rel Fr.cum.rel
## 1 [21,22) 21.48077 1 1 0.0058 0.0058
## 2 [22,22.9) 22.44231 7 8 0.0405 0.0463
## 3 [22.9,23.9) 23.40385 14 22 0.0809 0.1272
## 4 [23.9,24.8) 24.36538 21 43 0.1214 0.2486
## 5 [24.8,25.8) 25.32692 35 78 0.2023 0.4509
## 6 [25.8,26.8) 26.28846 27 105 0.1561 0.6070
## 7 [26.8,27.7) 27.25000 25 130 0.1445 0.7515
## 8 [27.7,28.7) 28.21154 20 150 0.1156 0.8671
## 9 [28.7,29.7) 29.17308 12 162 0.0694 0.9365
## 10 [29.7,30.6) 30.13462 8 170 0.0462 0.9827
## 11 [30.6,31.6) 31.09615 0 170 0.0000 0.9827
## 12 [31.6,32.5) 32.05769 2 172 0.0116 0.9943
## 13 [32.5,33.5] 33.01923 1 173 0.0058 1.0001
TOT = length(cw)
TOT
## [1] 173
anchura.media = round(sum(tabla$Fr.abs*tabla$mc)/TOT,3)
anchura.media
## [1] 26.288
v = (sum(tabla$Fr.abs * tabla$mc^2) / TOT) - anchura.media^2
varianza = round(v,3)
varianza
## [1] 4.535
ds = sqrt(varianza)
ds
## [1] 2.129554
El intervalo modal es el intervalo que más se repite.
I.modal = tabla$intervals[which(tabla$Fr.abs == max(tabla$Fr.abs))]
I.modal
## [1] "[24.8,25.8)"
Por lo tanto, con los datos de los que disponemos, podemos afirmar que la anchura de los cangrejos de la muestra es de 26.29 mm, con una desviación estándar de unos 4.54 mm, que el grupo de anchuras más numeroso era el de \([24.85,\ 26.15)\).
I.critico = tabla$intervals[which(tabla$Fr.cum.rel >= 0.5)]
I.critico[1]
## [1] "[25.8,26.8)"
n = TOT
Lc = L[6]
Lc.pos = L[7]
Ac = L[7]-L[6]
#tabla$intervals[6] = "[25.8,26.8)"
Nc.ant = tabla$Fr.cum.abs[5]
nc = tabla$Fr.abs[6]
M = Lc + Ac * ((n/2)-Nc.ant)/nc
M
## [1] 26.1104
median(cw)
## [1] 26.1
También podemos hacer aproximaciones de los cuantiles.Hemos creado una función aprox.quantile.p para no tener que copiar la operación cada vez que queramos calcular un cuantil aproximado.
aprox.quantile.p = function(Lcrit, Acrit, n, p, Ncrit.ant, ncrit){
round(Lcrit+Acrit*(p*n-Ncrit.ant)/ncrit,3)
}
aprox.quantile.p(Lc, Ac, n, 0.25, Nc.ant, nc) #Primer cuartil
## [1] 24.57
aprox.quantile.p(Lc, Ac, n, 0.75, Nc.ant, nc)
## [1] 27.651
summary(cw)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 21.0 24.9 26.1 26.3 27.7 33.5
notas = c(6,0,3,3,8,2,7,9,10,0,8,3,1,10,4,5,10,6,10,8,7,10,5,
5,7,9,5,9,5,5,6,2,9,7,5,10,5,6,4,0,10,2,6,1,9,0,
9,9,7,6,4,8,9,8,9,4,1,9,8,6,0,9,10,2,6,0,5,9,
10,3,6,4,3,9,7,3,4,2,1,10,7,6,10,9,0,0,10,2,10,2,1,
5,2,3,0,8,4,0,7)
# Definimos vector de extremos
L = c(0,5,7,8,10)
# Definimos notas1 como el resultado de la codificación en intervalos utilizados como
#etiquetas los propios intervalos
notas1 = cut(notas, breaks = L, right = FALSE, include.lowest = TRUE)
notas1
## [1] [5,7) [0,5) [0,5) [0,5) [8,10] [0,5) [7,8) [8,10] [8,10] [0,5)
## [11] [8,10] [0,5) [0,5) [8,10] [0,5) [5,7) [8,10] [5,7) [8,10] [8,10]
## [21] [7,8) [8,10] [5,7) [5,7) [7,8) [8,10] [5,7) [8,10] [5,7) [5,7)
## [31] [5,7) [0,5) [8,10] [7,8) [5,7) [8,10] [5,7) [5,7) [0,5) [0,5)
## [41] [8,10] [0,5) [5,7) [0,5) [8,10] [0,5) [8,10] [8,10] [7,8) [5,7)
## [51] [0,5) [8,10] [8,10] [8,10] [8,10] [0,5) [0,5) [8,10] [8,10] [5,7)
## [61] [0,5) [8,10] [8,10] [0,5) [5,7) [0,5) [5,7) [8,10] [8,10] [0,5)
## [71] [5,7) [0,5) [0,5) [8,10] [7,8) [0,5) [0,5) [0,5) [0,5) [8,10]
## [81] [7,8) [5,7) [8,10] [8,10] [0,5) [0,5) [8,10] [0,5) [8,10] [0,5)
## [91] [0,5) [5,7) [0,5) [0,5) [0,5) [8,10] [0,5) [0,5) [7,8)
## Levels: [0,5) [5,7) [7,8) [8,10]
#Definimos marcas de clase
MC = (L[1:length(L)-1]+L[2:length(L)])/2
#Definimos notas2 como el resultado de la codificación en intervalos utilizando como
#etiquetas las marcas de clase
notas2 = cut(notas, breaks = L, labels = MC, right = FALSE, include.lowest = TRUE, notas2)
notas2
## [1] 6 2.5 2.5 2.5 9 2.5 7.5 9 9 2.5 9 2.5 2.5 9 2.5 6 9 6 9
## [20] 9 7.5 9 6 6 7.5 9 6 9 6 6 6 2.5 9 7.5 6 9 6 6
## [39] 2.5 2.5 9 2.5 6 2.5 9 2.5 9 9 7.5 6 2.5 9 9 9 9 2.5 2.5
## [58] 9 9 6 2.5 9 9 2.5 6 2.5 6 9 9 2.5 6 2.5 2.5 9 7.5 2.5
## [77] 2.5 2.5 2.5 9 7.5 6 9 9 2.5 2.5 9 2.5 9 2.5 2.5 6 2.5 2.5 2.5
## [96] 9 2.5 2.5 7.5
## Levels: 2.5 6 7.5 9
media.notas = sum(as.vector(table(notas1)) * as.numeric(as.vector(levels(notas2)))) / length(notas)
media.notas
## [1] 5.843434
mean(notas)
## [1] 5.535354
fr.abs = as.vector(table(notas1))
mc = as.numeric(as.vector(levels(notas2)))
var.notas = (sum(fr.abs * mc^2)/ length(notas)) - media.notas^2
sqrt(var.notas)
## [1] 2.797588
sd(notas)
## [1] 3.29289
I.modal = levels(notas1)[which(fr.abs == max(fr.abs))]
I.modal
## [1] "[0,5)"
fr.cum = cumsum(prop.table(table(notas1)))
I.critico = fr.cum[which(fr.cum >= 0.5)][1]
I.critico
## [5,7)
## 0.5757576
n = length(notas)
Lc = L[2]
Lc.pos = L[3]
Ac = Lc.pos - Lc
Nc.ant = fr.abs[1]
nc = fr.abs[2]
M = Lc + Ac * ((n/2) - Nc.ant)/nc
M
## [1] 6.25
median(notas)
## [1] 6
aprox.quantile.p(Lc, Ac, n, 0.75, Nc.ant, nc)
## [1] 8.725
quantile(notas, 0.75)
## 75%
## 9