#==============================ENCABEZADO===================================
# TEMA: EI Variables Continua - Vida Estimada
# AUTOR: GRUPO 4
# FECHA: 18-12-2025
#==============================CARGA DE DATOS===================================
library(dplyr)
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
setwd("C:/Users/HP/Documents/PROYECTO ESTADISTICA/RStudio")
datos <- read.csv("tablap.csv", header = TRUE, dec = ".", sep = ";")
# Limpieza de caracteres no numericos y filtrado de rango (25-80 anios)
v_util_raw <- as.numeric(gsub("[^0-9.]", "", as.character(datos$Estimated.lifetime)))
df_limpio <- data.frame(VU = v_util_raw) %>% filter(!is.na(VU) & VU >= 25 & VU <= 80)
# Creamos la tabla
cortes_evid <- seq(25, 85, by = 5)
df_limpio$RangoEvid <- cut(df_limpio$VU, breaks = cortes_evid, right = FALSE)
tabla_evid <- as.data.frame(table(df_limpio$RangoEvid)) %>%
mutate(hi = (Freq/sum(Freq))*100)
#Grafica original, para vizualizar de manera general como dividir a la grafica
barplot(tabla_evid$hi, names.arg = tabla_evid$Var1, col = "gray50",
main = "Grafica Nro. 1: Distribucion de Vida Estimada",
xlab = "Vida Estimada (Rangos)", ylab = "hi (%)", las = 2, cex.names = 0.8)

#El modelo se dividio en dos partes: Modelo uniforme y Modelo Geometrico
# ANALISIS PARTE A: MODELO UNIFORME (RANGO 25-50)
#=============MNODELO UNIFORME================
# Paso 1: Justificacion
#JUSTIFICACION: esta Variable es discreta debido a que su dominio son D={x/x ??? ???}")
# Paso 2: TDF
# se agrupo en un dos rangos de (25-30) y de (38-49)
df_a <- df_limpio %>% filter(VU < 50)
tabla_a <- as.data.frame(table(cut(df_a$VU, breaks = c(25, 38, 50), right = FALSE))) %>%
rename(Rango = Var1, ni = Freq)
levels(tabla_a$Rango) <- c("25-37", "38-49")
tdf_a <- tabla_a %>% mutate(hi = ni / sum(ni))
print(tdf_a)
## Rango ni hi
## 1 25-37 178 1
## 2 38-49 0 0
# Paso 3: Grafica Realidad
barplot(tdf_a$hi * 100, names.arg = tdf_a$Rango, col = "skyblue", ylim = c(0, 100),
main = "Grafica Nro. 2: Distribucion de Vida Estimada",
xlab = "Vida Estimada", ylab = "hi (%)")
legend("topright", legend = "Realidad", fill = "skyblue", bty = "n")

# Paso 4: Conjeturamos
p_unif_a <- rep(1 / nrow(tdf_a), nrow(tdf_a))
# Paso 5: Comparamos le realidad con el modelo
pos_a <- barplot(rbind(tdf_a$hi * 100, p_unif_a * 100), beside = TRUE, col = c("skyblue", "orange"),
main = "Grafica Nro. 2:Distribucion de Realidad vs Modelo ",
xlab = "Vida estimada", ylab = "Probabilidad (%)", ylim = c(0, 100))
axis(1, at = colMeans(pos_a), labels = tdf_a$Rango, cex.axis = 0.8)
legend("topright", legend = c("Real", "Modelo"), fill = c("skyblue", "orange"), bty = "n")

# Paso 6: Tests Pearson y chi cuadrado
x2_a <- sum(((tdf_a$hi - p_unif_a)^2) / p_unif_a)
vc_a <- qchisq(0.999, df = nrow(tdf_a) - 1)
#Aqui la grafica de dispersion presenta dos puntos esto se debe a que como es un modeo uniforme entonces tiende a ser
#una linea recta
plot(tdf_a$hi, p_unif_a, xlab = "Realidad (hi)", ylab = "Modelo (P)",
main = "Grafica Nro. 3: Dispersion de Vida Estimada", pch = 19, col = "blue", ylim = c(0, 1))

