Variable cuantitativa continua

Longitud

knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)

Cargar librerías y paquetes

Instalar librerías

knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE)

if (!require(moments)) install.packages("moments")
if (!require(readr)) install.packages("readr")
if (!require(sf)) install.packages("sf")
if (!require(gt)) install.packages("gt")
if (!require(dplyr)) install.packages("dplyr")

Cargar paquetes

library(readr)
library(sf)
library(gt)
library(dplyr)
library(moments)

1 Cargar los datos

Extraer la variable

# Leer el archivo, forzando texto para evitar errores
datos <- read_delim("Conjunto.csv", delim = ";", col_types = cols(.default = "c"))

# Convertir columnas a numéricas
datos$longitude <- as.numeric(datos$longitude)
datos$latitude <- as.numeric(datos$latitude)


# Eliminar filas con valores faltantes en coordenadas
datos <- datos[!is.na(datos$longitude) & !is.na(datos$latitude), ]

# Crear objeto espacial desde coordenadas EPSG:3857
puntos_sf <- st_as_sf(datos, coords = c("longitude", "latitude"), crs = 3857)

# Transformar a WGS 84 (EPSG:4326)
puntos_wgs84 <- st_transform(puntos_sf, crs = 4326)

# Extraer coordenadas en grados decimales
coord_grados <- st_coordinates(puntos_wgs84)

# Crear nuevo data frame con solo las coordenadas convertidas
resultado <- data.frame(
  longitude_deg = coord_grados[, 1],
  latitude_deg = coord_grados[, 2]
)
# Observar resultado
print(head(resultado, 10))
##    longitude_deg latitude_deg
## 1      -95.40163    33.560946
## 2      -10.02523    34.001668
## 3       90.82797     4.280984
## 4      -99.51960    37.501294
## 5     -108.44503    32.521296
## 6     -108.40909    32.395387
## 7     -108.31004    32.417086
## 8     -108.26063    32.395387
## 9     -108.25559    32.496448
## 10     -10.82424    32.540654
# Extraer la variable
Longitud<-resultado$longitude_deg
length(Longitud)
## [1] 304613

2 Tabla de distribución de frecuencia

# Se usa la ley de Sturges paara saber el numero de intervalos
k<-1+(3.3*log10(length(Longitud)))
k<-floor(k)
k
## [1] 19
# Graficos de distribucion de frecuencia
options(scipen = 999)  # desactiva notación científica
histLongitud<-hist(Longitud,
                   main= "Gráfica No. 1: Frecuencia de Longitud de 
                minerales metalicos y no metalicos del mundo",
                   xlab= "Longitud", 
                   ylab= "Cantidad", col="green",
                   las=2)

