Jhon Sebastian Vargas Fernandez
Ing. Quimica
Carlos Daniel Albarracin Cruz
Ing. Sistemas
Juan Sebastian Parra Cardenas
Ing. Electrica
Juan Diego Blanco Segura
Ing. Quimica
Santiago Cubides
Ing. Sistemas

INTRODUCCIÓN

En esta parte se desarrollará todo el análisis decriptivo numérico, esto significa que solo se puede realizar para variables cuantitativas.

Aquí se tratará con todas las medidas que permitirán describir un conjunto de datos. Estas son:

  1. Medidas de Tendencia Central
    1. Promedio
    2. Mediana
    3. Moda
  2. Medidas de Variabilidad
    1. Rango
    2. Varianza
    3. Desviación estándar
    4. El Coeficiente de Variación
  3. Medidas de Posición
    1. Cuartiles
    2. Percentiles
    3. Diagrama de Caja (elaboración)
  4. Medidas de Forma
    1. Asimetría
    2. Curtosis

1. Medidas de Tendencia Central

Primero se tomará una muestra de 1000 registros de la base de datos diamantes del paquete datos

Esta muestra aleatoria se usa tomando una semilla con valor de 258.

set.seed(258)
datos.d <- sample_n(diamantes, size = 1000,replace = FALSE)
str(datos.d)
## tibble [1,000 × 10] (S3: tbl_df/tbl/data.frame)
##  $ precio     : int [1:1000] 17068 8917 2738 5242 11365 2527 1774 1952 5939 9333 ...
##  $ quilate    : num [1:1000] 2.12 1.54 0.77 0.9 1.03 0.74 0.54 0.7 1.01 1.24 ...
##  $ corte      : Ord.factor w/ 5 levels "Regular"<"Bueno"<..: 5 4 5 5 5 4 5 3 4 5 ...
##  $ color      : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 6 6 5 2 3 2 3 7 1 3 ...
##  $ claridad   : Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 4 4 4 5 8 2 5 4 3 5 ...
##  $ profundidad: num [1:1000] 62.7 61.7 62 61.3 61.3 61.3 61.1 61.1 62.3 62.2 ...
##  $ tabla      : num [1:1000] 56 59 56 57 56 59 57 61 60 55 ...
##  $ x          : num [1:1000] 8.16 7.4 5.86 6.24 6.53 5.83 5.28 5.64 6.4 6.89 ...
##  $ y          : num [1:1000] 8.24 7.34 5.89 6.2 6.55 5.78 5.3 5.69 6.35 6.87 ...
##  $ z          : num [1:1000] 5.14 4.55 3.64 3.81 4.01 3.56 3.23 3.46 3.97 4.28 ...
head(datos.d,c(5,5))
## # A tibble: 5 × 5
##   precio quilate corte   color claridad
##    <int>   <dbl> <ord>   <ord> <ord>   
## 1  17068    2.12 Ideal   I     VS2     
## 2   8917    1.54 Premium I     VS2     
## 3   2738    0.77 Ideal   H     VS2     
## 4   5242    0.9  Ideal   E     VS1     
## 5  11365    1.03 Ideal   F     IF

Para obtener la media, la mediana y la moda se usan las funciones mean y median del paquete base de r y fmv del paquete modeest para encontrar la moda.

La fórmula para la media y la mediana son:

\[ \bar{x} = \frac{1}{n}\sum_{i =1}^n{x_i} \] La fórmula para posición en donde está la mediana, \(M\) es:

\[ M = \begin{cases} \ x_{(\frac {n+1}{2})} & \text{si n es impar} \\ \frac {x_{(\frac {n}{2})}+x_{(\frac {n+1}{2})}}{2} & \text{si n es par} \end{cases} \] La moda es el dato que más repite o el que tiene mayor frecuencia. Puede pasar que ewxistan más de una moda.

Ejemplo

Encontrar las medidas de tendencia central para la variable precio

## El promedio del precio de los diamantes en la muestra es: 4159.333
## La mediana del precio es: 2564.5
##  la moda(s) del precio de los diamanmtes es: 911

Nota para la mediana se ordenan los datos y se aplica la fórmula

attach(datos.d)
o <- sort(precio)
(o[1000/2] +o[(1000/2+1)])/2
## [1] 2564.5

2. Medidas de variabilidad

Estas medidas cuantifican qué tan dispersos se encuentran los datos con respecto a una medida de tendencia central; la medida de tendencia central más usada es el promedio. La primera medida que se va a estudiar es el rango que la medida más simple y no tiene en cuenta el promedio, la mediana o la moda.

Se define como la diferencia entre el dato mayor y el dato menor.

