2. TABLA DE DISTRIBUCION AGRUPADA
# Clasificacion manual en rangos de 8 anios
clasificacion <- character(length(vida_util))
for(i in seq_along(vida_util)){
if(!is.na(vida_util[i])){
if(vida_util[i] >= 25 & vida_util[i] < 33){
clasificacion[i] <- "25-32"
} else if(vida_util[i] >= 33 & vida_util[i] < 41){
clasificacion[i] <- "33-40"
} else if(vida_util[i] >= 41 & vida_util[i] < 49){
clasificacion[i] <- "41-48"
} else if(vida_util[i] >= 49 & vida_util[i] < 57){
clasificacion[i] <- "49-56"
} else if(vida_util[i] >= 57 & vida_util[i] < 65){
clasificacion[i] <- "57-64"
} else if(vida_util[i] >= 65 & vida_util[i] <= 75){
clasificacion[i] <- "65-75"
} else {
clasificacion[i] <- NA
}
} else {
clasificacion[i] <- NA
}
}
clasificacion <- na.omit(clasificacion)
orden_intervalos <- c("25-32", "33-40", "41-48", "49-56", "57-64", "65-75")
clasificacion <- factor(clasificacion, levels = orden_intervalos)
# Calculos de frecuencias
ni <- table(clasificacion)
total_datos <- sum(ni)
hi <- round(as.numeric(ni) / total_datos * 100, 2)
Ni_asc <- cumsum(ni)
Hi_asc <- cumsum(hi)
Ni_des <- rev(cumsum(rev(ni)))
Hi_des <- rev(cumsum(rev(hi)))
# Tabla Final
TDF_Completa <- data.frame(Intervalo = orden_intervalos, ni = as.numeric(ni), hi = hi,
Ni_asc = as.numeric(Ni_asc), Hi_asc = round(Hi_asc, 2),
Ni_des = as.numeric(Ni_des), Hi_des = round(Hi_des, 2))
TDF_Final <- rbind(TDF_Completa, data.frame(Intervalo="TOTAL", ni=total_datos, hi=100,
Ni_asc=NA, Hi_asc=NA, Ni_des=NA, Hi_des=NA))
kable(TDF_Final, format = "markdown", caption = "Tabla N.1: Frecuencias de Vida Util Estimada")
Tabla N.1: Frecuencias de Vida Util Estimada
| 25-32 |
178 |
1.42 |
178 |
1.42 |
12561 |
100.00 |
| 33-40 |
0 |
0.00 |
178 |
1.42 |
12383 |
98.58 |
| 41-48 |
0 |
0.00 |
178 |
1.42 |
12383 |
98.58 |
| 49-56 |
10586 |
84.28 |
10764 |
85.70 |
12383 |
98.58 |
| 57-64 |
817 |
6.50 |
11581 |
92.20 |
1797 |
14.30 |
| 65-75 |
980 |
7.80 |
12561 |
100.00 |
980 |
7.80 |
| TOTAL |
12561 |
100.00 |
NA |
NA |
NA |
NA |
3. GRAFICAS DE DISTRIBUCION
# Colores personalizados
color_abs <- "#76D7C4"
color_rel <- "#F1948A"
par(mfrow=c(1,1))
# Grafica 1: Absoluta Local
barplot(ni, names.arg = orden_intervalos, las = 2, col = color_abs,
xlab = "Vida util estimada", ylab = "Cantidad",
main = "Grafica N.1: Distribucion de frecuencia absoluta local")

# Grafica 2: Absoluta Global
barplot(ni, names.arg = orden_intervalos, las = 2, col = "darkgrey",
ylim = c(0, total_datos), xlab = "Vida util estimada", ylab = "Cantidad",
main = "Grafica N.2: Distribucion de frecuencia absoluta global")

# Grafica 3: Relativa Local
barplot(hi, names.arg = orden_intervalos, las = 2, col = color_rel,
xlab = "Vida util estimada", ylab = "Porcentaje (%)",
main = "Grafica N.3: Distribucion de frecuencia relativa local")

# Grafica 4: Relativa Global
barplot(hi, names.arg = orden_intervalos, las = 2, col = "grey50",
ylim = c(0, 100), xlab = "Vida util estimada", ylab = "Porcentaje (%)",
main = "Grafica N.4: Distribucion de frecuencia relativa global")

# OJIVAS
posicion_x <- 1:length(ni)
# Grafica 5: Ojiva Ni
plot(posicion_x, Ni_asc, type = "o", pch = 19, col = "blue", xaxt = "n",
xlab = "Vida util estimada", ylab = "Frecuencia acumulada",
main = "Grafica N.5: Ojivas combinadas Ni")
axis(1, at = posicion_x, labels = orden_intervalos, las = 2)
lines(posicion_x, Ni_des, type = "o", pch = 18, col = "red")
legend("right", legend = c("Ascendente", "Descendente"), col = c("blue", "red"), pch = c(19, 18), bty = "n")

# Grafica 6: Ojiva Hi
plot(posicion_x, Hi_asc, type = "o", pch = 19, col = "blue", xaxt = "n", ylim = c(0, 100),
xlab = "Vida util estimada", ylab = "Porcentaje acumulado",
main = "Grafica N.6: Ojivas combinadas Hi")
axis(1, at = posicion_x, labels = orden_intervalos, las = 2)
lines(posicion_x, Hi_des, type = "o", pch = 18, col = "black")
legend("right", legend = c("Ascendente", "Descendente"), col = c("blue", "black"), pch = c(19, 18), bty = "n")

# Grafica 7: Boxplot
boxplot(vida_util, horizontal = TRUE, col = "lightblue",
xlab = "Anios", main = "Grafica N.7: Boxplot de Vida Util")

4. INDICADORES ESTADISTICOS
# Calculos
media_x <- mean(vida_util, na.rm = TRUE)
val_min <- min(vida_util, na.rm = TRUE)
val_max <- max(vida_util, na.rm = TRUE)
mediana_Me <- median(vida_util, na.rm = TRUE)
desv_estandar <- sd(vida_util, na.rm = TRUE)
coef_variacion <- ((desv_estandar / media_x) * 100)
asimetria_As <- skewness(vida_util, na.rm = TRUE)
curtosis_K <- kurtosis(vida_util, na.rm = TRUE)
# Tabla Indicadores
TablaIndicadores <- data.frame("Vida Util Estimada", val_min, val_max, round(media_x, 2),
mediana_Me, round(desv_estandar, 2),
round(coef_variacion, 2), round(asimetria_As, 2),
round(curtosis_K, 2))
colnames(TablaIndicadores) <- c("Variable", "minimo", "maximo", "x", "Me", "sd", "Cv (%)", "As", "K")
kable(TablaIndicadores, format = "markdown", caption = "Tabla N.3: Indicadores estadisticos")
Tabla N.3: Indicadores estadisticos
| Vida Util Estimada |
25 |
73 |
51.86 |
50 |
6.3 |
12.14 |
0.51 |
5.89 |
# Tabla Outliers
valores_atipicos <- boxplot.stats(vida_util)$out
n_atipicos <- length(valores_atipicos)
min_atipico <- if(n_atipicos > 0) min(valores_atipicos) else 0
max_atipico <- if(n_atipicos > 0) max(valores_atipicos) else 0
TablaOutliers <- data.frame(n_atipicos, min_atipico, max_atipico)
colnames(TablaOutliers) <- c("Outliers", "Minimo", "Maximo")
kable(TablaOutliers, format = "markdown", caption = "Tabla N.4: Analisis de valores atipicos")
Tabla N.4: Analisis de valores atipicos
| 2352 |
25 |
73 |