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")
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")
Limite superior | Media poblacional | Límite superior | Desviación estándar poblacional |
---|---|---|---|
0.99 | Turbidez | 1.04 | 0.0141565 |