\[ \small Rango = \text {dato mayor - dato menor} \] La varianza es la medida más usada para medir la dispersión de los datos. Se hace con respecto a la media y se simboliza con la letra \(S^2\) y su fórmula es:

\[ \small S^2 = \frac {1}{n-1}\sum_{i =1}^n{(x_i-\bar{x})^2} \] La desviación estándar es la raíz cuadrada de la varianza, su símbolo es \(S\).

\[ \small S = \sqrt {S^2} \] Por último, se define el coeficiente de variació como el cociente entre la desviación estandar y el promedio.

\[ \small CV = \frac {s}{\bar{x}}*100 \]

Ejemplo

Se encontrarán las medidas de variabilidad para el precio de los diamantes en la base de datos.

rango.d <- max(precio)-min(precio)

cat("El rango del precio de los diamantes es:", rango.d)
## El rango del precio de los diamantes es: 18374
varianza.d <- var(precio)

cat("la varianza del precio de los diamantes es:", varianza.d)
## la varianza del precio de los diamantes es: 18008012
desv_est.d <- sd(precio)

cat("la desviación estándar del precio de los diamantes es:",desv_est.d)
## la desviación estándar del precio de los diamantes es: 4243.585
coef_var.d <- (desv_est.d/promedio.d)*100

cat("El coeficiente de variación del precio de los diamantes es:", coef_var.d)
## El coeficiente de variación del precio de los diamantes es: 102.0256

3. Medidas de posición

Cuantiles

Cuartiles:Dividen un conjunto de datos ordenado en 4 partes iguales y lo que indica es la posición del datos que tiene hacia atrás un % de la información. Se simbolizan: \(Q_1, Q_2, Q_3\) El \(Q_i \text{, } i = 1,2,3\) es la posición del datos ordenado que tiene hacia atrás el $  100%$ de la información y es superado por el \(1-\frac {i}{4}\ 100\%\)

Percentiles

Percentiles Dividen un conjunto de datos ordenado en 100 partes iguales y lo que indica es la posición del datos que tiene hacia atrás un porcentaje de la información. Se simbolizan: \(P_1, P_2,...,P_{100}\)

El \(P_i \text{, } i = 1,2,3..,100\) es la posición del datos ordenado que tiene hacia atrás el $  100%$ de la información y es superado por el \((1-\frac {i}{100})\ 100\%\)

La fórmula para la posición del percentil \(k\):

\[ P_k = \frac {(n+1)k}{100}, \\ \] donde \(k\) es la posición y \(n\) el número de datos.

Ejemplo:

Encontrar los percentiles, 10, 25, 30, 50, 75 y 80 del precio de los diamantes en la base de datos datos.d

percent <- quantile(x = datos.d$precio, probs = c(0.1,0.25,0.3,0.5,0.75,0.8), type = 6)

percent
##    10%    25%    30%    50%    75%    80% 
##  670.1 1000.5 1125.3 2564.5 5741.5 6617.6

La formula para encontrar la posición de un percentil

Ejemplo con la fórmula:

Encontrar el percentil 25.

Primero encontramos la posición del percentil 25

n <- length(datos.d$precio)
pos.25 <- (n+1)*25/100
cat("La posicion en donde se encuetra el percentil 25 es:",pos.25)
## La posicion en donde se encuetra el percentil 25 es: 250.25

Se observa que el percentil 25 esta en la posición 250.25 , es decir, a 0.25 de la distancia entre el 251 y el 250 de los datos ordenados.

ord <- sort(datos.d$precio)

ord[250] + 0.25*(ord[251] - ord[250])
## [1] 1000.5
pos.80 <- (120+1)*80/100

pos.80
## [1] 96.8
ord <- sort(datos.d$precio)

ord[96] + 0.8*(ord[97] - ord[96])
## [1] 667.6

Diagrama de caja

El box-plot se construye usando 5 números que son: El \(Q_1,Q_2,Q_3\) , ademas del límite inferior y limite superior. para encontrar estos limites se utiliza el rango intercuartílico es la diferencia entre el tercero y el primer cuartil \(RI = Q_3 - Q_1\) y las formulas para esto limites son: \[ li = q_1- 1*RI \\ ls = q_3 + 1.5*RI \]

q1 <- quantile(datos.d$precio,probs = 0.25);q1
##    25% 
## 1001.5
q2 <- quantile(datos.d$precio,probs = 0.5);q2
##    50% 
## 2564.5
q3 <- quantile(datos.d$precio,probs = 0.75);q3
##    75% 
## 5732.5
ri <- q3 - q1;ri # rango intercuartílico
##  75% 
## 4731
li <- q1 - 1.5*ri;li #limite inferior
##   25% 
## -6095
ls <- q3 + 1.5*ri;ls #limite superior
##   75% 
## 12829

