ANÁLISIS ESTADÍSTICO
1. CARGA DE LIBRERÍAS Y DATOS
# 1. CARGA DE LIBRERÍA Y DATOS
library(dplyr)
library(knitr)
library(gt)
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ",", sep = ";")
2. TABLA DE DISTRIBUCIÓN DE CANTIDAD
# LIMPIEZA INICIAL
distancia <- as.numeric(datos$Distance.estimation)
distancia <- na.omit(distancia)
distancia <- subset(distancia, distancia >= 0)
#FILTRADO DE OUTLIERS
caja <- boxplot(distancia, plot = FALSE)
limite_inf <- caja$stats[1]
limite_sup <- caja$stats[5]
# Selección de datos sin outliers
distancia_limpia <- distancia[distancia >= limite_inf & distancia <= limite_sup]
cat("Cantidad total de datos analizados (sin outliers):", length(distancia_limpia), "\n")
## Cantidad total de datos analizados (sin outliers): 11793
histograma <- hist(distancia_limpia, plot = FALSE)
ni <- histograma$counts
hi <- ni / sum(ni) * 100
intervalos <- paste0("[", round(histograma$breaks[-length(histograma$breaks)], 2),
", ", round(histograma$breaks[-1], 2), ")")
tabla_frecuencias <- data.frame(Intervalo = intervalos, ni = ni, hi = round(hi, 2))
totales <- data.frame(Intervalo = "TOTAL", ni = sum(ni), hi = sum(round(hi, 2)))
tabla_frecuencias_final <- rbind(tabla_frecuencias, totales)
# Aplicación de gt para Tabla de Frecuencias
tabla_gt_frecuencias <- tabla_frecuencias_final %>%
gt() %>%
cols_label(
Intervalo = "Intervalo",
ni = "ni",
hi = "hi (%)"
) %>%
tab_header(
title = md("**Tabla Nº1. Distribución de Frecuencias de la Distancia Estimada**")
) %>%
tab_style(
style = list(
cell_fill(color = "lightgray"),
cell_text(weight = "bold")
),
locations = cells_body(
rows = Intervalo == "TOTAL"
)
) %>%
cols_align(
align = "center",
columns = c(ni, hi)
) %>%
tab_options(
table.width = pct(80),
heading.title.font.size = px(20),
heading.title.font.weight = "bold",
table.font.names = "Open Sans",
column_labels.font.weight = "bold"
)
tabla_gt_frecuencias
| Tabla Nº1. Distribución de Frecuencias de la Distancia Estimada |
| Intervalo |
ni |
hi (%) |
| [0, 10) |
307 |
2.60 |
| [10, 20) |
714 |
6.05 |
| [20, 30) |
1052 |
8.92 |
| [30, 40) |
1073 |
9.10 |
| [40, 50) |
1232 |
10.45 |
| [50, 60) |
1292 |
10.96 |
| [60, 70) |
1170 |
9.92 |
| [70, 80) |
1225 |
10.39 |
| [80, 90) |
972 |
8.24 |
| [90, 100) |
713 |
6.05 |
| [100, 110) |
571 |
4.84 |
| [110, 120) |
362 |
3.07 |
| [120, 130) |
201 |
1.70 |
| [130, 140) |
221 |
1.87 |
| [140, 150) |
214 |
1.81 |
| [150, 160) |
213 |
1.81 |
| [160, 170) |
192 |
1.63 |
| [170, 180) |
69 |
0.59 |
| TOTAL |
11793 |
100.00 |
3. GRÁFICA DE DISTRIBUCIÓN DE CANTIDAD
# 3. GRÁFICA DE DISTRIBUCIÓN DE CANTIDAD
hist(distancia_limpia, freq = TRUE, col = "skyblue",
main = "Gráfica Nº1. Distribución de Distance.estimation",
xlab = "Distancia Estimada", ylab = "Frecuencia")

