#Paquetes necesarios
#install.packages("moments")
suppressMessages(suppressWarnings(library(moments)))

1 Estadígrafos de tendencia central

1.0.1 Media aritmética

La clase de Bioestadística Fundamental delsemestre pasado, las notas obtenidas por los estudiantes en el primer examen fueron las siguientes:

5.0 4.5 4.0 3.5 2.8 1.5 4.8 5.0
4.3 4.0 4.0 3.0 4.2 3.8 3.9 2.4
5.0 4.9 4.7 4.5 1.7 4.5 4.1 4.0
data <- c(5.0, 4.5, 4.0, 3.5, 2.8, 1.5, 4.8, 5.0,
           4.3, 4.0, 4.0, 3.0, 4.2, 3.8, 3.9, 2.4,
           5.0, 4.9, 4.7, 4.5, 1.7, 4.5, 4.1, 4.0)
n <- length(data)

media_a <- mean(data)
media_a
## [1] 3.920833

1.0.2 Media ponderada

Las notas de la materia Bioestadística Fundamental son las siguientes:

Nota Créditos
5 3
4 2
2.2 4
2.1 4

Las notas que Camila obtuvo fueron las siguientes: 3.5, 2.8, 3.2, 4.5, 4.3, respectivamente.

notas <- c(5, 4, 2.2, 2.1)
pesos <- c(3 , 2 , 4 , 4 )

definitiva <- sum(pesos*notas)/sum(pesos)
definitiva
## [1] 3.092308

1.0.3 Mediana

Considere la siguiente muestra para calcular las medidas que siguen:

10 5.5 2 3.4 8.9
3.7 11.5 15 1.2 9.2
3.9 2.3 4.5 7.4 8.5
9.5 2.8 6.7 4.9 3.1
1.9 2.5 5.5 3.4 2.7

La mediana en este caso es 4.5, veamos:

datos <- c(10, 5.5, 2, 3.4, 8.9,
           3.7, 11.5, 15, 1.2, 9.2,
           3.9, 2.3, 4.5, 7.4, 8.5,
           9.5, 2.8, 6.7, 4.9, 3.1,
           1.9, 2.5, 5.5, 3.4, 2.7)

n_datos <- length(datos)
n_datos #Impar
## [1] 25
#ordenar los datos
datos_ord <- sort(datos, decreasing=F)
datos_ord
##  [1]  1.2  1.9  2.0  2.3  2.5  2.7  2.8  3.1  3.4  3.4  3.7  3.9  4.5  4.9  5.5
## [16]  5.5  6.7  7.4  8.5  8.9  9.2  9.5 10.0 11.5 15.0
#Hallar la posición
pos <- (n_datos+1)/2
pos
## [1] 13
#Hallar el valor
datos[pos]
## [1] 4.5
#Tambien se puede hallar con la funcion median
median(datos)
## [1] 4.5

1.0.4 Moda

La moda corresponde al dato que más se repite o que presenta mayor frecuencia absoluta.

table(datos)
## datos
##  1.2  1.9    2  2.3  2.5  2.7  2.8  3.1  3.4  3.7  3.9  4.5  4.9  5.5  6.7  7.4 
##    1    1    1    1    1    1    1    1    2    1    1    1    1    2    1    1 
##  8.5  8.9  9.2  9.5   10 11.5   15 
##    1    1    1    1    1    1    1

Para este caso tenemos dos valores modales, que son 3.4 y 5.5.

2 Estadígrafos de posición

2.0.1 Cuartiles

#Encontras las posiciones
q1 <- (n_datos + 1)/4
q2 <- (n_datos+1)/2
q3 <- (3*(n_datos+1))/4

cbind(q1,q2,q3)
##       q1 q2   q3
## [1,] 6.5 13 19.5
#Encontras los valores

v1 <- (datos_ord[6] + datos_ord[7])/2
v2 <- datos_ord[13]
v3 <- (datos_ord[19] + datos_ord[20])/2
cbind(v1, v2, v3)
##        v1  v2  v3
## [1,] 2.75 4.5 8.7
#Veamos con la función quantile
quantile(datos, probs = c(0.25, 0.5, 0.75))
## 25% 50% 75% 
## 2.8 4.5 8.5

2.0.2 Percentiles

Hallar los percentiles 10, 25,38 , 75 y 100 de los datos presentados previamente:

p10 <- (10*(n_datos+1))/100
p25 <- (25*(n_datos+1))/100
p38 <- (38*(n_datos+1))/100
p75 <- (75*(n_datos+1))/100
p100<- (100*(n_datos+1))/100

cbind(p10,p25,p38,p75,p100)
##      p10 p25  p38  p75 p100
## [1,] 2.6 6.5 9.88 19.5   26
#Solo los del 10, 38 y 100

vp10 <- (datos_ord[2]+datos_ord[3])/2
vp38 <- (datos_ord[9]+datos_ord[10])/2
vp100 <- datos_ord[25]

#El 100 no cuenta, entonces se pone n=25

cbind(vp10, vp38, vp100)
##      vp10 vp38 vp100
## [1,] 1.95  3.4    15
#Ahora con la función quantile