Así, para el precio de los diamantes el diagrama de caja es:

boxplot(datos.d$precio, col="skyblue",horizontal = TRUE,
        main = "Diagrama de caja para el precio de los diamantes", xlab="precio de los diamantes")

hist(datos.d$precio, main = "Histograma del precio de los diamantes", col = "coral")

4. Medidas de forma.

Las siguientes son medidas necesarios para la realizacion de los distintos coeficientes de asimetria y curtosis.

media <- mean(datos.d$precio);
cat("La media para el precio de los diamantes es:",media)
## La media para el precio de los diamantes es: 4159.333
mediana <- median(datos.d$precio);
cat("La mediana para el precio de los diamantes es:",mediana)
## La mediana para el precio de los diamantes es: 2564.5
moda <- mfv(datos.d$precio);
cat("La moda para el precio de los diamantes es:",moda)
## La moda para el precio de los diamantes es: 911
desv <- sd(datos.d$precio);
cat("La desv para el precio de los diamantes es:",desv)
## La desv para el precio de los diamantes es: 4243.585

Coeficiente de asimetria

La asimetría es la medida que indica la simetría de la distribución de una variable respecto a la media aritmética, sin necesidad de hacer la representación gráfica. Los coeficientes de asimetría indican si hay el mismo número de elementos a izquierda y derecha de la media.

\[ g_1 = \frac{\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^3}{\left(\sqrt{\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^2}\right)^3} \]

asimet <- skewness(x = datos.d$precio);
cat("El Coeficiente de asimetria del precio de los diamantes es:",asimet) 
## El Coeficiente de asimetria del precio de los diamantes es: 1.626849

Coeficiente de curtosis

La curtosis (o apuntamiento) es una medida de forma que mide cuán escarpada o achatada está una curva o distribución.

Este coeficiente indica la cantidad de datos que hay cercanos a la media, de manera que a mayor grado de curtosis, más escarpada (o apuntada) será la forma de la curva. \[ g_2 = \frac{\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^4}{\left(\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^2\right)^2} \]