4. CONJETURA DEL MODELO
mu <- mean(distancia_limpia)
sigma <- sd(distancia_limpia)
h <- length(histograma$counts)
hist(distancia_limpia, freq = FALSE, col = "lightcyan",
main = "Gráfica Nº2. Comparación Realidad vs Modelo Normal",
xlab = "Distancia", ylab = "Densidad")
curve(dnorm(x, mean = mu, sd = sigma), add = TRUE, col = "blue3", lwd = 3)

5. TESTS DE APROBACIÓN
# 5. TEST DE APROBACIÓN
Fo <- histograma$counts
P <- c()
for (i in 1:h) {
P[i] <- pnorm(histograma$breaks[i+1], mu, sigma) - pnorm(histograma$breaks[i], mu, sigma)
}
n <- length(distancia_limpia)
Fo_perc <- (Fo / n) * 100
Fe_perc <- P * 100
Fo_perc
## [1] 2.6032392 6.0544391 8.9205461 9.0986178 10.4468753 10.9556517
## [7] 9.9211397 10.3875180 8.2421776 6.0459595 4.8418553 3.0696176
## [13] 1.7044009 1.8739930 1.8146358 1.8061562 1.6280845 0.5850929
Fe_perc
## [1] 2.7853383 4.1475728 5.7565173 7.4469039 8.9792934 10.0915826
## [7] 10.5712724 10.3215795 9.3932515 7.9677648 6.2995224 4.6422550
## [13] 3.1886015 2.0413660 1.2181208 0.6774980 0.3512150 0.1697012
# Gráfica de Correlación
plot(Fo_perc, Fe_perc,
main="Gráfica Nº3: Correlación de frecuencias en el modelo normal
de la Distancia Estimada de los pozos de gas natural",
xlab="Frecuencia Observada (%)",
ylab="Frecuencia esperada (%)",
col="blue3",
pch=19)
abline(a = 0, b = 1, col = "red", lwd = 2)

# Cálculos estadísticos
Correlacion <- cor(Fo_perc, Fe_perc) * 100
grados_libertad <- h - 1
nivel_significancia <- 0.95
x2 <- sum((Fe_perc - Fo_perc)^2 / Fe_perc)
vc <- qchisq(nivel_significancia, grados_libertad)
# Aplicación de gt para Resultados de los Tests
tabla_resumen_tests <- data.frame(
Prueba = c("Correlación Pearson (%)", "Chi-cuadrado"),
Valor_Obtenido = c(round(Correlacion, 2), round(x2, 2)),
Criterio_Aceptación = c("> 80%", paste("<", round(vc, 2))),
Resultado = c(ifelse(Correlacion > 80, "APROBADO", "RECHAZADO"),
ifelse(x2 < vc, "APROBADO", "RECHAZADO"))
)
tabla_gt_tests <- tabla_resumen_tests %>%
gt() %>%
cols_label(
Prueba = "Prueba Estadística",
Valor_Obtenido = "Valor Obtenido",
Criterio_Aceptación = "Criterio",
Resultado = "Resultado"
) %>%
tab_header(
title = md("**Tabla Nº2. Resumen de Tests de Bondad de Ajuste (Modelo Normal)**")
) %>%
cols_align(
align = "center",
columns = everything()
) %>%
tab_options(
table.width = pct(80),
heading.title.font.weight = "bold",
column_labels.font.weight = "bold"
)
tabla_gt_tests
| Tabla Nº2. Resumen de Tests de Bondad de Ajuste (Modelo Normal) |
| Prueba Estadística |
Valor Obtenido |
Criterio |
Resultado |
| Correlación Pearson (%) |
92.75 |
> 80% |
APROBADO |
| Chi-cuadrado |
13.36 |
< 27.59 |
APROBADO |
6. CÁLCULO DE PROBABILIDADES
## **6. CÁLCULO DE PROBABILIDADES**
# 6. CÁLCULO DE PROBABILIDADES (Rango 100 a 150)
prob <- (pnorm(150, mean = mu, sd = sigma) -
pnorm(100, mean = mu, sd = sigma)) * 100
# Rango para la curva
x <- seq(min(distancia_limpia), max(distancia_limpia), 0.01)
# Gráfica de densidad
plot(x, dnorm(x, mu, sigma),
col = "skyblue3",
lwd = 1,
main = "Gráfica Nº 4: Cálculo de probabilidades",
ylab = "Densidad de probabilidad",
xlab = "Distancia Estimada")
x_section <- seq(100, 150, 0.01)
y_section <- dnorm(x_section, mu, sigma)
# Pintar la sección de la curva
lines(x_section, y_section, col = "red", lwd = 2)
# Pintar el área debajo de la línea roja
polygon(c(x_section, rev(x_section)),
c(y_section, rep(0, length(y_section))),
col = rgb(1, 0, 0, 0.6))
# Leyenda
legend("topright",
legend = c("Modelo Normal", "Área de Probabilidad"),
col = c("skyblue3", "red"),
lwd = 2,
cex = 0.6)
# Texto de la probabilidad en la gráfica
texto_prob <- paste0("Probabilidad = ", round(prob, 2), " %")
# Posicionamiento automático del texto
text(x = (max(x) * 0.8),
y = max(dnorm(x, mu, sigma)) * 0.8,
labels = texto_prob,
col = "black",
cex = 0.8,
font = 2)

