library(dplyr)
library(datos)
library(ggplot2)
library(descriptr)
library(flextable)
library(modeest)
library(moments)
library(e1071)
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
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 existan 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
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ón 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
Cuantiles: los cuantiles son puntos que dividen una distribución de datos en partes iguales. Son una forma de resumir un conjunto de datos, indicando la posición de un valor en la distribución.
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 \(\frac {i}{4}\ 100\%\) de la información y es superado por el \(1-\frac {i}{4}\ 100\%\)
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\(\frac {i}{100}\ 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
ejemplo con la fórmula
Encontrar el percentil 25.
Primero encontramos la posición del percentil 25
n <-
pos.25 <- (120+1)*25/100
cat("la posicion en donde se encuentra el percentil 25 es",pos.25)
## la posicion en donde se encuentra el percentil 25 es 30.25
Se observa que el percentil 25 esta en la posición 250.25 y 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 de el límite superior e inferior , 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 estos limites son: \[ li = Q1-(1.5*RI) \\ ls = Q3+(1.5*RI)\] asi, para el precio de los diamantes del diagrama de caja:
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 intercualtiles
## 75%
## 4731
li <- q1-1.5*ri;li#limite inferior
## 25%
## -6095
ls <- q3+1.5*ri;ls#limite superior
## 75%
## 12829
boxplot(datos.d$precio,horizontal = TRUE, col="pink", main= "Diagrama de caja Diamantes")
Asi, para el Histograma de los diamantes:
hist(precio, main = "Histograma del precio de los diamantes",col = "darkblue")
MEDIDAS DE FORMA
Describen la apariencia de la distribución de un conjunto de datos. En otras palabras, te dicen cómo se ven los datos cuando los graficas, por ejemplo, en un histograma. Las dos medidas de forma más importantes son la asimetría (sesgo) y la curtosis.
CURTOSIS La curtosis mide la forma de la “cresta” de la distribución. Te indica qué tan afilada o plana es la cima y qué tan gruesas son las “colas” de la distribución.
Mesocúrtica: La distribución tiene una forma similar a la de una curva normal.
Leptocúrtica: La distribución es más “puntiaguda” y tiene colas más gruesas. Esto significa que hay más datos en los extremos, lo que puede indicar la presencia de valores atípicos.
Platicúrtica: La distribución es más “plana” y tiene colas más delgadas. Los datos están más dispersos y la variabilidad es menor en el centro.
ASIMETRIA La asimetría indica si los datos están distribuidos de manera uniforme alrededor del valor central o si se “inclinan” hacia un lado.
Asimetría nula: La distribución es simétrica. Los datos se distribuyen de forma equitativa a ambos lados de la media, como en una curva normal (o campana de Gauss).
Asimetría positiva: La “cola” de la distribución se extiende hacia la derecha. La mayoría de los datos se agrupan a la izquierda, y la media es mayor que la mediana.
Asimetría negativa: La “cola” de la distribución se extiende hacia la izquierda. La mayoría de los datos se agrupan a la derecha, y la media es menor que la mediana.
coeficiente de curtosis
calcular coeficiente de curtosis y asismetria para el precio de los diamantes en la base de datos
#de la libreria "e1071"
curtosis <- kurtosis(x=datos.d$precio);curtosis
## [1] 2.097001
asimetria <- skewness(x=datos.d$precio);asimetria
## [1] 1.62441
ggplot(data = datos.d, aes(x = precio)) +
geom_density(fill = "lightblue", alpha = 0.7) +
labs(
title = "Gráfico de Asimetria Diamantes",
subtitle = paste("Asimetría (Skewness):", round(1.62441, 5)),
x = "Precio",
y = "frecuencia"
) +
theme_minimal()
como se puede analizar por la definciones de asimetria dadas , el grafico corresponde a una asimetria positiva La mayoría de los datos se concentran en la parte izquierda, lo que significa que se tienen algunos valores atípicos o extremos muy altos que están “jalando” el promedio de los datos hacia la derecha.
otra forma de verlo es con la mediana asi se puede visualizar mejor que es asimetria positiva
ggplot(data = datos.d, aes(x = precio)) +
geom_density(fill = "lightblue", alpha = 0.7) +
geom_vline(aes(xintercept = 2564.5 ),
color = "black", linetype = "dashed", linewidth = 1) +
labs(
title = "Gráfico de precio diamantes con Mediana",
subtitle = paste("Mediana:", round(2564.5 , 2)),
x = "Precio",
y = "frecuencia"
) +
theme_minimal()
Ahora para la curtosis:
ggplot(data = datos.d, aes(x = precio)) +
geom_density(fill = "pink2", alpha = 1) +
labs(
title = "Gráfico de frecuencia curtosis diamantes",
subtitle = paste("Curtosis:", round(2.097001, 6)),
x = "Precio",
y = "frecuencia"
) +
theme_minimal()
en este caso se puede identificar que es del tipo Leptocúrtica y una curtosis positiva (cualquier valor mayor que 0) indica que la distribución es más “puntiaguda” que una distribución normal (mesocúrtica). Esto significa que los datos tienen:
*Una cresta más alta y afilada en el centro.
*Colas más gruesas que se extienden a los lados.
datos.d <- diamantes
datoslim <- na.omit(datos.d)
#el gráfico de dispersión
ggplot(data = datoslim, aes(x = quilate, y = precio)) +
geom_point(aes(color = precio, size = quilate), alpha = 0.6) +
scale_color_gradient(low = "skyblue", high = "darkblue") +
labs(
title = "Relación entre Quilates y Precio",
subtitle = "Mientras más quilates, mayor tiende a ser el precio",
x = "Quilates",
y = "Precio",
color = "Precio",
size = "Quilates"
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", color = "darkblue", hjust = 0.5),
plot.subtitle = element_text(hjust = 0.5),
legend.position = "right"
)
plot(datos.d$quilate, datos.d$precio,
main = "Relación entre Quilates y Precio de Diamantes",
xlab = "Quilates",
ylab = "Precio (USD)",
pch = 19, # puntos sólidos
col = rgb(30, 144, 255, 80, maxColorValue = 255), # azul semi-transparente
cex = 0.8 # tamaño de los puntos
)
# Agregar línea de tendencia
abline(lm(precio ~ quilate, data = datos.d), col = "red", lwd = 2)
# Cuadro decorativo
box(lwd = 2, col = "darkblue")