curtosis <- kurtosis(x = datos.d$precio);
cat("El coeficiente de curtosis del precio de los diamantes es:", curtosis)
## El coeficiente de curtosis del precio de los diamantes es: 5.10721
ggplot(datos.d, aes(x = precio)) +
  geom_density(fill = "lightgreen", color = "black", alpha = 0.5) +
  geom_vline(xintercept = mean(datos.d$precio, na.rm = TRUE),
             color = "red", linetype = "dashed", size = 1) +
  #Etiqueta de la linea (media)
  annotate("text",
           x = mean(datos.d$precio, na.rm = TRUE),   # misma posición en x
           y = 0.0001,                               # ajusta según altura de la densidad
           label = paste0("Media = ", round(media, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  labs(
    title = paste("Distribución de Precios  |  Curtosis =", round(curtosis, 2)),
    x = "Precio",
    y = "Densidad"
  ) +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))  # centra el título

Coeficiente de asimetría de Fisher

El coeficiente de asimetría de Fisher CAF evalúa la proximidad de los datos a su media x. Cuanto mayor sea la suma ∑(xi–x)3, mayor será la asimetría. Sea el conjunto X=(x1, x2,…, xN), entonces la fórmula de la asimetría de Fisher es:

\[ g_1 = \frac{\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^3}{\left(\sqrt{\frac{1}{n}\sum_{i=1}^n (x_i-\bar{x})^2}\right)^3} \] Si CAF<0: la distribución tiene una asimetría negativa y se alarga a valores menores que la media.

Si CAF=0: la distribución es simétrica.

Si CAF>0: la distribución tiene una asimetría positiva y se alarga a valores mayores que la media.

sk <- skewness(datos.d$precio, na.rm = TRUE)
sk   # este es el coeficiente de asimetría de Fisher
## [1] 1.626849
ggplot(datos.d, aes(x = precio)) +
  geom_density(fill = "steelblue", alpha = 0.4) +
  geom_vline(aes(xintercept = mean(precio, na.rm = TRUE)),
             color = "red", linetype = "dashed",size=0.7) +
  annotate("text",
           x = mean(datos.d$precio, na.rm = TRUE),   # misma posición en x
           y = 0.0001,                               # ajusta según altura de la densidad
           label = paste0("Media = ", round(media, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  labs(
    title = paste("Distribución de precios  |  Asimetría de Fisher =", round(sk, 2)),
    x = "Precio",
    y = "Densidad"
  ) +
  theme_minimal()

Coeficiente de asimetría de Pearson

El coeficiente de asimetría de Pearson CAP mide la diferencia entre la media y la moda respecto a la dispersión del conjunto X=(x1, x2,…, xN). Con la mediana: \[ g_{P1} = \frac{3(\bar{x} - \text{Me})}{s} \] Con la moda: \[ g_{P2} = \frac{\bar{x} - \text{Mo}}{s} \] Si CAP<0: la distribución tiene una asimetría negativa, puesto que la media es menor que la moda.

Si CAP=0: la distribución es simétrica.

Si CAP>0: la distribución tiene una asimetría positiva, ya que la media es mayor que la moda.

x <- datos.d$precio
pearson_skew <- 3 * (mean(x, na.rm = TRUE) - median(x, na.rm = TRUE)) / sd(x, na.rm = TRUE)
pearson_skew
## [1] 1.127466
person1 <- (media-moda)/desv
person2 <- (3*(media-mediana))/desv
cat("El coeficiente de asimetria de Pearson(moda) de los diamantes es:", person1,"\n")
## El coeficiente de asimetria de Pearson(moda) de los diamantes es: 0.7654691
cat("El coeficiente de asimetria de Pearson(mediana) de los diamantes es:", person2,"\n")
## El coeficiente de asimetria de Pearson(mediana) de los diamantes es: 1.127466
pearson_df <- data.frame(
  tipo = c("Pearson (moda)", "Pearson (mediana)"),
  valor = c(person1, person2)
)

## Coeficiente de asimetría de Bowley

El coeficiente de asimetría de Bowley CAB toma como referencia los cuartiles para determinar si la distribución es simétrica o no. Para aplicar este coeficiente, se supone que el comportamiento de la distribución en los extremos es similar. Sea el conjunto X=(x1, x2,…, xN), la asimetría de Bowley es: \[ g_B = \frac{(Q_3 + Q_1 - 2Q_2)}{Q_3 - Q_1} \]

Si CAB<0: la distribución tiene una asimetría negativa, puesto que la distancia de la mediana al primer cuartil es mayor que al tercero.

Si CAB=0: la distribución es simétrica, ya que el primer y tercer cuartil están a la misma distancia de la mediana.

Si CAB>0: la distribución tiene una asimetría positiva, ya que la distancia de la mediana al tercer cuartil es mayor que al primero.

q1 <- quantile(datos.d$precio,probs = 0.25);q1
##    25% 
## 1001.5
q2 <- quantile(datos.d$precio,probs = 0.5);q2
##    50% 
## 2564.5
q3 <- quantile(datos.d$precio,probs = 0.75);q3
##    75% 
## 5732.5
bowley <- (q3+q1-2*q2)/(q3-q1)
cat("coeficiente de asimetria de bowley:", bowley, "\n")
## coeficiente de asimetria de bowley: 0.3392517
ggplot(datos.d, aes(x = precio)) +                       # densidad sobre x
  geom_density(fill = "pink", color = "black") +
  geom_vline(xintercept = media,
             color = "green", linetype = "dashed", size = 0.7) +
  geom_vline(xintercept = q1, color = "blue",  linetype = "dashed", size = 0.7) +
  geom_vline(xintercept = q2, color = "blue",   linetype = "dashed", size = 0.7) +
  geom_vline(xintercept = q3, color = "blue",  linetype = "dashed", size = 0.7) +
  # Etiquetas de las líneas
  annotate("text",
           x = media,
           y = 0.0001,                      # ajusta según la altura de tu densidad
           label = paste0("Media = ", round(media, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  annotate("text",
           x = q1,
           y = 0.0001,                      # ajusta según la altura de tu densidad
           label = paste0("q1 = ", round(q1, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  annotate("text",
           x = q2,
           y = 0.0001,                      # ajusta según la altura de tu densidad
           label = paste0("q2 = ", round(q2, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  annotate("text",
           x = q3,
           y = 0.0001,                      # ajusta según la altura de tu densidad
           label = paste0("q3 = ", round(q3, 2)),
           angle = 90, vjust = -0.5, hjust = 0) +
  labs(
    title = paste("Asimetría de Bowley =", round(bowley, 2)),
    x = "Densidad",
    y = "Precio"
  ) +
   coord_flip() +                             # mantiene ejes girados
  coord_cartesian(ylim = c(0, 0.00020)) +       # ajusta el rango en Y (precio)
  theme_minimal()
## Coordinate system already present. Adding new coordinate system, which will
## replace the existing one.

library(datos)
p <- na.omit(pinguinos)
plot(x = p$masa_corporal_g, p$largo_aleta_mm, main=" diagrama de dispercion para la masa corporal y la aleta", col="purple", lty=10, xlab = "Masa corporal(g)" ,ylab ="Largo de la aleta (mm)")