# CÁLCULO DE CANTIDAD ESPERADA
cantidad_esperada <- (pnorm(150, mu, sigma) - pnorm(100, mu, sigma)) * 500
# GENERACIÓN DEL PLOT
plot.new()
plot.window(xlim = c(0, 100), ylim = c(0, 1))
rect(5, 0.2, 95, 0.8, col = "#F4F6F7", border = "#2A9D8F", lwd = 2)
text(50, 0.70, "¿De 500 nuevos pozos de gas natural cuántos", cex = 1, font = 3)
text(50, 0.63, "estarán en una distancia de 100 a 150?", cex = 1, font = 3)
text(50, 0.45, paste(round(cantidad_esperada, 0), "Pozos"), cex = 2.5, font = 2, col = "#E67E22")
rect(45, 0.35, 55, 0.37, col = "#2A9D8F", border = NA)

7. INTERVALOS DE CONFIANZA
# Usamos 'n' que fue definida en la sección 5
e <- sigma / sqrt(n)
li <- mu - 2*e
ls <- mu + 2*e
# Variable para la tabla
Variable_IC <- "Distancia Estimada"
tabla_media <- data.frame(round(li, 2), Variable_IC, round(ls, 2), round(e, 4))
colnames(tabla_media) <- c("Límite Inferior", "Media Poblacional", "Límite Superior", "Error Estándar")
library(knitr)
kable(tabla_media, format = "markdown", caption = "Tabla Nº3: Media poblacional")
Tabla Nº3: Media poblacional
| 65.91 |
Distancia Estimada |
67.29 |
0.3462 |
8. CONCLUSIÓN
cat("La Distancia Estimada se ajusta a una distribución normal, con una media de", round(mu, 2),
"y una desviación estándar de", round(sigma, 2), "en la escala original. El intervalo de confianza del 95% para la media poblacional se encuentra entre", round(li, 2),
"y", round(ls, 2), ".\n\nEl modelo fue aceptado con un 95% de confianza, ya que el estadístico Chi-cuadrado de", round(x2, 3),
"fue inferior al valor crítico de", round(vc, 3), ". Además, la alta correlación del", round(Correlacion, 2),
"% entre las frecuencias observadas y teóricas respalda la calidad del ajuste.\nLa probabilidad de que la Distancia Estimada esté entre 100 y 150 unidades es del",
round(prob, 2), "%.")
## La Distancia Estimada se ajusta a una distribución normal, con una media de 66.6 y una desviación estándar de 37.59 en la escala original. El intervalo de confianza del 95% para la media poblacional se encuentra entre 65.91 y 67.29 .
##
## El modelo fue aceptado con un 95% de confianza, ya que el estadístico Chi-cuadrado de 13.359 fue inferior al valor crítico de 27.587 . Además, la alta correlación del 92.75 % entre las frecuencias observadas y teóricas respalda la calidad del ajuste.
## La probabilidad de que la Distancia Estimada esté entre 100 y 150 unidades es del 17.39 %.