Variable cuantitativa continua
El error de profundidad muestra la incertidumbre sobre cuán profundo ocurrió el hipocentro expresado en kilómetros.
Buscamos el directorio de trabajo y cargamos nuestros datos.
datos <- read.csv("C:/Users/HP/Desktop/Proyecto Sismos de la India/Earthquakes.csv", sep=";")
str(datos)## 'data.frame': 17805 obs. of 22 variables:
## $ time : chr "2024-10-31T01:32:40.503Z" "2024-10-30T23:51:31.217Z" "2024-10-29T02:35:27.930Z" "2024-10-28T13:08:40.107Z" ...
## $ latitude : num 298.6 282.1 47.2 278.7 327.5 ...
## $ longitude : chr "92.247" "670.879" "962.377" "940.243" ...
## $ depth : num 10 10 42.1 36.3 10 ...
## $ mag : num 4.4 4.3 4.6 4.6 4 4.6 4.7 4.3 5.3 4.4 ...
## $ magType : chr "mb" "mb" "mb" "mb" ...
## $ nst : int 35 36 27 62 22 44 39 34 80 27 ...
## $ gap : num 89 195 91 98 79 170 169 105 65 140 ...
## $ dmin : num 6.45 9.37 0.87 6.69 6.64 ...
## $ rms : num 0.82 0.72 0.55 0.65 0.72 0.74 0.81 0.54 0.92 0.9 ...
## $ net : chr "us" "us" "us" "us" ...
## $ id : chr "us7000np4h" "us7000np47" "us7000nnqs" "us7000nnml" ...
## $ updated : chr "2024-10-31T01:54:50.040Z" "2024-10-31T00:07:19.040Z" "2024-10-29T03:36:02.040Z" "2024-10-29T04:19:35.951Z" ...
## $ place : chr "113 km ENE of Lhasa, China" "64 km NE of Khuzdar, Pakistan" "55 km S of Reuleuet, Indonesia" "35 km NNE of Ziro, India" ...
## $ type : chr "earthquake" "earthquake" "earthquake" "earthquake" ...
## $ horizontalError: num 7.45 12.2 5.1 8.9 9.39 ...
## $ depthError : num 1.88 1.99 8.27 7.33 1.98 ...
## $ magError : num 0.114 0.092 0.146 0.078 0.139 0.078 0.097 0.107 0.11 0.102 ...
## $ magNst : int 22 33 14 49 14 49 32 25 8 28 ...
## $ status : chr "reviewed" "reviewed" "reviewed" "reviewed" ...
## $ locationSource : chr "us" "us" "us" "us" ...
## $ magSource : chr "us" "us" "us" "us" ...
Con este código, limpiamos la variable “depthError”, eliminando los valores nulos para poder analizar solo los datos válidos.
ErrorProfundidad <- datos$depthError
valoresnulos <- is.na(ErrorProfundidad)
ErrorProfundidadomitida <- na.omit(ErrorProfundidad)
n<-length(ErrorProfundidadomitida)
n## [1] 8777
Ahora, pasamos de la muestra a la población mediante modelos de probabilidad. Como punto de partida, se plantea una conjetura sobre el modelo. A simple vista, se observa que la distribución de la variable sigue un comportamiento exponencial; por lo tanto, se construye el modelo y se sobrepone al histograma.
histograma<-hist(ErrorProfundidad,freq = FALSE,main="Gráfica 1.Modelo de probabilidad exponencial",
xlab="ErrorProfundidad (Km)",ylab="Densidad de probabilidad",col="red")Nota importante: Para visualizar mejor el modelo en la gráfica, se resta el valor mínimo a los datos, haciendo que el eje inicie en cero; no obstante, al realizar las estimaciones, es necesario volver a sumar dicho valor para obtener resultados reales.
ErrorProfundidad <- na.omit(ErrorProfundidad)
ErrorProfundidad <- ErrorProfundidad[ErrorProfundidad > 0]
if (length(ErrorProfundidad) > 0) {
histograma <- hist(ErrorProfundidad, freq = FALSE, main = "Gráfica 1.Modelo de probabilidad exponencial",
xlab = "ErrorProfundidad", ylab = "Densidad de probabilidad", col = "red")
lambda <- 1 / mean(ErrorProfundidad)
x <- seq(0, max(ErrorProfundidad), 0.001)
y <- dexp(x, lambda)
lines(x, y, col = "skyblue3", lwd = 3)
} else {
cat("No hay datos válidos.\n")
}Una vez observado el modelo, aplicamos las pruebas de chi-cuadrado y de Pearson para evaluarlo de manera eficaz.
## [1] 4129 2511 855 476 282 136 73 46 34 30 16 10 4 3 5
## [1] 15
#Frecuencia simple esperada
P<-c(0)
for (i in 1:15) {
P[i] <-(pexp(histograma$breaks[i+1],lambda)-
pexp(histograma$breaks[i],lambda))
}
P## [1] 4.802125e-01 2.496085e-01 1.297434e-01 6.743898e-02 3.505394e-02
## [6] 1.822060e-02 9.470840e-03 4.922824e-03 2.558823e-03 1.330044e-03
## [11] 6.913403e-04 3.593500e-04 1.867857e-04 9.708886e-05 5.046558e-05
## [1] 8609.53
Test de Pearson
El test de Pearson se utiliza para determinar si una distribución teórica se ajusta adecuadamente a los datos observados, comparando las frecuencias observadas con las esperadas; si la diferencia es pequeña, se considera que el modelo es adecuado, mientras que una diferencia grande indica un mal ajuste.
plot(Fo,Fe, main="Gráfica 2.Correlación de las frecuencias del modelo exponencial",col="skyblue3",
xlab = "Frecuencia Observada",ylab="Frecuencia Esperada")
abline(lm(Fe ~ Fo), col="red",lwd=2)## [1] 99.47514
Test de Chi-Cuadrado
El test de chi-cuadrado de bondad de ajuste se utiliza para evaluar si una variable categórica sigue una distribución teórica específica, comparando las frecuencias observadas con las esperadas. Permite determinar si las diferencias entre ambas son significativas o se deben al azar. Si el valor del estadístico es bajo, el modelo se considera adecuado; si es alto, se rechaza la hipótesis del buen ajuste.
## [1] 14
# Nivel de significancia
nivel_significancia <- 0.05
#Frecuencia Observada porcentual
Fo<-(histograma$counts/n)*100
Fo## [1] 47.04340891 28.60886408 9.74136949 5.42326535 3.21294292 1.54950439
## [7] 0.83171927 0.52409707 0.38737610 0.34180244 0.18229463 0.11393415
## [13] 0.04557366 0.03418024 0.05696707
## [1] 98.0973
## [1] 48.021248809 24.960845437 12.974335745 6.743897696 3.505393804
## [6] 1.822059924 0.947083994 0.492282433 0.255882261 0.133004404
## [11] 0.069134028 0.035935004 0.018678567 0.009708886 0.005046558
## [1] 99.99454
## [1] 3.083019
Calculamos el umbral de aceptación
## [1] 23.68479
## [1] TRUE
Resumen test de bondad
library(knitr)
Variable<-c("ErrorProfundidad")
tabla_resumen<-data.frame(Variable,round(Correlación,2),round(x2,2),round(umbral_aceptacion,2))
colnames(tabla_resumen)<-c("Variable","Test Pearson (%)","Chi Cuadrado","Umbral de aceptación")
kable(tabla_resumen, format = "markdown", caption = "Tabla 1.Resumen de test de bondad al modelo de probabilidad")## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
## Warning in attr(x, "format"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
|---|---|---|---|
| ErrorProfundidad | 99.48 | 3.08 | 23.68 |
Teorema de límite central
El teorema del límite central establece que, si se toman muchas muestras aleatorias de una población (con cualquier distribución) y se calcula su media, la distribución de esas medias tenderá a ser normal (gaussiana) conforme el tamaño de la muestra sea suficientemente grande (n ≥ 30).
Esto permite aplicar métodos estadísticos basados en la distribución normal incluso cuando la población original no lo sea.
## [1] 7.641344
## [1] 8.192886
## [1] 0.08745081
## [1] 7.466442
## [1] 7.816245
tabla_media<-data.frame(round(li,2),Variable,round(ls,2),e)
colnames(tabla_media)<-c("Limite superior","Media poblacional","Límite superior", "Desviación estándar poblacional")
library(knitr)
kable(tabla_media, format = "markdown", caption = "Tabla 5. Media poblacional")## Warning in attr(x, "align"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
## Warning in attr(x, "format"): 'xfun::attr()' está en desuso.
## Utilizar 'xfun::attr2()' en su lugar.
## Ver help("Deprecated")
| Limite superior | Media poblacional | Límite superior | Desviación estándar poblacional |
|---|---|---|---|
| 7.47 | ErrorProfundidad | 7.82 | 0.0874508 |