### Calculo de parametros
Limites<-histLongitud$breaks
Limites
##  [1] -180 -160 -140 -120 -100  -80  -60  -40  -20    0   20   40   60   80  100
## [16]  120  140  160  180
LimInf<-Limites[1:18]
LimSup<-Limites[2:19]
Mc<-histLongitud$mids
Mc
##  [1] -170 -150 -130 -110  -90  -70  -50  -30  -10   10   30   50   70   90  110
## [16]  130  150  170
#FRECUECNIA SIMPLE
ni<-histLongitud$counts
sum(ni)
## [1] 304613
#FRECUECNIA ABSOLUTA
hi<-ni/sum(ni)*100
sum(hi)
## [1] 100
#FRECUENCIAS ACUMULADAS 
Niasc <- cumsum(ni)
Nidsc <- rev(cumsum(rev(ni)))
Hiasc <- round(cumsum(hi), 2) 
Hidsc <- round(rev(cumsum(rev(hi))), 2)
TDFLongitudR<-data.frame(LimInf, LimSup, Mc, ni, hi, Niasc, Nidsc, Hiasc, Hidsc)
TDFLongitudR
##    LimInf LimSup   Mc     ni           hi  Niasc  Nidsc  Hiasc  Hidsc
## 1    -180   -160 -170      6  0.001969712      6 304613   0.00 100.00
## 2    -160   -140 -150   2784  0.913946549   2790 304607   0.92 100.00
## 3    -140   -120 -130   7779  2.553732113  10569 301823   3.47  99.08
## 4    -120   -100 -110 109849 36.061822706 120418 294044  39.53  96.53
## 5    -100    -80  -90  79276 26.025153227 199694 184195  65.56  60.47
## 6     -80    -60  -70  56894 18.677469445 256588 104919  84.23  34.44
## 7     -60    -40  -50   4568  1.499607699 261156  48025  85.73  15.77
## 8     -40    -20  -30    988  0.324345973 262144  43457  86.06  14.27
## 9     -20      0  -10  30539 10.025507775 292683  42469  96.08  13.94
## 10      0     20   10   2696  0.885057434 295379  11930  96.97   3.92
## 11     20     40   30   2329  0.764576692 297708   9234  97.73   3.03
## 12     40     60   50   1127  0.369977644 298835   6905  98.10   2.27
## 13     60     80   70   1190  0.390659624 300025   5778  98.49   1.90
## 14     80    100   90   1331  0.436947865 301356   4588  98.93   1.51
## 15    100    120  110   1813  0.595181427 303169   3257  99.53   1.07
## 16    120    140  130   1100  0.361113938 304269   1444  99.89   0.47
## 17    140    160  150    332  0.108990752 304601    344 100.00   0.11
## 18    160    180  170     12  0.003939425 304613     12 100.00   0.00
totalni<-sum(ni)
totalhi=sum(hi)
TDFLongitudTotal<-rbind(TDFLongitudR, data.frame(LimInf="Total",
                                                 LimSup=" ", Mc=" ",ni=totalni, hi=totalhi, Niasc=" ", Nidsc=" ", 
                                                 Hiasc=" ", Hidsc=" "))
# Crear la tabla 
tablaLongitud<-TDFLongitudR %>%
  gt() %>%
  tab_header(
    title = md("Tabla No. 1"),
    subtitle = md("Tabla de distribucion de Frecuencias simples, absolutas y acumuladas
                  de la Longitud de minerales metalicos y no metalicos del mundo")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo 4")
  ) %>%
  tab_options(
    table.border.top.color = "black",
    table.border.bottom.color = "black",
    table.border.top.style = "solid",
    table.border.bottom.style = "solid",
    column_labels.border.top.color = "black",
    column_labels.border.bottom.color = "black",
    column_labels.border.bottom.width = px(2),
    row.striping.include_table_body = TRUE,
    heading.border.bottom.color = "black",
    heading.border.bottom.width = px(2),
    table_body.hlines.color = "gray",
    table_body.border.bottom.color = "black"
  )  %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(
      rows = LimInf == "Total"
    )
  ) 

tablaLongitud
Tabla No. 1
Tabla de distribucion de Frecuencias simples, absolutas y acumuladas de la Longitud de minerales metalicos y no metalicos del mundo
LimInf LimSup Mc ni hi Niasc Nidsc Hiasc Hidsc
-180 -160 -170 6 0.001969712 6 304613 0.00 100.00
-160 -140 -150 2784 0.913946549 2790 304607 0.92 100.00
-140 -120 -130 7779 2.553732113 10569 301823 3.47 99.08
-120 -100 -110 109849 36.061822706 120418 294044 39.53 96.53
-100 -80 -90 79276 26.025153227 199694 184195 65.56 60.47
-80 -60 -70 56894 18.677469445 256588 104919 84.23 34.44
-60 -40 -50 4568 1.499607699 261156 48025 85.73 15.77
-40 -20 -30 988 0.324345973 262144 43457 86.06 14.27
-20 0 -10 30539 10.025507775 292683 42469 96.08 13.94
0 20 10 2696 0.885057434 295379 11930 96.97 3.92
20 40 30 2329 0.764576692 297708 9234 97.73 3.03
40 60 50 1127 0.369977644 298835 6905 98.10 2.27
60 80 70 1190 0.390659624 300025 5778 98.49 1.90
80 100 90 1331 0.436947865 301356 4588 98.93 1.51
100 120 110 1813 0.595181427 303169 3257 99.53 1.07
120 140 130 1100 0.361113938 304269 1444 99.89 0.47
140 160 150 332 0.108990752 304601 344 100.00 0.11
160 180 170 12 0.003939425 304613 12 100.00 0.00
Autor: Grupo 4

