plot(1, type = "n", axes = FALSE, xlab = "", ylab = "") 
text(x = 1, y = 1, 
     labels = "ESTADÍSTICA INFERENCIAL",
     cex = 2,  
     col = "blue",
     font = 6) 

##Carga de datos

getwd()
## [1] "/cloud/project"
setwd("/cloud/project")
datos <- read.csv("water_pollution_disease.csv",header = TRUE,sep = ",",dec = ".")

###1 Extraccion variable Cuantitativa Continua

Turbidez <- na.omit(datos$Turbidity..NTU.)
celdas_vac <- sum(is.na(Turbidez) | Turbidez == "")
celdas_vac
## [1] 0
Turbidez <- as.numeric(gsub(",", ".", Turbidez))
Turbidez <- na.omit(Turbidez)
length(Turbidez)
## [1] 3000
#Tabla de distribución de frecuencia
#Manualmente
min <-min(Turbidez)
max <-max(Turbidez)
R <-max-min
K <- floor(1+3.33*log10(length(Turbidez)))
A <-R/K
Li <-round(seq(from=min,to=max-A,by=A),2)
Ls <-round(seq(from=min+A,to=max,by=A),2)
Mc <-(Li+Ls)/2
ni<-c()
for (i in 1:K) {
  if (i < K) {
    ni[i] <- length(subset(Turbidez, Turbidez >= Li[i] & Turbidez < Ls[i]))
  } else {
    ni[i] <- length(subset(Turbidez, Turbidez >= Li[i] & Turbidez <= Ls[i]))
  }
}

sum(ni)
## [1] 3000
hi <-ni/sum(ni)*100
Ni_asc<-cumsum(ni)
Hi_asc<-cumsum(hi)
Ni_desc<-rev(cumsum(rev(ni)))
Hi_desc<-rev(cumsum(rev(hi)))

TDFturbidez <- data.frame(
  Li, Ls, Mc, ni, round(hi, 2), Ni_asc, Ni_desc, round(Hi_asc, 2), round(Hi_desc, 2)
)

colnames(TDFturbidez) <- c("Li","Ls","Mc","ni","hi","Ni_asc(%)","Ni_desc(%)","Hi_asc","Hi_desc")

##Gráfica de la variable

# Hacer el gráfico
barplot(
  height = TDFturbidez$hi,
  names.arg = TDFturbidez$Mc,
  space = 0,
  col = "skyblue",
  main = "Gráfica N°3: Distribución porcentual de frecuencias\nrelativas para turbidez",
  xlab = "Turbidez en el agua (%)",
  ylab = "Porcentaje (%)",
  ylim = c(0, 12),
  las = 2,               
  cex.names = 0.8        
)

#GRÁFICAS EN PARTES
# Filtrar datos positivos
Turbidez_positiva <- na.omit(Turbidez[Turbidez > 0])

# Gráfico 2: Rango [2.25, 3.25]
#Log normal
#  Filtrar el subconjunto en el rango de interés
subset_ln <- Turbidez_positiva[Turbidez_positiva >= 2.25 & Turbidez_positiva <= 3.25]

#  Ajustar distribución log-normal (usando MLE)
library(fitdistrplus)
## Loading required package: MASS
## Loading required package: survival
ajuste_ln <- fitdist(subset_ln, "lnorm", method = "mle")
mu_ln  <- ajuste_ln$estimate["meanlog"]
sd_ln  <- ajuste_ln$estimate["sdlog"]

# Verificar parámetros
print(ajuste_ln)
## Fitting of the distribution ' lnorm ' by maximum likelihood 
## Parameters:
##          estimate  Std. Error
## meanlog 1.0089803 0.004180973
## sdlog   0.1059363 0.002955209
#  Histograma
hist_ln <- hist(subset_ln,
                breaks = 4,
                freq = FALSE,
                main = "Modelo Log-Normal - Turbidez (2.25 a 3.25)",
                xlab = "Turbidez (NTU)",
                ylab = "Densidad",
                col = "lightblue",
                border = "gray",
                ylim = c(0, 1))

#  Agregar curva log-normal ajustada (NO multiplicar por 0.7 aquí)
curve(0.7*dlnorm(x, meanlog = mu_ln, sdlog = sd_ln),
      from = min(subset_ln), to = max(subset_ln),
      col = "darkgreen", lwd = 2, add = TRUE)

##Test

#  Obtener frecuencias observadas (absolutas)
hist_ln <- hist(subset_ln, breaks = 5, plot = FALSE)
FO <- hist_ln$counts
breaks_ln <- hist_ln$breaks
n <- sum(FO)
k <- length(FO)