quantile(datos, probs = c(0.10,0.25,0.38,0.75,1))
##    10%    25%    38%    75%   100% 
##  2.120  2.800  3.436  8.500 15.000
#Nota: los resultados dependen de como se calcula el valor final, hay varias formas
#Si de desea consultarlas con ?quantile y en type están. 
#Otro ejemplo 

oj <- c(9,10,11,15,15,18,20,30,35,40)
noj <- length(oj)

quantile(oj, probs = c(0.10,0.2,0.5,1))
##  10%  20%  50% 100% 
##  9.9 10.8 16.5 40.0

3 Estadígrafos de dispersión

3.0.1 Rango

R <- max(datos) - min(datos)
R
## [1] 13.8

3.0.2 Rango intercuartílico

RIC <- v3-v1 #Nuevamente, este valor depende del método de interpolación.
RIC
## [1] 5.95
cuartiles <- quantile(datos, probs = c(0.25, 0.75))
RIC <- cuartiles[2] - cuartiles[1]
RIC
## 75% 
## 5.7
diff(quantile(datos, probs = c(0.25, 0.75)))
## 75% 
## 5.7
IQR(datos)
## [1] 5.7

3.0.3 Varianza

#Nota: se indicó previamente que es una muestra, por tanto:

varianza1 <- (1/(n_datos-1))*sum((datos-mean(datos))^2)
varianza1
## [1] 12.55667
varianza2 <- var(datos)
varianza2
## [1] 12.55667

3.0.4 Desviación estándar

desv <- sqrt(varianza1)
desv
## [1] 3.543539
desv1 <- sd(datos)
desv1
## [1] 3.543539

3.0.5 Coeficiente de variación

cv <- (desv/mean(datos))*100
cv
## [1] 63.27748

4 Estadígrafos de forma

4.0.1 Asimetría

Se simulan 1000 datos de una distribución gamma, dado que esta es asimétrica.

# Simular datos gamma con shape = 2 y rate = 0.5
set.seed(123) #Semilla de reproducibilidad
gamma <- rgamma(1000, shape = 2, rate = 0.5) #simukación de mil datos
gamma_me <- mean(gamma) #Media
hist_obj <- hist(gamma, breaks = 30,main = "Datos simulados de una Gamma", col = "pink")
abline(v = gamma_me, col = "red", lwd = 2)
text(x = max(hist_obj$breaks), y = max(hist_obj$counts), 
     paste("Media =", round(gamma_me, 2)), col = "red", pos = 2, cex = 1.2)

a <- 1/length(gamma) #(1/n)
suma   <- sum((gamma-mean(gamma))^3) #(la suma)
sd3    <- (sd(gamma))^3 #(la desviación al cubo)

asimetria <- (a*suma)/sd3
asimetria
## [1] 1.367437
asimetria_gamma=skewness(gamma)
asimetria_gamma
## [1] 1.369491

4.0.2 Curtosis

#Para los datos anteriores.
a <- 1/length(gamma) #(1/n)
suma   <- sum((gamma-mean(gamma))^4) #(la suma)
sd4    <- (sd(gamma))^4 #(la desviación al cubo)

kurtosis <- (a*suma)/sd4
kurtosis
## [1] 5.626564
#Para los datos anteriores.
kurtosis_gamma=kurtosis(gamma)
kurtosis_gamma
## [1] 5.637834
cbind(asimetria_gamma,kurtosis_gamma)
##      asimetria_gamma kurtosis_gamma
## [1,]        1.369491       5.637834

Veamos un ejemplo con una distribución normal estándar

# Simular datos gamma con shape = 2 y rate = 0.5
set.seed(123) #Semilla de reproducibilidad
normal <- rnorm(1000, mean =0, sd = 1) #simulación de mil datos
normal_me <- mean(normal) #Media
hist_obj <- hist(normal, breaks = 30,main = "Datos simulados de una Normal", col = "pink")
abline(v = normal_me, col = "red", lwd = 2)
text(x = max(hist_obj$breaks), y = max(hist_obj$counts), 
     paste("Media =", round(normal_me, 2)), col = "red", pos = 2, cex = 1.2)

kurtosis_normal <- kurtosis(normal)
asimetria_normal <-   skewness(normal)

cbind(kurtosis_normal, asimetria_normal)
##      kurtosis_normal asimetria_normal
## [1,]        2.925747       0.06529391
#Ejercicios vistos en clase

a1 <- c(15,20,30,10,14,8,9,11,12)
a2 <- c(3,4,5,6,7,6,5,4,3,2)
skewness(a1)
## [1] 1.402602
skewness(a2)
## [1] 0
kurtosis(a1)
## [1] 3.959472
kurtosis(a2)
## [1] 1.948148
#Manualmente se tiene lo siguiente:

#Para calcular la kurtosis y la asimetría y que de igual que en R, se usa la 
#varianza poblacional, sin embargo, si se tiene una muestra se usa la varianza
#muestral y si se tiene la población se usa la varianza poblacional. 

var_a2 <- sum((a2-mean(a2))^2)/length(a2)
sd_a2 <- sqrt(var_a2)

kur_a2 <- (((1/length(a2)*(sum((a2-mean(a2))^4)))))/(sd_a2^4)
kur_a2             
## [1] 1.948148
asi_a2 <- ((1/length(a2)*((sum((a2-mean(a2))^3)))))/(sd_a2^3)
asi_a2             
## [1] 0