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 1: Rango [0.25, 1.75]
subset1 <- Turbidez_positiva[Turbidez_positiva >= 0.25 & Turbidez_positiva <= 1.75]
hist(subset1,
     breaks = 5,
     freq = FALSE,
     main = "Turbidez entre 0.25 y 1.75 NTU",
     xlab = "Turbidez (NTU)",
     ylab = "Densidad",
     col = "lightblue",
     border = "gray",
     ylim = c(0, 1))

# Ajuste de modelo para histograma Parámetros de la normal
mu1 <- mean(subset1)
sd1 <- sd(subset1)

# Histograma de densidad
hist1 <- hist(subset1,
              breaks = 5,
              freq = FALSE,
              main = "Turbidez entre 0.25 y 1.75 NTU - Modelo Normal",
              xlab = "Turbidez (NTU)",
              ylab = "Densidad",
              col = "lightblue",
              border = "gray",
              ylim = c(0, 1))

# Curva normal ajustada
curve(0.8*dnorm(x, mean = mu1, sd = sd1),
      from = 0.25, to = 1.75,
      col = "red", lwd = 2, add = TRUE)

##Test

# Obtener frecuencias observadas (FO)
FO1 <- hist1$counts

# Obtener intervalos (breaks) del histograma
breaks1 <- hist1$breaks

# Calcular frecuencias esperadas (FE) según modelo normal
FE1 <- c()
for (i in 1:(length(breaks1) - 1)) {
  P <- pnorm(breaks1[i + 1], mean = mu1, sd = sd1) - 
    pnorm(breaks1[i], mean = mu1, sd = sd1)
  FE1[i] <- P * length(subset1)
}

# Ver FO y FE
FO1
## [1] 138 312 314 149
round(FE1, 2)
## [1]  96.19 339.25 352.13 107.65
# 2 Test de Pearson (correlación)
cor_pearson1 <- cor(FO1, FE1)
cor_pearson1  # Si es > 0.75 → buen ajuste
## [1] 0.9994998
# 2.1Test de Chi-cuadrado
X2_1 <- sum((FO1 - FE1)^2 / FE1)
chi_1 <- qchisq(0.999999999999, df = length(FO1) - 1)
X2_1 > chi_1  # TRUE → rechaza H0 (no se ajusta)
## [1] FALSE
X2_1
## [1] 40.36877
chi_1
## [1] 58.9198
plot(FO1,FE1,main="Gráfica: Correlación de frecuencias en el modelo normal
                 de superficie",xlab="Frecuencia Observada",ylab="Frecuencia esperada",col="blue3")
abline(lm(FE1 ~ FO1), col="red",lwd=2)

# Grados de libertad
k<-4
gl <- k - 1  # Para modelo uniforme
gl
## [1] 3
nivel_significancia <- 0.05
X2_1
## [1] 40.36877
n <- sum(hist1$counts)
FO1<-(hist1$counts/n)*100
FO1
## [1] 15.11501 34.17306 34.39211 16.31982
sum(FO1)
## [1] 100
FE1<-P*100
FE1
## [1] 11.79081
sum(FE1)
## [1] 11.79081
x2<-sum((FE1-FO1)^2/FE1)
x2
## [1] 88.488
#  Valor crítico para nivel de significancia del 5%
valor_critico <- qchisq(0.95, df = gl)
valor_critico
## [1] 7.814728
X2_1 > valor_critico # Aprueba
## [1] TRUE

#Calculo de probabilidades

# 3 Calculo 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 una muestra de agua,
    la turbidez esté entre 1.0 y 1.5NTU?
                R: 38.56 %",
     cex = 2,  
     col = "blue",  
     font = 6) 

P_normal_1_1.5 <- (pnorm(1.5, mu1, sd1) - pnorm(1.0, mu1, sd1)) * 100
P_normal_1_1.5
## [1] 38.56834
media1 <- mean(subset1)
sd1 <- sd(subset1)

# Secuencia de valores de x (turbidez)
x <- seq(0, 2, 0.001)

# Densidad de la curva normal
y <- dnorm(x, mean = mu1, sd = sd1)

# Crear el gráfico de densidad normal
plot(x, y,
     type = "l",
     col = "skyblue3",
     lwd = 2,
     xlab = "Turbidez (NTU)",
     ylab = "Densidad de probabilidad",
     main = "Gráfica. Cálculo de Probabilidad entre 1.0 y 1.5 NTU")

# Definir el rango de la sección que quieres sombrear
x_sombra <- seq(1.0, 1.5, 0.001)
y_sombra <- dnorm(x_sombra, mean = mu1, sd = sd1)

# Pintar la curva del área sombreada
lines(x_sombra, y_sombra, col = "red", lwd = 2)

# Sombrear el área bajo la curva entre 1.0 y 1.5
polygon(c(x_sombra, rev(x_sombra)),
        c(y_sombra, rep(0, length(y_sombra))),
        col = rgb(1, 0, 0, 0.5), border = NA)

# Añadir leyenda
legend("topright",
       legend = c("Modelo Normal", "Área de Probabilidad"),
       col = c("skyblue3", "red"),
       lwd = 2,
       bty = "n",
       cex = 0.7)

##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 resumen de test
Variable<-c("Turbidez")
tabla_resumen<-data.frame(Variable,cor_pearson1,round(X2_1,2),round(valor_critico,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.9994998 40.37 7.81
# Tabla resumen
tabla_media<-data.frame(round(li1,2),Variable,round(ls1,2),e1)
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
0.99 Turbidez 1.04 0.0141565