#Paquetes necesarios
#install.packages("moments")
suppressMessages(suppressWarnings(library(moments)))
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
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
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
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.
#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
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
R <- max(datos) - min(datos)
R
## [1] 13.8
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
#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
desv <- sqrt(varianza1)
desv
## [1] 3.543539
desv1 <- sd(datos)
desv1
## [1] 3.543539
cv <- (desv/mean(datos))*100
cv
## [1] 63.27748
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
#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