#en este codigo se genero una tabla de veredicto aqui se pude visualizar y relaizar la comparacion de los resultados
#ya sea de poison y chi cuadrado y ver si aprobo o no los test
#en pearson sale el valor de (-) esto se debe a que como es uniforme entonces la desviacion estandar es cero
#el valor critico es de 10.82 entonces como chi cuadrado es menor que el valor critico entonces aprueba el modelo
print(data.frame(Prueba=c("Pearson (r)", "Chi2"), Valor=c("-", round(x2_a, 6)),
Resultado=c(" APROBADO", ifelse(x2_a < vc_a, "APROBADO", "REPROBADO"))), row.names=F)
## Prueba Valor Resultado
## Pearson (r) - APROBADO
## Chi2 1 APROBADO
#=============MODELO GEOMETRICO================
#Paso 1: "JUSTIFICACION: esta Variable es discreta debido a que su dominio son D={x/x ??? ???}")
# Paso 2: TDF (Se agrupo con intervalos de 5 en 5)
df_b <- df_limpio %>% filter(VU >= 50)
tabla_b <- as.data.frame(table(cut(df_b$VU, breaks = seq(50, 85, by = 5), right = FALSE))) %>%
rename(Rango = Var1, ni = Freq)
tdf_b <- tabla_b %>% mutate(hi = ni / sum(ni))
print(tdf_b)
## Rango ni hi
## 1 [50,55) 10460 0.84470645
## 2 [55,60) 394 0.03181781
## 3 [60,65) 549 0.04433498
## 4 [65,70) 699 0.05644836
## 5 [70,75) 281 0.02269240
## 6 [75,80) 0 0.00000000
## 7 [80,85) 0 0.00000000
# Paso 3: Grafica original, para vizualizar de manera general como dividir a la grafica
barplot(tdf_b$hi * 100, names.arg = tdf_b$Rango, col = "green4", ylim = c(0, 100),
main = "Grafica Nro. 4: Distribucion de Vida Estimada",
xlab = "Vida Estimada", ylab = "hi (%)", las = 2, cex.names = 0.7)
legend("topright", legend = "Realidad", fill = "green4", bty = "n")

# Paso 4: Conjeturamos de acuerdo al modelo geometrico
xi_b <- 0:(nrow(tdf_b)-1)
p_param <- 1 / (sum(xi_b * tdf_b$hi) + 1)
prob_geom_b <- dgeom(xi_b, prob = p_param)
# Paso 5: Comparacion de grafica
pos_b <- barplot(rbind(tdf_b$hi * 100, prob_geom_b * 100), beside = TRUE, col = c("green4", "gold"),
main = "Grafica Nro. 5: Comparacion del Modelo Geometrico con la Realidad",
xlab = "Rangos", ylab = "Porcentaje", ylim = c(0, 100))
axis(1, at = colMeans(pos_b), labels = tdf_b$Rango, las = 2, cex.axis = 0.7)
legend("topright", legend = c("Real", "Modelo"), fill = c("green4", "gold"), bty = "n")

# Paso 6: Tests
#Person:
r_b <- cor(tdf_b$hi, prob_geom_b)
plot(tdf_b$hi, prob_geom_b, xlab = "Observado (hi)", ylab = "Esperado (P)",
main = "Grafica Nro. 6: Dispersion y Regresion (B)", pch = 19, col = "green4")
abline(lm(prob_geom_b ~ tdf_b$hi), col = "red", lwd = 2)
text(x = mean(tdf_b$hi), y = max(prob_geom_b), labels = paste("r =", round(r_b, 4)), col = "red", font = 2)

#chi cuadrado
x2_b <- sum(((tdf_b$hi - prob_geom_b)^2) / pmax(prob_geom_b, 0.0001))
vc_b <- qchisq(0.9999, df = nrow(tdf_b) - 1)
#Tabla veredicto
print(data.frame(Prueba=c("Pearson (r)", "Chi2"), Valor=c(round(r_b, 4), round(x2_b, 6)),
Resultado=c(ifelse(r_b > 0.7, "APROBADO", "REPROBADO"),
ifelse(x2_b < vc_b, "APROBADO", "REPROBADO"))), row.names=F)
## Prueba Valor Resultado
## Pearson (r) 0.966500 APROBADO
## Chi2 0.358817 APROBADO
# Paso 8: Pregunta de Probabilidad
ubicacion_p8 <- 1 # Ejemplo: segundo rango (55-60)
cat("\n8. PREGUNTA: Probabilidad calculada para la ubicacion", ubicacion_p8, "es:", round(dgeom(ubicacion_p8, p_param)*100, 2), "%\n")
##
## 8. PREGUNTA: Probabilidad calculada para la ubicacion 1 es: 19.97 %