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)
library(knitr)
## 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
n<-length(Longitud)
n
## [1] 304613
options(scipen = 999) # desactiva notación científica
histograma<-hist(Longitud,freq=FALSE,
main= "Gráfica No. 1: Frecuencia de Longitud de
minerales metalicos y no metalicos del mundo",
xlab= "Longitud (°)",
ylab= "Densidad de probabilidad", col="green",
las=2)
limites_barras<-histograma$breaks
limites_barras
## [1] -180 -160 -140 -120 -100 -80 -60 -40 -20 0 20 40 60 80 100
## [16] 120 140 160 180
# Extraemos intervalos de -150 a -20
Long1<- Longitud[Longitud >=-160.62 & Longitud<=-20 ]
HistoLong1 <- hist(Long1,
breaks = seq(min(Long1), max(Long1), length.out = 9),
freq = F,
main = "Gráfica No. 2: Modelo de probabilidad normal
Longitud de minerales metalicos y no metalicos del mundo",
xlab = "Longitud (°)",
ylab = "Densidad de probabilidad",
col = "grey")
h<-length(HistoLong1$counts)
u<-mean(Long1)
sigma<-sd(Long1)
x<-seq(min(Long1),max(Long1),0.01)
curve(dnorm(x,u,sigma),type="l",add=TRUE,lwd=4,col="blue4")
### Modelo de probabilidad
# Frecuencia simple observada
Fo<-HistoLong1$counts
Fo
## [1] 2105 7344 36881 117788 58484 36101 2727 713
P<-c(0)
for (i in 1:h) {
P[i] <-(pnorm(HistoLong1$breaks[i+1],u,sigma)-
pnorm(HistoLong1$breaks[i],u,sigma))}
Fe<-P*length(Long1)
plot(Fo, Fe,
main = "Gráfico No. 3: Correlación Frecuencias Observadas y Esperadas",
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
col = "blue3")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)
# Coorelación
Correlación<-cor(Fo,Fe)*100
Correlación
## [1] 94.68572
grados_libertad <- length(Fo)-1
grados_libertad
## [1] 7
# Nivel de significancia 5%
alpha <- 0.05
# Frecuencia observada porcentual
Fo<-(HistoLong1$counts/n)*100
Fo
## [1] 0.6910408 2.4109280 12.1074938 38.6680805 19.1994432 11.8514312 0.8952343
## [8] 0.2340675
# Frecuencia esperada
Fe<-P*100
Fe
## [1] 0.2627861 3.3379744 17.1395757 35.9072244 30.8453894 10.8532840 1.5537286
## [8] 0.0895849
x2<-sum((Fe-Fo)^2/Fe)
x2
## [1] 7.645976
# Valor crítico
valor_critico <- qchisq(1 - alpha, grados_libertad)
valor_critico
## [1] 14.06714
# Commprobación
x2<valor_critico
## [1] TRUE
Variable<-c("Longitud")
tabla_resumen<-data.frame(Variable,round(Correlación,2),round(x2,2),round(valor_critico,2))
colnames(tabla_resumen)<-c("Variable","Test Pearson (%)","Chi Cuadrado","Umbral de aceptación")
tabla_resumen
## Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
## 1 Longitud 94.69 7.65 14.07
kable(tabla_resumen, format = "markdown", caption =
"Tabla No 1: Resumen de test de bondad al modelo de probabilidad")
Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
---|---|---|---|
Longitud | 94.69 | 7.65 | 14.07 |
# Extraemos intervalos de -20 a 160.8
Long2 <- Longitud[Longitud >= -20 & Longitud <= 160.8 ]
# Para usar log normal deben ser positivos
Long2<-Long2+19.39
HistoLong2 <- hist(Long2,
breaks = seq(min(Long2), max(Long2), length.out = 9),
freq = F,
main = "Gráfica No. 3: Modelo de probabilidad log-normal
Longitud de minerales metálicos y no metálicos del mundo",
xlab = "Longitud",
ylab = "Densidad de probabilidad",
col = "grey")
h <- length(HistoLong2$counts)
LogLong2 <- log(Long2)
ulog <- mean(LogLong2)
ulog<-ulog
sigmalog <- sd(LogLong2)
x <- seq(min(Long2), max(Long2), 0.01)
curve(dlnorm(x, ulog, sigmalog), type = "l", add = TRUE, lwd = 4, col = "black")
# Frecuencia simple observada
Fo<-HistoLong2$counts
Fo
## [1] 31200 2861 1934 1293 1464 2052 1312 353
# Frecuencia simple esperada
P <- c(0)
for (i in 1:h) {
P[i] <- plnorm(HistoLong2$breaks[i+1], ulog, sigmalog) -
plnorm(HistoLong2$breaks[i], ulog, sigmalog)
}
Fe <- P * length(Long2)
# Comparación de tamaños
sum(Fe)
## [1] 42192.11
n <- length(Long2)
n
## [1] 42469
# Probabilidades log-normal por intervalo
# Gráfico de correlación
plot(Fo, Fe,
main = "Gráfica No. 4 :Correlación Frecuencias Observadas vs Esperadas",
xlab = "Frecuencia Observada",
ylab = "Frecuencia Esperada",
col = "blue3")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)
### Correlación
Correlación <- cor(Fo, Fe) * 100
Correlación
## [1] 94.12637
# Grados de libertad: k - 1
grados_libertad <-length(Fo) - 1
grados_libertad
## [1] 7
# Nivel de significancia
alpha <- 0.05
## Chi-cuadrado con frecuencias absolutas( no relativa )
Fo<-(HistoLong2$counts/n)*100
Fo
## [1] 73.4653512 6.7366785 4.5539099 3.0445737 3.4472203 4.8317596 3.0893122
## [8] 0.8311945
sum(Fo)
## [1] 100
Fe<-P*100
Fe
## [1] 59.8071919 24.1589139 8.3798399 3.5422340 1.7133162 0.9115539 0.5206835
## [8] 0.3142853
sum(Fe)
## [1] 99.34802
x2 <- sum((Fe- Fo)^2 / Fe)
x2
## [1] 49.63545
# Valor crítico
valor_critico <- qchisq(1 - alpha, grados_libertad)
valor_critico
## [1] 14.06714
# Comprobación
x2 < valor_critico
## [1] FALSE
Variable<-c("Longitud")
tabla_resumen<-data.frame(Variable,round(Correlación,2),round(x2,2),round(valor_critico,2))
colnames(tabla_resumen)<-c("Variable","Test Pearson (%)","Chi Cuadrado","Umbral de aceptación")
tabla_resumen
## Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
## 1 Longitud 94.13 49.64 14.07
kable(tabla_resumen, format = "markdown", caption =
"Tabla No 2: Resumen de test de bondad al modelo de probabilidad")
Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
---|---|---|---|
Longitud | 94.13 | 49.64 | 14.07 |
¿Cuál es la probabilidad de que, al seleccionar cualquier registro de mineral metalico y nometalico en el mundo, este tenga una Longitud entre -100° y -95.5°?
probabilidad <- pnorm(-95.5, u, sigma) - pnorm(-100, u, sigma)
probabilidad*100
## [1] 9.877173
# Calcular probabilidad entre -100 y -95.5
probabilidad <- pnorm(-95.5, u, sigma) - pnorm(-100, u, sigma)
cat("Probabilidad (%) entre -100 y -95.5:", probabilidad * 100, "\n")
## Probabilidad (%) entre -100 y -95.5: 9.877173
# Definir rango para graficar (elige un rango amplio para la curva)
x <- seq(-120, 80, by = 0.1)
# Graficar curva normal
max_val <- max(dnorm(x, u, sigma))
plot(x, dnorm(x, u, sigma), type = "l", col = "skyblue3", lwd = 2,
xlim = c(-120, 80), ylim = c(0, max_val * 1.2),
main = "Gráfica Nº 6: Cálculo de probabilidades",
ylab = "Densidad de probabilidad", xlab = "Longitud (°)", xaxt = "n")
# Definir el rango para sombrear el área de interés
x_section <- seq(-100, -95.5, 0.001)
y_section <- dnorm(x_section, u, sigma)
# Pintar área bajo la curva en rojo semitransparente
polygon(c(x_section, rev(x_section)), c(y_section, rep(0, length(y_section))),
col = rgb(1, 0, 0, 0.5), border = NA)
# Pintar línea roja sobre el área sombreada
lines(x_section, y_section, col = "red", lwd = 2)
# Añadir leyenda
legend("topright", cex = 0.7,
legend = c("Modelo", "Área de Probabilidad"),
col = c("skyblue3", "red"), lwd = c(2, 2), pch = c(NA, 15))
# Ajustar la escala del eje x a intervalos de 10 grados desde -120 a 80
axis(1, at = seq(-120, 80, by = 10), labels = seq(-120, 80, by = 10), las = 2)
# El area bajo la curva indica la probabilidad
El teorema nos indica que, aunque las variables individuales no sigan una distribución normal, la distribución de las medias aritméticas de n conjuntos muestrales, es normal, y por lo tanto, podemos obtener la media poblacional mediante intervalos de confianza, con tres postulados principales: (x-e<u<x+e)=68% (x-2e<u<x+2e)=95% (x-3e<u<x+3e)=99% Donde, x es la media aritmética muestral y es el margen de error (desviación estándar poblacional)
# Intervalos de confianza
x<-mean(Longitud)
x
## [1] -79.2449
sigma<-sd(Longitud)
sigma
## [1] 42.69078
#P(x-2e<u<x+2e)=95%
e<-sigma/sqrt(n)
e
## [1] 0.2071563
li<-x-2*e
li
## [1] -79.65921
ls<-x+2*e
ls
## [1] -78.83059
tabla_media<-data.frame(round(li,2),Variable,round(ls,2),e)
colnames(tabla_media)<-c("Limite Inferiror","Media poblacional","Límite superior", "Desviación estándar poblacional")
library(knitr)
kable(tabla_media, format = "markdown", caption = "Tabla No 3: Media poblacional")
Limite Inferiror | Media poblacional | Límite superior | Desviación estándar poblacional |
---|---|---|---|
-79.66 | Longitud | -78.83 | 0.2071563 |
La variable longitud, medida en grados, se explica a través de un modelo normal, agrupado en dos grupos. Para uno de los grupos, se obtuvo una media poblacional de -79.24° (intervalo de confianza del 95% entre -79.66° y -78.83°) y una desviación estándar poblacional de 0.2072. Esto permite calcular probabilidades, como por ejemplo que, al seleccionar aleatoriamente cualquier valor de longitud entre -160° y -40, la probabilidad de que dicho valor se encuentre entre -95° y -100° es del 9.87%. Este resultado se apoya en el Teorema del Límite Central, que garantiza que la media muestral tiende a la media poblacional conforme aumenta el tamaño de muestra.