3 Gráficos de distribución de frecuencia

# Histogramas
# Histograma global ni
hist(Longitud, main="Gráfica No. 2: Frecuencia de Longitud de minerales
              metalicos y no metalicos del mundo",
     ylab="Cantidad", 
     xlab="Longitud (°)", col="grey", 
     ylim=c(0,length(Longitud)),
     las=2)

# Histograma local ni
hist(Longitud,main= "Gráfica No. 3: Frecuencia de Longitud de minerales
              metalicos y no metalicos del mundo",
     xlab= "Longitud (°)", 
     ylab= "Cantidad", col="green",
     las=2)

# Histograma global hi
barplot(TDFLongitudR$hi, space=0, main="Gráfica No. 4: Porcentaje de Longitud de
        minerales metalicos y no metalicos del mundo", 
        ylab="Porcentaje (%)", xlab="Longitud (°)", ylim = c(0,100),
        col="blue", names.arg = TDFLongitudR$Mc)

# Histograma local hi
barplot(TDFLongitudR$hi, space=0, main="Gráfica No. 5: Porcentaje de Longitud de
        minerales metalicos y no metalicos del mundo", 
        ylab="Porcentaje (%)", xlab="Longitud (°)",
        col="grey", names.arg = TDFLongitudR$Mc)

# Ojivas
#Ojivas combinadas de la frecuencia Ni
plot(LimInf,Nidsc,main = "Gráfica No. 6: Ojivas combinadas de Longitud de minerales
     metalicos y no metalicos del mundo",
     xlab = "Longitud",
     ylab="Cantidad", col="blue",type = "b")
lines(LimSup,Niasc,col="green",type = "b")
legend("right",
       legend = c("Ojiva descendente", "Ojiva ascendente"),
       col = c("blue", "green"),
       pch = 1, lty = 1,
       cex = 0.6,
       inset = c(0.05, 0.05),
       bty = "n")

#Ojivas combinadas de la frecuencia Hi
plot(LimInf,Hidsc,main = "Gráfica No. 7: Ojivas combinadas de Longitud de minerales
     metalicos y no metalicos del mundo",
     xlab = "Longitud",
     ylab="Cantidad", col="blue",type = "b")
lines(LimSup,Hiasc,col="green",type = "b")
legend("right",
       legend = c("Ojiva descendente", "Ojiva ascendente"),
       col = c("blue", "green"),
       pch = 1, lty = 1,
       cex = 0.6,
       inset = c(0.05, 0.05),
       bty = "n")

# Diagrama de caja
Caja<-boxplot(Longitud,horizontal = T,
              col = "skyblue", main="Gráfica No 8: Distribución de de Longitud de
              minerales metalicos y no metalicos del mundo", 
              xlab="Longitud")

# 4 Indicadores ## 4.1 Posición

minimo     <- min(Longitud)
maximo     <- max(Longitud)
rango      <- maximo - minimo
media      <- mean(Longitud)
media
## [1] -79.2449
mediana    <- median(Longitud)
cuartiles  <- quantile(Longitud, probs = c(0.25, 0.5, 0.75))
cuartiles
##        25%        50%        75% 
## -105.25919  -94.80268  -71.72182

4.2 Dispersión

