Cuando se habla de estadística se debe comprender que mas allá de datos numéricos (estadistica descriptiva) y el estudio de los fenómenos aleatorios, el aspecto mas importante es la obtención de conclusiones basadas en los datos experimentales (inferencia estadística).
Para ello es necesario entender términos como población y muestra;
El objetivo de las tecnicas de muestreo es asegurar que cada observación en la población tiene una oportunidad igual e independiente conduciendo a las muestras aleatorias.
Con la inferencia sobre estas muestras se buscan características de la población denominadas parámetros, siendo un proceso inductivo el que los determina. Existiendo la posibilidad de un error, para limitar este error nos apoyamos en una confiabilidad que se mide en términos de probabilidad.
Los cuatro grandes problemas estadistícos se caracterizan por;
Canavos George C.(1998) PROBABILIDAD Y ESTADÍSTICA Aplicaciones y métodos. Editorial McGRAW-HILL
Es una tabla resumen en la que se disponen los datos divididos en grupos ordenados numéricamente y que se denominan clases o categorías.
La tabla de frecuencia de una variable cualitativa es simple, basta enumerar los diversos atributos con su respectiva frecuencia de ocurrencia (frecuencia absoluta).
\[f_i = \text{”Numero de veces que se repite una clase o atributo”}\]
Proyecto curricular al cual pertenecen los estudiantes de probabilidad y estadística del grupo 773-249
# definiendo la clase
Proyecto <- c("Ingenieria en Control y Automatizacion","Tecnologia en Electronica Industrial","Tecnologia en Electronica","Ingenieria en Telecomunicaciones")
class(Proyecto) # verificando el tipo de objeto
## [1] "character"
# definiendo las frecuencias
fi <- c(13,14,3,4)
class(fi)
## [1] "numeric"
(Tablaproyecto <- data.frame(Proyecto,fi))
Esta base de datos fue descargada de la pagina https://www.datos.gov.co/Salud-y-Protecci-n-Social/Banco-de-sangre-Hospital-General-de-Medell-n/65is-zhxx/about_data y se encuentran en los archivos del curso.
# leyendo el archivo con los datos
BSHGM20240123 <- read.csv("Banco_de_sangre__Hospital_General_de_Medell_n_20240123.csv")
class(BSHGM20240123)
## [1] "data.frame"
dim(BSHGM20240123)
## [1] 28961 11
# Resumen de las variables del objeto
str(BSHGM20240123)
## 'data.frame': 28961 obs. of 11 variables:
## $ ANO : int 2023 2023 2023 2023 2023 2023 2023 2023 2023 2023 ...
## $ REPORTE : int 1 1 1 1 1 1 1 1 1 1 ...
## $ FECHA.EXTRACCION: chr "12/28/2020 12:00:00 AM" "02/01/2020 12:00:00 AM" "02/01/2020 12:00:00 AM" "02/01/2020 12:00:00 AM" ...
## $ RH : chr "0+" "0+" "0+" "0+" ...
## $ BARRIO : chr "POPULAR 1" "20 DE JULIO" "20 DE JULIO" "20 DE JULIO" ...
## $ CIUDAD : chr "MEDELLIN" "MEDELLIN" "MEDELLIN" "MEDELLIN" ...
## $ EDAD : int 41 43 43 44 44 58 59 61 57 57 ...
## $ ESTATURA : num 0 1.74 1.74 1.6 1.6 1.66 1.5 1.63 1.75 1.75 ...
## $ FECHA.NACIMIENTO: chr "01/01/1982 12:00:00 AM" "03/12/1979 12:00:00 AM" "03/12/1979 12:00:00 AM" "04/21/1979 12:00:00 AM" ...
## $ PESO : int NA 80 80 86 86 81 57 63 65 65 ...
## $ SEXO : chr "M" "M" "M" "F" ...
# generando la tabla de frecuencias para el RH
(ej2trh <- table(BSHGM20240123$RH))
##
## 0- 0+ A- A+ AB-
## 2609 15492 856 7386 65
## AB+ B- B+ SIN INFORMACION
## 454 241 1857 1
sum(ej2trh)
## [1] 28961
dim(BSHGM20240123)[1]
## [1] 28961
table(BSHGM20240123[,4])
##
## 0- 0+ A- A+ AB-
## 2609 15492 856 7386 65
## AB+ B- B+ SIN INFORMACION
## 454 241 1857 1
# generando la tabla de frecuencias para el sexo
ej2ts <- table(BSHGM20240123$SEXO)
ej2ts
##
## F M SIN INFORMACION
## 16046 12914 1
Las tablas se componen de cinco columnas, donde es necesario calcular el tamaño de la muestra (\(n\)) o cantidad de observaciones obtenidas y el número de clases dado por el número de observaciones distintas que se obtuvieron en la muestra (\(m\)) y la tabla se forma con;
donde \(f_i\) cumple las condiciones \(0<f_i<n\) y \(\sum_{i=1}^mf_i=n\)
donde \(f_i\) cumple las condiciones \(0<h_i<n\) y \(\sum_{i=1}^mh_i=1\)
donde \(F_i\) cumple las condiciones \(0<F_i<n\), \(F_i-F_{i-1}=f_i\) y \(F_i<F_{i+1}\)
donde \(H_i\) cumple las condiciones \(0<H_i<n\), \(H_i-H_{i-1}=h_i\) y \(H_i<H_{i+1}\)
Número de asignaturas inscritas por semestre para una muestra de 50 estudiantes de la Universidad Distrital obteniendo los siguientes resultados
2 5 3 6 7 1 5 6 7 4 4 3 5 5 5 6 4 3 2 2 3 5 6 5 6 6 6 4 5 7 3 2 1 7 7 6 6 4 5 3 5 6 5 2 3 4 4 3 4 4
asign <- c(2,5,3,6,7,1,5,6,7,4,4,3,5,5,5,6,4,3,2,2,3,5,6,5,6,6,6,4,5,7,3,2,1,7,7,6,6,4,5,3,5,6,5,2,3,4,4,3,4,4)
n <- length(asign)
tabla <- table(asign)
(tej3 <- data.frame(as.numeric(names(tabla)),as.vector(tabla)))
h_i <- tej3$as.vector.tabla./n
F_i <- cumsum(tej3$as.vector.tabla.)
cumsum(h_i)
## [1] 0.04 0.14 0.30 0.48 0.70 0.90 1.00
H_i <- F_i/n
(tej3 <- cbind.data.frame(tej3,h_i,F_i,H_i))
colnames(tej3) <- c("Clase","f_i","h_i","F_i","H_i")
tej3
Analizando la edad en la base de datos en la variable edad que es una variable cuantitativa discreta se obtiene el siguiente resultado
table(BSHGM20240123$EDAD)
##
## 0 14 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
## 1 1 193 558 736 906 913 840 854 795 798 821 870 812 744 829 700 838 824 722
## 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
## 793 774 729 659 686 750 795 696 604 536 496 509 503 447 472 504 478 460 417 541
## 56 57 58 59 60 61 62 63 64 65 66 67 68 69 104
## 490 483 403 387 355 367 245 182 198 101 93 38 12 1 1
En este caso es necesario calcular el rango (\(R\)) que se calcula facilmente restando el valor minimo al maximo, y el número de intervalos para el cual existen diferentes metodos;
Con los resultados anteriores se define la amplitud como \(a=R/m\) y con este valor se calculan los limites de los intervalos comenzando desde el valor minimo y sumando la amplitud para obtener cada intervalo que seran las clases o categorias.
De igual forma se define la marca de clase (\(x_i\)) como el punto medio del intervalo, a estas dos columnas se le agregan las mismas que en las variables cuantitativas discretas.
El número de contagios por COVID-19 es de 39, acontinuación tenemos las edades correspondientes;
57 69 72 73 84 70 42 40 29 72 50 20 20 02 58 60 15 42 25 36 32 52 19 46 64 34 36 24 18 66 38 23 24 31 43 16 27 77 68 22
C19Boy <- c(57,69,72,73,84,70,42,40,29,72,50,20,2,58,60,15,42,25,36,32,52,19,46,64,34,36,24,18,66,38,23,24,31,43,16,27,77,68,33)
# calculando el tamaño de la muestra
(n <- length(C19Boy))
## [1] 39
# calculando el rango
max(C19Boy)
## [1] 84
min(C19Boy)
## [1] 2
(R <- max(C19Boy)-min(C19Boy))
## [1] 82
# calculando la amplitud
1+3.332*log10(n)
## [1] 6.301427
1+log2(n)
## [1] 6.285402
nclass.FD(C19Boy)
## [1] 4
nclass.scott(C19Boy)
## [1] 4
(m <- nclass.Sturges(C19Boy))
## [1] 7
# calculando la amplitud
R/m
## [1] 11.71429
(a <- trunc(R/m*10)/10) # tomar la amplitud exacta
## [1] 11.7
LI <- min(C19Boy)+0:(m-1)*a
LS <- LI+a
max(LS)
## [1] 83.9
max(C19Boy)
## [1] 84
max(LS)>=max(C19Boy) # verificando que el mayor valor sea mayor al maximo
## [1] FALSE
(a <- (trunc(R/m*10)+1)/10)
## [1] 11.8
LI <- min(C19Boy)+0:(m-1)*a
LS <- LI+a
max(LS)>=max(C19Boy)
## [1] TRUE
f_i <- rep(0,m)
for (i in 1:m) {
f_i[i]=length(C19Boy[C19Boy<LS[i]&C19Boy>=LI[i]])
}
sum(f_i)==n #verificando que se cuenten todos los datos
## [1] TRUE
h_i <- f_i/n
F_i <- cumsum(f_i)
H_i <- F_i/n
(tej4 <- cbind.data.frame(LI,LS,0.5*(LI+LS),f_i,h_i,F_i,H_i))
colnames(tej4) <- c("L_inf","L_sup","x_i","f_i","h_i","F_i","H_i")
tej4 <- round(tej4,4)
tej4
Construiremos la tabla para la edad y estatura
summary(BSHGM20240123$EDAD)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00 27.00 36.00 37.87 47.00 104.00 1
n <- length(na.omit(BSHGM20240123$EDAD))
m <- nclass.Sturges(BSHGM20240123$EDAD)
R <- max(na.omit(BSHGM20240123$EDAD))-min(na.omit(BSHGM20240123$EDAD))
a <- trunc(R/m)+1
LI <- min(na.omit(BSHGM20240123$EDAD))+0:(m-1)*a
LS <- LI+a
f_i <- rep(0,m)
for (i in 1:m) {
f_i[i]=length(na.omit(BSHGM20240123$EDAD)[na.omit(BSHGM20240123$EDAD)<LS[i]&na.omit(BSHGM20240123$EDAD)>=LI[i]])
}
h_i <- f_i/n
F_i <- cumsum(f_i)
H_i <- F_i/n
tej2ed <- cbind.data.frame(LI,LS,0.5*(LI+LS),f_i,h_i,F_i,H_i)
colnames(tej2ed) <- c("L_inf","L_sup","x_i","f_i","h_i","F_i","H_i")
tej2ed <- round(tej2ed,4)
tej2ed
summary(BSHGM20240123$ESTATURA)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.000 1.600 1.650 1.661 1.730 2.030 10
n <- length(na.omit(BSHGM20240123$ESTATURA))
m <- nclass.Sturges(BSHGM20240123$ESTATURA)
R <- max(na.omit(BSHGM20240123$ESTATURA))-min(na.omit(BSHGM20240123$ESTATURA))
a <- (trunc(R/m*100)+1)/100
LI <- min(na.omit(BSHGM20240123$ESTATURA))+0:(m-1)*a
LS <- LI+a
f_i <- rep(0,m)
for (i in 1:m) {
f_i[i]=length(na.omit(BSHGM20240123$ESTATURA)[na.omit(BSHGM20240123$ESTATURA)<LS[i]&na.omit(BSHGM20240123$ESTATURA)>=LI[i]])
}
h_i <- f_i/n
F_i <- cumsum(f_i)
H_i <- F_i/n
tej2es <- cbind.data.frame(LI,LS,0.5*(LI+LS),f_i,h_i,F_i,H_i)
colnames(tej2es) <- c("L_inf","L_sup","x_i","f_i","h_i","F_i","H_i")
tej2es <- round(tej2es,4)
tej2es
suppressMessages(suppressWarnings(library(fdth)))
(fdt(na.omit(BSHGM20240123$PESO),breaks="Sturges"))
## Class limits f rf rf(%) cf cf(%)
## [1.98,12.588) 2 0.00 0.01 2 0.01
## [12.588,23.195) 0 0.00 0.00 2 0.01
## [23.195,33.802) 0 0.00 0.00 2 0.01
## [33.802,44.41) 0 0.00 0.00 2 0.01
## [44.41,55.017) 1937 0.07 6.69 1939 6.70
## [55.017,65.625) 7631 0.26 26.37 9570 33.07
## [65.625,76.233) 9297 0.32 32.12 18867 65.19
## [76.233,86.84) 5717 0.20 19.75 24584 84.95
## [86.84,97.448) 2861 0.10 9.89 27445 94.83
## [97.448,108.06) 1033 0.04 3.57 28478 98.40
## [108.06,118.66) 326 0.01 1.13 28804 99.53
## [118.66,129.27) 98 0.00 0.34 28902 99.87
## [129.27,139.88) 29 0.00 0.10 28931 99.97
## [139.88,150.48) 6 0.00 0.02 28937 99.99
## [150.48,161.09) 3 0.00 0.01 28940 100.00
## [161.09,171.7) 1 0.00 0.00 28941 100.00
Las tablas de frecuencias nos permitieron resumir los datos que disponemos de una población, de forma que esta se pueda analizar de una forma sistemática y resumida. Para darnos cuenta de un solo vistazo de las características de la población resulta mas esclarecedor el uso de gráficos y diagramas.
El diagrama de barras nos permite ver en el eje horizontal las clases y en el eje vertical las frecuencias correspondientes.
barplot(fi, ylab = "Frecuencia absoluta", main = "Proyecto curricular", legend = Proyecto, col =rainbow(4))
barplot(ej2trh)
barplot(sort(ej2trh, decreasing = T), col = rainbow(2, s=0.4)) #el s nos permite controlar la tonalidad
El diagrama de sectores (tambien llamada tartas) Se divide un circulo en tantas porciones como clases existan, de modo que a cada clase le corresponde un arco de círculo proporcional a su frecuencia absoluta o relativa. El arco de cada porción se calcula usando regla de tres
\[x_i = 2\pi\frac{f_i}{n}\]
pie(fi, labels = Proyecto, main = "Proyecto")
pie(ej2trh, col = rainbow(length(ej2trh)), labels = NA, )
legend("topleft",rownames(ej2trh), fill = rainbow(length(ej2trh)), cex = 0.8)
En el caso discreto se trabaja exactamente igual que en con las variables cualitativas.
barplot(tej3$f_i, names.arg = tej3$Clase, col = c("red2","red4"), main ="Diagrama de barras", ylab = "cantidad de materias")
para el caso continuo se diferencia entre los diagramas diferenciales (se representan frecuencias absolutas o relativas) y integrales (Se disenan a partir de las frecuencias acumuladas).
El Histograma es un ejemplo de un diagrama diferencial que se construye a partir de la tabla de frecuencias, representando sobre cada intervalo, un rectángulo que tiene este segmento como base. El criterio para calcular la altura de cada rectangulo es el de mantener la proporcionalídad entre las frecuencias absolutas (o relativas) de cada intervalo y el área de los mismos.
# usando el comando hist()
hist(C19Boy, breaks = c(tej4$L_inf,tej4$L_sup[7]), xlim = c(0,100), ylim = c(0,10), col = c("darkblue","blue","lightblue"), main = "COVID-19 Boyaca", ylab = "Contagiados", xlab = "Edad")
# con la frecuencia relativa
hist(C19Boy, breaks = c(tej4$L_inf,tej4$L_sup[7]), xlim = c(0,100), ylim = c(0,0.02), col = c("magenta1","magenta2","magenta3","magenta4"), main = "COVID-19 Boyaca", ylab = "Proporcion de contagiados", xlab = "Edad", freq = FALSE)
El poligono de frecuencias consiste en unir mediante lineas los puntos generados por las parejas ordenadas dadas por las marcas de clase en el eje horizontal, con la frecuencias absolutas o relativas en el eje vertical, tambien se pueden graficar con rectas que unen los puntos del histograma que corresponden a las marcas de clase.
a <- tej4$L_sup[1]-tej4$L_inf[1]
m <- dim(tej4)[1]
plot(c(tej4$x_i[1]-a,tej4$x_i,tej4$x_i[m]+a),c(0,tej4$h_i,0), main = "Poligono de frecuencias relativas", ylab = "Proporcion", xlab = "Edad", type = "l", col = "blue", ylim = c(0,0.3), xlim = c(-10,100))
La ojiva muestra la curva de una función de distribución acumulativa. Los puntos trazados son el limite superior de la clase en el eje horizontal y la frecuencia relativa o absoluta acumulada correspondiente, unidos por lineas. Ademas se debe colocar que antes del valor minimo el valor acumulado es cero y despues del valor maximo el valor acumulado es el total de los datos o uno segun sea el caso.
plot(c(tej4$L_inf,tej4$L_sup[m]),c(0,tej4$H_i), main = "COVID-19 Boyaca", ylab = "Proporcion acumulada", xlab = "Edad", type = "l", col = "blue", ylim = c(0,1), xlim = c(0,100))
m <- dim(tej2es)[1]
hist(BSHGM20240123$ESTATURA, breaks = c(tej2es$L_inf,tej2es$L_sup[m]), xlim = c(0,2.5), ylim = c(0,15000), col = hcl.colors(4, palette = "Purples 3"), main = "Banco de Sangre Hospital General de Medellin", ylab = "Proporcion de donantes", xlab = "Estatura")