# Calcular frecuencias esperadas bajo log-normal
FE <- numeric(k)
for (i in 1:k) {
  P <- plnorm(breaks_ln[i + 1], meanlog = mu_ln, sdlog = sd_ln) -
    plnorm(breaks_ln[i], meanlog = mu_ln, sdlog = sd_ln)
  FE[i] <- P * n
}

# 2 Test de pearson
pearson_ln <- cor(FO, FE)
print(paste("Correlación Pearson:", round(pearson_ln, 4)))
## [1] "Correlación Pearson: 0.7635"
plot(FO,FE,main="Gráfica: Correlación de frecuencias en el modelo lognormal
                 de superficie",xlab="Frecuencia Observada",ylab="Frecuencia esperada",col="blue3")
abline(lm(FO ~ FE), col="red",lwd=2)

# 2.1 Test chi-cuadrado (con frecuencias absolutas)
x2 <- sum((FO - FE)^2 / FE)
gl <- k - 1
nivel_significancia <- 0.05
umbral_aceptacion <- qchisq(1 - nivel_significancia, gl)
resultado_chi <- x2 < umbral_aceptacion
cat("¿Se acepta H0 (buen ajuste)?", resultado_chi, "\n")
## ¿Se acepta H0 (buen ajuste)? FALSE
x2<umbral_aceptacion
## [1] FALSE

#Calculo de probabilidades

# 3 Cálculo de probabilidades
plot(1, type = "n", axes = FALSE, xlab = "", ylab = "") 
text(x = 1, y = 1, 
     labels ="¿Cuál es la probabilidad de que, al 
   seleccionar aleatoriamente una muestra, 
      se encuentre entre 2.5 y 3.0 (NTU) 
  asumiendo un modelo de distribución
      log normal?  R: 30.72 %",
     cex = 2,  # Tamaño del texto (ajustable)
     col = "blue",  # Color del texto
     font = 6) #tipo

# Parámetros ajustados del modelo log-normal
mu_ln <- 0.9     # media logarítmica
sd_ln <- 0.2     # desviación estándar logarítmica

# Calcular probabilidad entre 2.5 y 3.0 NTU
P_ln_2.5_3.0 <- plnorm(3.0, meanlog = mu_ln, sdlog = sd_ln) -
  plnorm(2.5, meanlog = mu_ln, sdlog = sd_ln)
P_ln_2.5_3.0 * 100  # Probabilidad en porcentaje
## [1] 30.72006
# Gráfico de la distribución con área sombreada
x <- seq(2, 4, 0.01)
y <- dlnorm(x, meanlog = mu_ln, sdlog = sd_ln)

plot(x, y,
     type = "l",
     lwd = 2,
     col = "darkgreen",
     xlab = "Turbidez (NTU)",
     ylab = "Densidad de probabilidad",
     main = "Modelo Log-Normal: P(2.5 ≤ X ≤ 3.0)")

# Área sombreada entre 2.5 y 3.0
x_sombra <- seq(2.5, 3.0, 0.01)
y_sombra <- dlnorm(x_sombra, meanlog = mu_ln, sdlog = sd_ln)

polygon(c(x_sombra, rev(x_sombra)),
        c(y_sombra, rep(0, length(y_sombra))),
        col = rgb(1, 0, 0, 0.5),
        border = NA)

legend("topright",
       legend = c("Curva Log-Normal", "Área de Probabilidad"),
       col = c("darkgreen", "red"),
       lwd = 2,
       bty = "n",
       cex = 0.8)

##Intervalos de confianza

##Conclusiones

plot(1, type = "n", axes = FALSE, xlab = "", ylab = "") 
text(x = 1, y = 1, 
     labels = "CONCLUSIONES",
     cex = 2,  
     col = "blue",  
     font = 6) 

#Tabla de test
Variable<-c("Turbidez")
tabla_resumen<-data.frame(Variable,round(pearson_ln,2),round(x2,2)
                          ,round(umbral_aceptacion,2))
colnames(tabla_resumen)<-c("Variable","Test Pearson (%)","Chi Cuadrado","Umbral de aceptación")
library(knitr)
kable(tabla_resumen, format = "markdown", caption = "Tabla.Resumen de test de bondad al modelo de probabilidad")
Tabla.Resumen de test de bondad al modelo de probabilidad
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Turbidez 0.76 78.3 11.07
#Tabla de resumen
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. media poblacional")
Tabla. media poblacional
Limite superior Media poblacional Límite superior Desviación estándar poblacional
2.74 Turbidez 2.78 0.0114121