varianza        <- var(Longitud)
varianza
## [1] 1822.503
desviacion      <- sd(Longitud)
desviacion
## [1] 42.69078
coef_var        <- desviacion / media * 100   # Coeficiente de variación (%)
coef_var
## [1] -53.87196
# Nota: coeficiente de variación no se usa si media aritmetica es cercana de 0 o negativa.

4.3 Forma

#(requiere paquete 'moments')
asimetria   <- skewness(Longitud)    # Sesgo o asimetría
asimetria
## [1] 2.147573
curtosis    <- kurtosis(Longitud)    # Curtosis (forma de la distribución)
curtosis
## [1] 8.758539

4.4 Tabla resumen

# Crear una lista de indicadores
valores <- c(
  minimo,
  maximo,
  rango,
  media,
  mediana,
  cuartiles[1],  # Q1
  cuartiles[3],  # Q3
  varianza,
  desviacion,
  coef_var,
  asimetria,
  curtosis
)

# Nombres de los indicadores
nombres <- c(
  "Mínimo",
  "Máximo",
  "Rango",
  "Media",
  "Mediana",
  "Q1",
  "Q3",
  "Varianza",
  "Desv. estándar",
  "Coef. de variación (%)",
  "Asimetría",
  "Curtosis"
)

# Crear tabla horizontal
tabla_horizontal <- as.data.frame(t(valores))
colnames(tabla_horizontal) <- nombres

# Mostrar tabla
tabla_horizontal
##      Mínimo   Máximo    Rango    Media   Mediana        Q1        Q3 Varianza
## 1 -160.6208 160.7971 321.4179 -79.2449 -94.80268 -105.2592 -71.72182 1822.503
##   Desv. estándar Coef. de variación (%) Asimetría Curtosis
## 1       42.69078              -53.87196  2.147573 8.758539
# Outliers
IQR_val <- cuartiles[3] - cuartiles[1]

# Límites para detectar outliers
limite_inferior <- cuartiles[1] - 1.5 * IQR_val
limite_superior <- cuartiles[3] + 1.5 * IQR_val

# Extraer outliers
outliers <- Longitud[Longitud < limite_inferior | Longitud > limite_superior]

# Número de outliers
num_outliers <- length(outliers)

# Valores mínimo y máximo de los outliers
min_outlier <- if(num_outliers > 0) min(outliers) else NA
max_outlier <- if(num_outliers > 0) max(outliers) else NA

# Crear tabla resumen
Tabla_outliers <- data.frame(
  "Cantidad de outliers" = num_outliers,
  "Valor mínimo de outliers" = min_outlier,
  "Valor máximo de outliers" = max_outlier
)
# Mostrar tabla
Tabla_outliers
##   Cantidad.de.outliers Valor.mínimo.de.outliers Valor.máximo.de.outliers
## 1                42492                -160.6208                 160.7971

5 Conclusiones

La variable longitud, medida en grados, presenta valores que oscilan entre -160.62 y 160.80, con una media de -79.24 y una mediana de -94.80, lo que indica una asimetría leve hacia la derecha (asimetría = 2.15). Los datos muestran una amplia dispersión, reflejada en un rango de 321.42 grados y una desviación estándar de 42.69. El coeficiente de variación negativo (-53.87%) confirma que la mayoría de los valores se concentran en el rango negativo. La distribución es heterogénea y presenta una alta curtosis (8.76), lo que sugiere una fuerte concentración de valores cercanos a la mediana, junto con la presencia de valores atípicos tanto en los extremos inferiores como superiores. La mayor parte de los datos se concentra entre el primer cuartil (Q1 = -105.26) y el tercer cuartil (Q3 = -71.72), evidenciando un patrón de acumulación en ese rango.

Este comportamiento resulta especialmente relevante para el estudio de la distribución geográfica de minerales, ya que permite identificar zonas con mayor concentración de yacimientos minerales a nivel mundial. La concentración de valores en determinadas franjas longitudinales revela patrones espaciales significativos, útiles para la exploración, planificación y aprovechamiento estratégico de recursos minerales en distintas regiones del planeta.