Inicialmente se cargan todos los paquetes necesarios:
library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.5.2
## Warning: package 'ggplot2' was built under R version 4.5.2
## Warning: package 'tidyr' was built under R version 4.5.2
## Warning: package 'readr' was built under R version 4.5.2
## Warning: package 'purrr' was built under R version 4.5.2
## Warning: package 'forcats' was built under R version 4.5.2
## Warning: package 'lubridate' was built under R version 4.5.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.1 ✔ stringr 1.5.2
## ✔ ggplot2 4.0.0 ✔ tibble 3.3.0
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.1.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(lubridate)
library(fitdistrplus)
## Warning: package 'fitdistrplus' was built under R version 4.5.2
## Cargando paquete requerido: MASS
##
## Adjuntando el paquete: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
##
## Cargando paquete requerido: survival
library(dplyr)
library(readxl)
## Warning: package 'readxl' was built under R version 4.5.2
library(readxl)
library(dplyr)
X440287_1_2025_2_Grupo29_Tarea1 <- read_excel("C:/Users/vicen/Desktop/440287-1 2025-2 Grupo29 Tarea1.xlsx")
View(X440287_1_2025_2_Grupo29_Tarea1)
1.- ¿Cómo ha ido cambiando los parámetros de Weibull del equipo en los últimos 4 semestres?
Lo primero que se realiza es un data frame para ordenar los datos de detención operacional y partida operacional desde el semestre 2023-1 hasta el semestre 2024-2, tomando como primer semestre el 2023-1.
X440287_1_2025_2_Grupo29_Tarea1 %>% arrange(`Detención Operacional`)
Luego este Dataframe general se divide en 4 dataframes distintos que contienen los datos de los 4 semestres de interés.
Datos_S1 <- subset(X440287_1_2025_2_Grupo29_Tarea1, Revisión == "2023-1")
Datos_S2 <- subset(X440287_1_2025_2_Grupo29_Tarea1, Revisión == "2023-2")
Datos_S3 <- subset(X440287_1_2025_2_Grupo29_Tarea1, Revisión == "2024-1")
Datos_S4 <- subset(X440287_1_2025_2_Grupo29_Tarea1, Revisión == "2024-2")
Datos_S1
Datos_S2
Datos_S3
Datos_S4
Para cada semestre se realiza el mismo procedimiento que consiste en realizar un dataframe y un vector. El dataframe se conforma realizando la diferencia de tiempos que corresponda a cada indicador transformando de formato fecha a formato número, para luego generar un vector con todos los valores del dataframe.
A continuación se calcula el indicador de mantenimiento UT para todos los semestres:
UT_S1 <- data.frame(UT=difftime(lead(Datos_S1 $`Detención Operacional`), Datos_S1 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
UT_S1 <- as.data.frame(lapply(UT_S1, as.double))
UT_20231 <- head(UT_S1, 25) %>% drop_na() %>% as.vector() %>% unlist()
UT_S2 <- data.frame(UT=difftime(lead(Datos_S2 $`Detención Operacional`), Datos_S2 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
UT_S2 <- as.data.frame(lapply(UT_S2, as.double))
UT_20232 <- head(UT_S2, 25) %>% drop_na() %>% as.vector() %>% unlist()
UT_S3 <- data.frame(UT=difftime(lead(Datos_S3 $`Detención Operacional`), Datos_S3 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
UT_S3 <- as.data.frame(lapply(UT_S3, as.double))
UT_20241 <- head(UT_S3, 25) %>% drop_na() %>% as.vector() %>% unlist()
UT_S4 <- data.frame(UT=difftime(lead(Datos_S4 $`Detención Operacional`), Datos_S4 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
UT_S4<- as.data.frame(lapply(UT_S4, as.double))
UT_20242 <- head(UT_S4, 25) %>% drop_na() %>% as.vector() %>% unlist()
)) %>% lapply(as.double) %>% as.data.frame() UT_S4<- as.data.frame(lapply(UT_S4, as.double)) UT_20242 <- head(UT_S4, 25) %>% drop_na() %>% as.vector() %>% unlist()
<!-- rnb-source-end -->
A continuación se calcula el indicador de mantenimiento DT para todos los semestres:
``` r
DT_S1 <- data.frame(DT=difftime(Datos_S1 $`Partida Operacional`, Datos_S1 $`Detención Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
DT_S1 <- as.data.frame(lapply(DT_S1, as.double))
DT_20231 <- head(DT_S1, 25) %>% drop_na() %>% as.vector() %>% unlist()
DT_S2 <- data.frame(DT=difftime(Datos_S2 $`Partida Operacional`, Datos_S2 $`Detención Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
DT_S2 <- as.data.frame(lapply(DT_S2, as.double))
DT_20232 <- head(DT_S2, 25) %>% drop_na() %>% as.vector() %>% unlist()
DT_S3 <- data.frame(DT=difftime(Datos_S3 $`Partida Operacional`, Datos_S3 $`Detención Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
DT_S3 <- as.data.frame(lapply(DT_S3, as.double))
DT_20241 <- head(DT_S3, 25) %>% drop_na() %>% as.vector() %>% unlist()
DT_S4 <- data.frame(DT=difftime(Datos_S4 $`Partida Operacional`, Datos_S4 $`Detención Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
DT_S4 <- as.data.frame(lapply(DT_S4, as.double))
DT_20242 <- head(DT_S4, 25) %>% drop_na() %>% as.vector() %>% unlist()
)) %>% lapply(as.double) %>% as.data.frame() DT_S4 <- as.data.frame(lapply(DT_S4, as.double)) DT_20242 <- head(DT_S4, 25) %>% drop_na() %>% as.vector() %>% unlist()
<!-- rnb-source-end -->
A continuación se calcula el indicador de mantenimiento TBF para todos los semestres:
``` r
TBF_S1 <- data.frame(TBF=difftime(lead(Datos_S1$`Detención Operacional`), Datos_S1$`Detención Operacional`, units = "hours"))
TBF_S1 <- as.data.frame(lapply(TBF_S1, as.double))
TBF_20231 <- head(TBF_S1, 25) %>% drop_na() %>% as.vector() %>% unlist()
TBF_S2 <- data.frame(TBF=difftime(lead(Datos_S2$`Detención Operacional`), Datos_S2$`Detención Operacional`, units = "hours"))
TBF_S2 <- as.data.frame(lapply(TBF_S2, as.double))
TBF_20232 <- head(TBF_S2, 22) %>% drop_na() %>% as.vector() %>% unlist()
TBF_S3 <- data.frame(TBF=difftime(lead(Datos_S3$`Detención Operacional`), Datos_S3$`Detención Operacional`, units = "hours"))
TBF_S3 <- as.data.frame(lapply(TBF_S3, as.double))
TBF_20241 <- head(TBF_S3, 22) %>% drop_na() %>% as.vector() %>% unlist()
TBF_S4 <- data.frame(TBF=difftime(lead(Datos_S4$`Detención Operacional`), Datos_S4$`Detención Operacional`, units = "hours"))
TBF_S4 <- as.data.frame(lapply(TBF_S4, as.double))
TBF_20242 <- head(TBF_S4, 22) %>% drop_na() %>% as.vector() %>% unlist()
A continuación se calcula el indicador de mantenimiento TTR para todos los semestres:
TTR_S1 <- data.frame(TTR=difftime((Datos_S1 $`Fin Ejecución Orden`), Datos_S1 $`Inicio Ejecución Orden`, units = "hours"))
TTR_S1 <- as.data.frame(lapply(TTR_S1, as.double))
TTR_20231 <- head(TTR_S1, 25) %>% drop_na() %>% as.vector() %>% unlist()
TTR_S2 <- data.frame(TTR=difftime((Datos_S2 $`Fin Ejecución Orden`), Datos_S2 $`Inicio Ejecución Orden`, units = "hours"))
TTR_S2 <- as.data.frame(lapply(TTR_S2, as.double))
TTR_20232 <- head(TTR_S2, 25) %>% drop_na() %>% as.vector() %>% unlist()
TTR_S3 <- data.frame(TTR=difftime((Datos_S3 $`Fin Ejecución Orden`), Datos_S3 $`Inicio Ejecución Orden`, units = "hours"))
TTR_S3 <- as.data.frame(lapply(TTR_S3, as.double))
TTR_20241 <- head(TTR_S3, 25) %>% drop_na() %>% as.vector() %>% unlist()
TTR_S4 <- data.frame(TTR=difftime((Datos_S4 $`Fin Ejecución Orden`), Datos_S4 $`Inicio Ejecución Orden`, units = "hours"))
TTR_S4 <- as.data.frame(lapply(TTR_S4, as.double))
TTR_20242 <- head(TTR_S4, 25) %>% drop_na() %>% as.vector() %>% unlist()
A continuación se calculan los parametros de TTR y TBF correctivos y preventivos, para ello se realiza un Dataframe clasificando los valores según su clase o tipo de mantenimiento de la siguiente manera:
Fallas_CS1 <- Datos_S1 %>% filter(`Cl. Orden` == "PM01")
Fallas_Correctivas_S1 <- dplyr::select(Fallas_CS1, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_CS2 <- Datos_S2 %>% filter(`Cl. Orden` == "PM01")
Fallas_Correctivas_S2 <- dplyr::select(Fallas_CS2, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_CS3 <- Datos_S3 %>% filter(`Cl. Orden` == "PM01")
Fallas_Correctivas_S3 <- dplyr::select(Fallas_CS3, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_CS4 <- Datos_S4 %>% filter(`Cl. Orden` == "PM01")
Fallas_Correctivas_S4 <- dplyr::select(Fallas_CS4, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_PS1 <- Datos_S1 %>% filter(`Cl. Orden` == "PM02")
Fallas_Preventivas_S1 <- dplyr::select(Fallas_PS1, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_PS2 <- Datos_S2 %>% filter(`Cl. Orden` == "PM02")
Fallas_Preventivas_S2 <- dplyr::select(Fallas_PS2, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_PS3 <- Datos_S3 %>% filter(`Cl. Orden` == "PM02")
Fallas_Preventivas_S3 <- dplyr::select(Fallas_PS3, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
Fallas_PS4 <- Datos_S4 %>% filter(`Cl. Orden` == "PM02")
Fallas_Preventivas_S4 <- dplyr::select(Fallas_PS1, `Inicio Ejecución Orden`, `Fin Ejecución Orden`, `Detención Operacional`, `Partida Operacional`)
A continuación se calcula el indicador de mantenimiento TBMc para todos los semestres:
Correctivo_1 <- data.frame(Correctivo=difftime(lead(Fallas_Correctivas_S1 $`Detención Operacional`), Fallas_Correctivas_S1 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
TBMc_20231 <- na.omit(Correctivo_1) %>% as.vector() %>% unlist()
Correctivo_2 <- data.frame(Correctivo=difftime(lead(Fallas_Correctivas_S2 $`Detención Operacional`), Fallas_Correctivas_S2 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
TBMc_20232 <- na.omit(Correctivo_2) %>% as.vector() %>% unlist()
Correctivo_3 <- data.frame(Correctivo=difftime(lead(Fallas_Correctivas_S3 $`Detención Operacional`), Fallas_Correctivas_S3 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
TBMc_20241 <- na.omit(Correctivo_3) %>% as.vector() %>% unlist()
Correctivo_4 <- data.frame(Correctivo=difftime(lead(Fallas_Correctivas_S4 $`Detención Operacional`), Fallas_Correctivas_S4 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
TBMc_20242 <- na.omit(Correctivo_4) %>% as.vector() %>% unlist()
A continuación se calcula el indicador de mantenimiento TTRc para todos los semestres:
TTRc_20231 <- data.frame(TTR_c=difftime((Fallas_Correctivas_S1 $`Fin Ejecución Orden`), Fallas_Correctivas_S1 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRc_20232 <- data.frame(TTR_c=difftime((Fallas_Correctivas_S2 $`Fin Ejecución Orden`), Fallas_Correctivas_S2 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRc_20241 <- data.frame(TTR_c=difftime((Fallas_Correctivas_S3 $`Fin Ejecución Orden`), Fallas_Correctivas_S3 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRc_20242 <- data.frame(TTR_c=difftime((Fallas_Correctivas_S4 $`Fin Ejecución Orden`), Fallas_Correctivas_S4 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
A continuación se calcula el indicador de mantenimiento TBMp para todos los semestres: Para este caso se aplica el comando NA y na.omit para eliminar los posibles valores negativos que se puedan generar en el Dataframe y en el vector.
Preventivo_1 <- data.frame(Preventivo=difftime(lead(Fallas_Preventivas_S1 $`Detención Operacional`), Fallas_Preventivas_S1 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
Preventivo_1[Preventivo_1 < 0] <- NA
TBMp_20231 <- na.omit(Preventivo_1) %>% as.vector() %>% unlist()
Preventivo_2 <- data.frame(Preventivo=difftime(lead(Fallas_Preventivas_S2 $`Detención Operacional`), Fallas_Preventivas_S2 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
Preventivo_2[Preventivo_2 < 0] <- NA
TBMp_20232 <- na.omit(Preventivo_2) %>% as.vector() %>% unlist()
Preventivo_3 <- data.frame(Preventivo=difftime(lead(Fallas_Preventivas_S3 $`Detención Operacional`), Fallas_Preventivas_S3 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
Preventivo_3[Preventivo_3 < 0] <- NA
TBMp_20241 <- na.omit(Preventivo_3) %>% as.vector() %>% unlist()
Preventivo_4 <- data.frame(Preventivo=difftime(lead(Fallas_Preventivas_S4 $`Detención Operacional`), Fallas_Preventivas_S4 $`Partida Operacional`, units = "hours")) %>% lapply(as.double) %>% as.data.frame()
Preventivo_4[Preventivo_4 < 0] <- NA
TBMp_20242 <- na.omit(Preventivo_4) %>% as.vector() %>% unlist()
A continuación se calcula el indicador de mantenimiento TTRp para todos los semestres:
TTRp_20231 <- data.frame(TTM=difftime((Fallas_Preventivas_S1 $`Fin Ejecución Orden`), Fallas_Preventivas_S1 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRp_20232 <- data.frame(TTM=difftime((Fallas_Preventivas_S2 $`Fin Ejecución Orden`), Fallas_Preventivas_S2 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRp_20241 <- data.frame(TTM=difftime((Fallas_Preventivas_S3 $`Fin Ejecución Orden`), Fallas_Preventivas_S3 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
TTRp_20242 <- data.frame(TTM=difftime((Fallas_Preventivas_S4 $`Fin Ejecución Orden`), Fallas_Preventivas_S4 $`Inicio Ejecución Orden`, units = "hours")) %>% lapply(as.double) %>% as.data.frame() %>% as.vector() %>% unlist()
Una vez calculados todos los indicadores de mantenimiento se procede a calcular los parametros de Weibull para cada uno de ellos y se comparan en un grafico de barras que ilustre la diferencia entre los valores de beta y eta obtenidos.
A continuación los valores de beta y eta del indicador de mantenimiento UT:
library(dplyr)
ordena_sem <- function(df){
df %>% arrange(`Partida Operacional`, `Detención Operacional`)
}
compute_UT <- function(df){
df <- ordena_sem(df)
v <- as.numeric(difftime(lead(df$`Detención Operacional`),
df$`Partida Operacional`, units = "hours"))
v <- v[is.finite(v) & v > 0]
names(v) <- seq_along(v)
v
}
compute_DT <- function(df){
df <- ordena_sem(df)
v <- as.numeric(difftime(df$`Partida Operacional`,
df$`Detención Operacional`, units = "hours"))
v <- v[is.finite(v) & v > 0]
names(v) <- seq_along(v)
v
}
# aplica a tus cuatro semestres
UT_20231 <- compute_UT(Datos_S1); UT_20232 <- compute_UT(Datos_S2)
UT_20241 <- compute_UT(Datos_S3); UT_20242 <- compute_UT(Datos_S4)
DT_20231 <- compute_DT(Datos_S1); DT_20232 <- compute_DT(Datos_S2)
DT_20241 <- compute_DT(Datos_S3); DT_20242 <- compute_DT(Datos_S4)
UT_b_1 <- UT_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
UT_e_1 <- UT_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
UT_b_2 <- UT_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
UT_e_2 <- UT_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
UT_b_3 <- UT_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
UT_e_3 <- UT_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
UT_b_4 <- UT_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
UT_e_4 <- UT_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_UT <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(UT_b_1,UT_b_2,UT_b_3,UT_b_4))
e_UT <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(UT_e_1,UT_e_2,UT_e_3,UT_e_4))
ggplot(b_UT, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador UT en los ultimos 4 semestres')
ggplot(e_UT, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador UT en los ultimos 4 semestres')
Respuesta: Del análisis de confiabilidad realizado mediante el modelo de
distribución Weibull para el indicador de tiempo operativo (UT) en los
últimos cuatro semestres, se observa que el parámetro Beta (β) presenta
valores cercanos a 0,6 en todos los periodos. Esto indica que el
comportamiento de fallas del sistema se mantiene mayoritariamente
aleatorio, sin una tendencia clara hacia fallas por desgaste o
envejecimiento. En otras palabras, las fallas no responden a un patrón
progresivo de deterioro del equipo, sino a eventos puntuales o
condiciones externas de operación.
Por otra parte, el parámetro Eta (η) —que representa la vida característica o tiempo promedio de funcionamiento antes de una falla— muestra variaciones significativas entre semestres. En particular, durante el semestre 2024-1 se alcanza el valor más alto de η, lo que refleja mayor estabilidad y confiabilidad operativa en ese periodo. Sin embargo, en el semestre 2024-2 se aprecia una disminución considerable del parámetro, lo que sugiere una reducción en la duración promedio de los ciclos operativos y un aumento en la frecuencia de fallas o paradas no programadas.
A continuación los valores de beta y eta del indicador de mantenimiento DT:
DT_b_1 <- DT_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
DT_e_1 <- DT_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
DT_b_2 <- DT_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
DT_e_2 <- DT_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
DT_b_3 <- DT_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
DT_e_3 <- DT_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
DT_b_4 <- DT_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
DT_e_4 <- DT_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_DT <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(DT_b_1,DT_b_2,DT_b_3,DT_b_4))
e_DT <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(DT_e_1,DT_e_2,DT_e_3,DT_e_4))
ggplot(b_DT, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador DT en los ultimos 4 semestres')
ggplot(e_DT, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador DT en los ultimos 4 semestres')
Respuesta: A partir del análisis de los tiempos de detención (DT,
Downtime) modelados mediante la distribución Weibull, se observa que el
parámetro Beta (β) mantiene valores cercanos a 0,6 en los cuatro
semestres evaluados. Este comportamiento indica una tasa de fallas
aproximadamente constante, sin evidencia de un patrón de desgaste o
envejecimiento en los equipos. En otras palabras, las detenciones no
parecen ser consecuencia de deterioro progresivo, sino que se
distribuyen de manera aleatoria a lo largo del tiempo, posiblemente
asociadas a contingencias operacionales o a intervenciones puntuales del
proceso productivo.
Por su parte, el parámetro Eta (η) —que representa la vida característica o duración promedio entre detenciones— presenta variaciones importantes entre los semestres. Se observa un descenso notable durante el semestre 2024-1, lo que refleja una disminución en el tiempo promedio de operación antes de una detención, es decir, un aumento en la frecuencia de paradas. En cambio, durante el semestre 2024-2, η vuelve a incrementarse, evidenciando una recuperación en la estabilidad del sistema y una mayor continuidad operacional respecto al periodo anterior.
En conjunto, los resultados sugieren que el sistema mantiene un comportamiento estable en términos de modo de falla (β constante), pero con fluctuaciones en la duración promedio de las detenciones (η variable). Esto puede atribuirse a diferencias en la planificación o ejecución del mantenimiento, así como a factores externos de operación que afectan la continuidad del servicio. Se recomienda analizar las causas específicas de las detenciones durante los periodos de menor η, con el fin de reforzar las estrategias de mantenimiento preventivo y asegurar una operación más homogénea y confiable a lo largo del tiempo.
A continuación los valores de beta y eta del indicador de mantenimiento TBF:
clean_TBF <- function(x) {
x <- as.numeric(x)
x <- x[is.finite(x)]
x <- x[x > 0]
names(x) <- seq_along(x)
x
}
# Aplica la limpieza a todos los semestres
TBF_20231 <- clean_TBF(TBF_20231)
TBF_20232 <- clean_TBF(TBF_20232)
TBF_20241 <- clean_TBF(TBF_20241)
TBF_20242 <- clean_TBF(TBF_20242)
summary(TBF_20231)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.95 22.09 152.38 222.35 259.73 1116.77
summary(TBF_20232)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.25 30.52 100.14 405.50 305.69 2178.05
summary(TBF_20241)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 4.15 70.57 130.49 334.76 457.32 1514.92
summary(TBF_20242)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.15 67.05 98.55 367.27 650.82 1404.58
sapply(list(TBF_20231, TBF_20232, TBF_20241, TBF_20242),
function(v) any(!is.finite(v) | v <= 0))
## [1] FALSE FALSE FALSE FALSE
TBF_b_1 <- TBF_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBF_e_1 <- TBF_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBF_b_2 <- TBF_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBF_e_2 <- TBF_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBF_b_3 <- TBF_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBF_e_3 <- TBF_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBF_b_4 <- TBF_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBF_e_4 <- TBF_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TBF <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TBF_b_1,TBF_b_2,TBF_b_3,TBF_b_4))
e_TBF <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TBF_e_1,TBF_e_2,TBF_e_3,TBF_e_4))
ggplot(b_TBF, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TBF en los ultimos 4 semestres')
ggplot(e_TBF, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TBF en los ultimos 4 semestres')
Respuesta: El análisis Weibull del indicador TBF muestra una tendencia
positiva en la confiabilidad del sistema. El incremento sostenido de η
refleja una mayor duración promedio entre fallas, y los valores de β
cercanos a 1 evidencian que las fallas se están volviendo más
predecibles y menos aleatorias.
En términos operativos, se puede concluir que el sistema ha mejorado su estabilidad y confiabilidad a lo largo del tiempo, aunque aún es recomendable continuar con el seguimiento de las causas aleatorias de falla y consolidar el mantenimiento preventivo para alcanzar una condición más controlada y predecible.
A continuación los valores de beta y eta del indicador de mantenimiento TTR:
library(dplyr)
# Orden temporal consistente
ordena_sem <- function(df){
df %>% arrange(`Detención Operacional`, `Partida Operacional`)
}
# TTR en horas, dejando solo valores estrictamente positivos
compute_TTR <- function(df){
df <- ordena_sem(df)
v <- as.numeric(difftime(df$`Partida Operacional`,
df$`Detención Operacional`,
units = "hours"))
v <- v[is.finite(v) & v > 0]
names(v) <- seq_along(v)
v
}
# Recalcula por semestre (ajusta los nombres si usas otros)
TTR_20231 <- compute_TTR(Datos_S1)
TTR_20232 <- compute_TTR(Datos_S2)
TTR_20241 <- compute_TTR(Datos_S3)
TTR_20242 <- compute_TTR(Datos_S4)
# Chequeo rápido
sapply(list(TTR_20231,TTR_20232,TTR_20241,TTR_20242),
function(v) c(n=length(v), bad=any(!is.finite(v) | v<=0)))
## [,1] [,2] [,3] [,4]
## n 32 21 20 28
## bad 0 0 0 0
TTR_b_1 <- TTR_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTR_e_1 <- TTR_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTR_b_2 <- TTR_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTR_e_2 <- TTR_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTR_b_3 <- TTR_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTR_e_3 <- TTR_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTR_b_4 <- TTR_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTR_e_4 <- TTR_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TTR <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TTR_b_1,TTR_b_2,TTR_b_3,TTR_b_4))
e_TTR <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TTR_e_1,TTR_e_2,TTR_e_3,TTR_e_4))
ggplot(b_TTR, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TTR en los ultimos 4 semestres')
ggplot(e_TTR, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TTR en los ultimos 4 semestres')
Respuesta: El comportamiento del indicador TTR revela que los procesos
de reparación no presentan un patrón de degradación sostenido, y que la
duración media de las intervenciones ha variado entre semestres debido a
factores operacionales y de gestión. La estabilidad en los valores de β
y la recuperación de η en el último semestre sugieren una mejor
capacidad de respuesta ante fallas, aunque se recomienda continuar
optimizando los tiempos de reparación mediante una mejor planificación
de recursos, capacitación técnica y seguimiento de indicadores de
mantenimiento correctivo.
A continuación los valores de beta y eta del indicador de mantenimiento TBMc:
# Función de limpieza: elimina valores negativos, ceros, NA o infinitos
clean_pos <- function(x){
x <- as.numeric(x)
x <- x[is.finite(x) & x > 0] # solo valores positivos válidos
names(x) <- seq_along(x)
x
}
# Limpieza automática de todos los objetos TBMc_
objs_tbmc <- ls(pattern = "^TBMc_")
if (length(objs_tbmc)) {
tmp <- lapply(mget(objs_tbmc, inherits = TRUE), clean_pos)
list2env(tmp, envir = .GlobalEnv)
}
## <environment: R_GlobalEnv>
# Verificación: todos deben salir FALSE
if (length(objs_tbmc)) {
print(sapply(mget(objs_tbmc), function(v) any(!is.finite(v) | v <= 0)))
}
## TBMc_20231 TBMc_20232 TBMc_20241 TBMc_20242
## FALSE FALSE FALSE FALSE
TBMc_b_1 <- TBMc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMc_e_1 <- TBMc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMc_b_2 <- TBMc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMc_e_2 <- TBMc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMc_b_3 <- TBMc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMc_e_3 <- TBMc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMc_b_4 <- TBMc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMc_e_4 <- TBMc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TBMc <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TBMc_b_1,TBMc_b_2,TBMc_b_3,TBMc_b_4))
e_TBMc <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TBMc_e_1,TBMc_e_2,TBMc_e_3,TBMc_e_4))
ggplot(b_TBMc, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TBMc en los ultimos 4 semestres')
ggplot(e_TBMc, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TBMc en los ultimos 4 semestres')
Respuesta: El parámetro Beta (β) se mantuvo en valores cercanos a 0,7,
lo que indica un patrón de fallas aleatorio y no asociado al desgaste
progresivo del equipo. Esto sugiere que los mantenimientos correctivos
se presentan de manera esporádica, sin una tendencia clara al deterioro
acumulativo, lo cual es positivo desde el punto de vista de la
estabilidad operacional.
Por otro lado, el parámetro Eta (η), que representa el tiempo medio entre mantenimientos correctivos, mostró variaciones significativas entre semestres, alcanzando su valor más alto en el tercer semestre, seguido de una caída notoria en el cuarto. Este comportamiento evidencia fluctuaciones en la confiabilidad del sistema, posiblemente derivadas de factores como retrasos en la ejecución del mantenimiento preventivo, condiciones de operación más exigentes o la falta de disponibilidad de componentes críticos.
A continuación los valores de beta y eta del indicador de mantenimiento TTRc:
library(fitdistrplus)
clean_pos <- function(x){
x <- as.numeric(x)
x <- x[is.finite(x) & x > 0]
names(x) <- seq_along(x)
x
}
objs_ttrc <- ls(pattern = "^TTRc_")
if (length(objs_ttrc)) {
tmp <- lapply(mget(objs_ttrc, inherits = TRUE), clean_pos)
list2env(tmp, envir = .GlobalEnv)
}
## <environment: R_GlobalEnv>
fit_weibull_safe <- function(v){
v <- clean_pos(v)
if (length(v) < 2) return(c(Beta = NA_real_, Eta = NA_real_))
est <- fitdist(v, "weibull", method = "mle")$estimate
c(Beta = unname(est["shape"]), Eta = unname(est["scale"]))
}
ttrc_list <- list(
`1` = if (exists("TTRc_S1")) get("TTRc_S1") else numeric(),
`2` = if (exists("TTRc_S2")) get("TTRc_S2") else numeric(),
`3` = if (exists("TTRc_S3")) get("TTRc_S3") else numeric(),
`4` = if (exists("TTRc_S4")) get("TTRc_S4") else numeric()
)
fits <- lapply(ttrc_list, fit_weibull_safe)
pars <- do.call(rbind, fits)
b_TTRc <- data.frame(Semestre = rownames(pars), Beta = pars[,"Beta"], row.names = NULL)
e_TTRc <- data.frame(Semestre = rownames(pars), Eta = pars[,"Eta"], row.names = NULL)
print(b_TTRc); print(e_TTRc)
## Semestre Beta
## 1 1 NA
## 2 2 NA
## 3 3 NA
## 4 4 NA
## Semestre Eta
## 1 1 NA
## 2 2 NA
## 3 3 NA
## 4 4 NA
TTRc_b_1 <- TTRc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_1 <- TTRc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_2 <- TTRc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_2 <- TTRc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_3 <- TTRc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_3 <- TTRc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_4 <- TTRc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_4 <- TTRc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TTRc <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TTRc_b_1,TTRc_b_2,TTRc_b_3,TTRc_b_4))
e_TTRc <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TTRc_e_1,TTRc_e_2,TTRc_e_3,TTRc_e_4))
ggplot(b_TTRc, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TTRc en los ultimos 4 semestres')
ggplot(e_TTRc, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TTRc en los ultimos 4 semestres')
A continuación los valores de beta y eta del indicador de mantenimiento TBMp:
TBMp_b_1 <- TBMp_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMp_e_1 <- TBMp_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMp_b_2 <- TBMp_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMp_e_2 <- TBMp_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMp_b_3 <- TBMp_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMp_e_3 <- TBMp_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TBMp_b_4 <- TBMp_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TBMp_e_4 <- TBMp_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TBMp <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TBMp_b_1,TBMp_b_2,TBMp_b_3,TBMp_b_4))
e_TBMp <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TBMp_e_1,TBMp_e_2,TBMp_e_3,TBMp_e_4))
ggplot(b_TBMp, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TBMp en los ultimos 4 semestres')
ggplot(e_TBMp, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TBMp en los ultimos 4 semestres')
Respuesta: El parámetro Beta (β) presenta valores entre 0,7 y 0,95, con
un incremento notable durante el tercer semestre. Este comportamiento
indica que, en los primeros periodos, las actividades de mantenimiento
preventivo se realizaban de forma más aleatoria y con menor regularidad.
Sin embargo, hacia el tercer semestre se alcanzó una mayor consistencia
en la planificación y ejecución de los mantenimientos, reflejando un
proceso más maduro y controlado. La ligera disminución de β en el cuarto
semestre sugiere una pérdida parcial de esa estabilidad, posiblemente
por sobrecarga operacional o ajustes en la programación.
Por su parte, el parámetro Eta (η), que representa el tiempo promedio entre mantenimientos preventivos, muestra un aumento progresivo desde el primer hasta el tercer semestre, alcanzando su valor máximo en este último, lo que evidencia una mejora en la confiabilidad del sistema. No obstante, en el cuarto semestre se observa una disminución significativa de η, lo que podría deberse a un incremento en la frecuencia de intervenciones preventivas o a un deterioro acumulado en los equipos.
A continuación los valores de beta y eta del indicador de mantenimiento TTRp:
clean_pos <- function(x){
x <- as.numeric(x)
x <- x[is.finite(x) & x > 0]
names(x) <- seq_along(x)
x
}
objs_ttrp <- ls(pattern = "^TTRp_")
if (length(objs_ttrp)) {
tmp <- lapply(mget(objs_ttrp, inherits = TRUE), clean_pos)
list2env(tmp, envir = .GlobalEnv)
}
## <environment: R_GlobalEnv>
if (length(objs_ttrp)) {
print(sapply(mget(objs_ttrp), function(v) any(!is.finite(v) | v <= 0)))
}
## TTRp_20231 TTRp_20232 TTRp_20241 TTRp_20242
## FALSE FALSE FALSE FALSE
TTRp_b_1 <- TTRp_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRp_e_1 <- TTRp_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRp_b_2 <- TTRp_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRp_e_2 <- TTRp_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRp_b_3 <- TTRp_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRp_e_3 <- TTRp_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRp_b_4 <- TTRp_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRp_e_4 <- TTRp_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TTRp <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TTRp_b_1,TTRp_b_2,TTRp_b_3,TTRp_b_4))
e_TTRp <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TTRp_e_1,TTRp_e_2,TTRp_e_3,TTRp_e_4))
ggplot(b_TTRp, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TTRp en los ultimos 4 semestres')
ggplot(e_TTRp, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TTRp en los ultimos 4 semestres')
Respuesta: Durante el tercer semestre se observa un leve aumento de β,
lo que puede interpretarse como una mayor estandarización de los
procedimientos o una mejora en la organización del mantenimiento,
logrando intervenciones más consistentes en duración. Posteriormente, en
el cuarto semestre los valores se estabilizan nuevamente, manteniendo un
nivel controlado sin evidencia de deterioro en la eficiencia
operativa.
Por otro lado, el parámetro Eta (η), que representa el tiempo medio característico de reparación, se mantiene entre 150 y 170 horas, mostrando una tendencia estable con una ligera alza en el tercer semestre. Este comportamiento refleja que los tiempos de reparación han sido constantes y previsibles, lo que evidencia una correcta gestión del mantenimiento y una buena asignación de recursos humanos y técnicos.
2.- ¿Cuál es la tendencia de la disponibilidad del equipo en los últimos 4 semestres?
Inicialmente se calcula la disponibilidad generica con el promedio de los indicadores UT y DT y los parámetros de Weibull obtenidos anteriormente de la siguiente manera:
MUT_S1 <- UT_e_1 * gamma(1 + 1/UT_b_1)
MUT_S2 <- UT_e_2 * gamma(1 + 1/UT_b_2)
MUT_S3 <- UT_e_3 * gamma(1 + 1/UT_b_3)
MUT_S4 <- UT_e_4 * gamma(1 + 1/UT_b_4)
MDT_S1 <- DT_e_1 * gamma(1 + 1/DT_b_1)
MDT_S2 <- DT_e_2 * gamma(1 + 1/DT_b_2)
MDT_S3 <- DT_e_3 * gamma(1 + 1/DT_b_3)
MDT_S4 <- DT_e_4 * gamma(1 + 1/DT_b_4)
Disponibilidad_Generica_S1= MUT_S1/(MUT_S1+MDT_S1)*100
Disponibilidad_Generica_S2= MUT_S2/(MUT_S2+MDT_S2)*100
Disponibilidad_Generica_S3= MUT_S3/(MUT_S3+MDT_S3)*100
Disponibilidad_Generica_S4= MUT_S4/(MUT_S4+MDT_S4)*100
Luego se calcula la disponibilidad inherente con el promedio de los indicadores TBF Y TTR y los parámetros de Weibull obtenidos anteriormente de la siguiente manera:
MTBF_S1 <- TBF_e_1 * gamma(1 + 1/TBF_b_1)
MTBF_S2 <- TBF_e_2 * gamma(1 + 1/TBF_b_2)
MTBF_S3 <- TBF_e_3 * gamma(1 + 1/TBF_b_3)
MTBF_S4 <- TBF_e_4 * gamma(1 + 1/TBF_b_4)
MTTR_S1 <- TTR_e_1 * gamma(1 + 1/TTR_b_1)
MTTR_S2 <- TTR_e_2 * gamma(1 + 1/TTR_b_2)
MTTR_S3 <- TTR_e_3 * gamma(1 + 1/TTR_b_3)
MTTR_S4 <- TTR_e_4 * gamma(1 + 1/TTR_b_4)
Disponibilidad_Inherente_S1 <- MTBF_S1/(MTBF_S1+MTTR_S1)*100
Disponibilidad_Inherente_S2 <- MTBF_S2/(MTBF_S2+MTTR_S2)*100
Disponibilidad_Inherente_S3 <- MTBF_S3/(MTBF_S3+MTTR_S3)*100
Disponibilidad_Inherente_S4 <- MTBF_S4/(MTBF_S4+MTTR_S4)*100
Luego se calcula la disponibilidad alcanzada con el promedio de los indicadores TBFc, TTRc, TBFp, TTRp y los parámetros de Weibull obtenidos anteriormente de la siguiente manera:
# Supón que tienes vectores nombrados por semestre:
beta_TTR <- setNames(b_TTR$Beta, b_TTR$Semestre)
eta_TTR <- setNames(e_TTR$Eta, e_TTR$Semestre)
MTTRc <- eta_TTR * gamma(1 + 1/beta_TTR) # named numeric '1','2','3','4'
A continuación los valores de beta y eta del indicador de mantenimiento TTRc:
TTRc_b_1 <- TTRc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_1 <- TTRc_20231 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_2 <- TTRc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_2 <- TTRc_20232 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_3 <- TTRc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_3 <- TTRc_20241 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
TTRc_b_4 <- TTRc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[1]
TTRc_e_4 <- TTRc_20242 %>% fitdist(.,distr="weibull",method="mle") %>% .[[1]] %>% .[2]
b_TTRc <- data.frame(Semestre = (c("1", "2", "3", "4")), Beta = c(TTRc_b_1,TTRc_b_2,TTRc_b_3,TTRc_b_4))
e_TTRc <- data.frame(Semestre = (c("1", "2", "3", "4")), Eta = c(TTRc_e_1,TTRc_e_2,TTRc_e_3,TTRc_e_4))
ggplot(b_TTRc, aes(x = Semestre, y = Beta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#D55E0099", "#D55E0099", "#D55E0099", "#D55E0099")) + labs(title ='Parametro Beta del indicador TTRc en los ultimos 4 semestres')
ggplot(e_TTRc, aes(x = Semestre, y = Eta, fill = Semestre)) + geom_bar(stat = "identity", width = 0.8) + scale_fill_manual(values = c("#0072B2cc", "#0072B2cc", "#0072B2cc", "#0072B2cc")) + labs(title ='Parametro Eta del indicador TTRc en los ultimos 4 semestres')
MTBMc_S1 <- TBMc_e_1 * gamma(1 + 1/TBMc_b_1)
MTBMc_S2 <- TBMc_e_2 * gamma(1 + 1/TBMc_b_2)
MTBMc_S3 <- TBMc_e_3 * gamma(1 + 1/TBMc_b_3)
MTBMc_S4 <- TBMc_e_4 * gamma(1 + 1/TBMc_b_4)
MTTRc_S1 <- TTRc_e_1 * gamma(1 + 1/TTRc_b_1)
MTTRc_S2 <- TTRc_e_2 * gamma(1 + 1/TTRc_b_2)
MTTRc_S3 <- TTRc_e_3 * gamma(1 + 1/TTRc_b_3)
MTTRc_S4 <- TTRc_e_4 * gamma(1 + 1/TTRc_b_4)
MTBMp_S1 <- TBMp_e_1 * gamma(1 + 1/TBMp_b_1)
MTBMp_S2 <- TBMp_e_2 * gamma(1 + 1/TBMp_b_2)
MTBMp_S3 <- TBMp_e_3 * gamma(1 + 1/TBMp_b_3)
MTBMp_S4 <- TBMp_e_4 * gamma(1 + 1/TBMp_b_4)
MTTRp_S1 <- TTRp_e_1 * gamma(1 + 1/TTRp_b_1)
MTTRp_S2 <- TTRp_e_2 * gamma(1 + 1/TTRp_b_2)
MTTRp_S3 <- TTRp_e_3 * gamma(1 + 1/TTRp_b_3)
MTTRp_S4 <- TTRp_e_4 * gamma(1 + 1/TTRp_b_4)
MTBM_S1= (1/((1/MTBMc_S1)+(1/MTBMp_S1)))
MTBM_S2= (1/((1/MTBMc_S2)+(1/MTBMp_S2)))
MTBM_S3= (1/((1/MTBMc_S3)+(1/MTBMp_S3)))
MTBM_S4= (1/((1/MTBMc_S4)+(1/MTBMp_S4)))
M_S1=(((MTTRc_S1/MTBMc_S1)+(MTTRp_S1/MTBMp_S1))/((1/MTBMc_S1)+(1/MTBMp_S1)))
M_S2=(((MTTRc_S2/MTBMc_S2)+(MTTRp_S2/MTBMp_S2))/((1/MTBMc_S2)+(1/MTBMp_S2)))
M_S3=(((MTTRc_S3/MTBMc_S3)+(MTTRp_S3/MTBMp_S3))/((1/MTBMc_S3)+(1/MTBMp_S3)))
M_S4=(((MTTRc_S4/MTBMc_S4)+(MTTRp_S4/MTBMp_S4))/((1/MTBMc_S4)+(1/MTBMp_S4)))
Disponibilidad_Alcanzada_S1= MTBM_S1/(MTBM_S1+M_S1)*100
Disponibilidad_Alcanzada_S2= MTBM_S2/(MTBM_S2+M_S2)*100
Disponibilidad_Alcanzada_S3= MTBM_S3/(MTBM_S3+M_S3)*100
Disponibilidad_Alcanzada_S4= MTBM_S4/(MTBM_S4+M_S4)*100
A continuaciÓn se realiza la comparaciÓn con graficos de barra de las diferentes disponibilidades calculadas porcentualmente para los ultimos 4 semestres, para ello se genera un Datafrme para los valores de disponibilidad de los diferentes semestres y se grafican con el comando ggplot de la siguiente manera:
#Disponibilidad Generica
disp_GEN <- data.frame(Semestre = (c("1", "2", "3", "4")), Disponibilidad = c(Disponibilidad_Generica_S1, Disponibilidad_Generica_S2, Disponibilidad_Generica_S3, Disponibilidad_Generica_S4))
ggplot(disp_GEN, aes(x = Semestre, y = Disponibilidad, fill = Semestre)) + geom_bar(stat = "identity", width = 0.5) + scale_fill_manual(values = c("#009E73", "#009E73", "#009E73", "#009E73")) + labs(title ='Disponibilidad Generica del equipo en los últimos 4 semestres', y = "Disponibilidad (%)")
#Disponibilidad inherente
disp_INH <- data.frame(Semestre = (c("1", "2", "3", "4")), Disponibilidad = c(Disponibilidad_Inherente_S1, Disponibilidad_Inherente_S2, Disponibilidad_Inherente_S3, Disponibilidad_Inherente_S4))
ggplot(disp_INH, aes(x = Semestre, y = Disponibilidad, fill = Semestre)) + geom_bar(stat = "identity", width = 0.5) + scale_fill_manual(values = c("#E69F00", "#E69F00", "#E69F00", "#E69F00")) + labs(title ='Disponibilidad Inherente del equipo en los últimos 4 semestres', y = "Disponibilidad (%)")
#Disponibilidad Alcanzada
disp_ALC <- data.frame(Semestre = (c("1", "2", "3", "4")), Disponibilidad = c(Disponibilidad_Alcanzada_S1, Disponibilidad_Alcanzada_S2, Disponibilidad_Alcanzada_S3, Disponibilidad_Alcanzada_S4))
ggplot(disp_ALC, aes(x = Semestre, y = Disponibilidad, fill = Semestre)) + geom_bar(stat = "identity", width = 0.5) + scale_fill_manual(values = c("#D55E00", "#D55E00", "#D55E00", "#D55E00")) + labs(title ='Disponibilidad Alcanzada del equipo en los últimos 4 semestres', y = "Disponibilidad (%)")
Los tres indicadores analizados —genérico, inherente y alcanzado—
coinciden en señalar que el tercer semestre representó el punto más alto
de desempeño del equipo, con una operación estable, confiable y bien
gestionada. En contraste, el cuarto semestre evidencia un deterioro
generalizado, posiblemente asociado a problemas en la planificación del
mantenimiento, desgaste de componentes o deficiencias en la gestión de
fallas. Este comportamiento sugiere que el sistema requiere una revisión
integral de la estrategia de mantenimiento, reforzando el análisis de
causas raíz, el seguimiento de indicadores MTBF y MTTR, y la
optimización de los planes preventivos para garantizar una mayor
continuidad operativa y confiabilidad del equipo en los próximos
periodos.
A continuación, se lleva a cabo el análisis de confiabilidad del equipo para los últimos cuatro semestres, empleando el modelo de Weibull. Primero, se define un vector T que representa el tiempo de operación en horas, desde 0 hasta 1000 con incrementos de 25. Este vector se usa como base para evaluar la confiabilidad a lo largo del tiempo.
Luego, se calculan las funciones de confiabilidad r_1, r_2, r_3 y r_4 para cada semestre, utilizando la ecuación de confiabilidad de Weibull R(t) = exp(-((t/η)^β)),donde η es el parámetro de escala (TBF_e) y β es el parámetro de forma (TBF_b).
Esta fórmula permite estimar la probabilidad de que el equipo no falle antes del tiempo t. En cada semestre se usa un valor distinto de β, mientras que η es constante para los tres primeros semestres y cambia en el cuarto (TBF_e_4). Además, se calcula r_4_1, que representa la probabilidad de falla para el semestre 4, como el complemento de la confiabilidad: 1 - R(t).
Los resultados para el semestre 4 se tabulan en un data.frame llamado Fallavsconfiabilidad, el cual contiene las horas, la probabilidad de falla y la confiabilidad expresadas en porcentaje. Posteriormente, se crean distintos data frames (data1, data2, etc.) que agrupan los valores de confiabilidad para cada semestre individual, así como uno general (data) que permite superponer todas las curvas en un mismo gráfico.
Los gráficos se construyen con ggplot, usando líneas (geom_line) y puntos (geom_point) para representar la evolución de la confiabilidad con el tiempo.
# Datos de T
T <- c(seq(from = 0, to = 1000, by = 25))
# Confiabilidad para cada semestre
r_1 <- exp(-((T / TBF_e_1)^TBF_b_1))
r_2 <- exp(-((T / TBF_e_1)^TBF_b_2))
r_3 <- exp(-((T / TBF_e_1)^TBF_b_3))
r_4 <- exp(-((T / TBF_e_1)^TBF_b_4))
r_4_1 <- 1- exp(-((T / TBF_e_4)^TBF_b_4))
Fallavsconfiabilidad <- data.frame(Horas = paste0(T," hrs"), Probabilidad_de_falla = paste0(round(r_4_1*100), " %"), Confiabilidad = paste0(round(r_4*100), " %"))
# Data frames
data <- data.frame(T = rep(T, 4), confiabilidad = c(r_1, r_2, r_3, r_4), semestre = factor(rep(c("Sem 1", "Sem 2", "Sem 3", "Sem 4"), each = length(T))))
data1 <- data.frame(T = rep(T, 4), confiabilidad = c(r_1), semestre = factor(rep(c("Semestre 1"), each = length(T))))
data2 <- data.frame(T = rep(T, 4), confiabilidad = c(r_2), semestre = factor(rep(c("Semestre 2"), each = length(T))))
data3 <- data.frame(T = rep(T, 4), confiabilidad = c(r_3), semestre = factor(rep(c("Semestre 3"), each = length(T))))
data4 <- data.frame(T = rep(T, 4), confiabilidad = c(r_4), semestre = factor(rep(c("Semestre 4"), each = length(T))))
data4_1 <- data.frame(T = rep(T, 4), confiabilidad = c(r_4, r_4_1), semestre = factor(rep(c("Semestre 4", "Probabilidad de falla"), each = length(T))))
data.frame(Horas = paste0(T," hrs"), Confiabilidad_del_equipo = paste0(round(r_4*100), " %"), Probabilidad_de_falla = paste0(round(r_4_1*100), " %")) -> Fallavsconfiabilidad
#Graficos
# 1
ggplot(data1, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("red")) + labs(title = "Confiabilidad Semestre 1 (2022-1)", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# 2
ggplot(data2, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("blue")) + labs(title = "Confiabilidad Semestre 2 (2022-2)", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 3
ggplot(data3, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("green")) + labs(title = "Confiabilidad Semestre 3 (2023-1)", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 4
ggplot(data4, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("black")) + labs(title = "Confiabilidad Semestre 4 (2023-2)", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 4_1
ggplot(data4_1, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("black", "orange")) + labs(title = "Confiabilidad Semestre 4 y Probabilidad de falla", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
Fallavsconfiabilidad
# 5
ggplot(data, aes(x = T, y = confiabilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("red", "blue", "green", "black")) + labs(title = "Confiabilidad de los ultimos 4 Semestres", x = "Horas", y = "Confiabilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
Respuesta: Durante los últimos cuatro semestres (2022-1 a 2023-2), la confiabilidad del equipo muestra una disminución progresiva. En los primeros periodos las curvas mantienen valores más altos durante mayor tiempo, mientras que en los semestres recientes la confiabilidad cae más rápido, evidenciando mayor frecuencia de fallas y menor tiempo medio entre ellas (MTBF).
Este comportamiento sugiere un desgaste acumulado de los componentes y posible ineficiencia del mantenimiento preventivo. En conjunto, las curvas comparativas reflejan una pérdida sostenida de confiabilidad, por lo que se recomienda revisar estrategias de mantenimiento y reemplazo para recuperar el desempeño del equipo.
4.-¿ha sufrido cambios la mantenibilidad del equipo en los últimos 4 semestres?
A continuación se calcula la mantenibilidad del equipo para los últimos 4 semestres mediante gráficos de líneas. Primero, se genera un vector de tiempos T en horas, desde 0 hasta 500, con incrementos de 10.
Luego, para cada semestre, se calcula un factor de reparación inverso al tiempo medio de reparación (MTTR) respectivo (factor_reparacion_i = 1/MTTR_Si). Con este factor, se evalúa la función de mantenibilidad 𝑀𝑟(𝑡)=1−𝑒−factor×𝑡M r.(t)=1−e −factor×t, que representa la probabilidad acumulada de reparación efectiva hasta el tiempo t.
Se crean data frames individuales para cada semestre y uno combinado que contiene todos los datos, asignando un factor de semestre para distinguirlos en las gráficas.
Finalmente, se generan cinco gráficos con ggplot2: cuatro individuales que muestran la mantenibilidad en cada semestre, y un gráfico combinado que permite comparar la evolución de la mantenibilidad entre los cuatro semestres.
# Datos de T
T <- c(seq(from = 0, to =500, by = 10))
# Mantenibilidad para cada semestre
factor_reparacion_1 <- (1/MTTR_S1)
factor_reparacion_2 <- (1/MTTR_S2)
factor_reparacion_3 <- (1/MTTR_S3)
factor_reparacion_4 <- (1/MTTR_S4)
Mr_1 <- (1-exp(-T*factor_reparacion_1))
Mr_2 <- (1-exp(-T*factor_reparacion_2))
Mr_3 <- (1-exp(-T*factor_reparacion_3))
Mr_4 <- (1-exp(-T*factor_reparacion_4))
# Data frames
data <- data.frame(T = rep(T, 4), mantenibilidad = c(Mr_1, Mr_2, Mr_3, Mr_4), semestre = factor(rep(c("Sem 1", "Sem 2", "Sem 3", "Sem 4"), each = length(T))))
data1 <- data.frame(T = rep(T, 4), mantenibilidad = c(Mr_1), semestre = factor(rep(c("Semestre 1"), each = length(T))))
data2 <- data.frame(T = rep(T, 4), mantenibilidad = c(Mr_2), semestre = factor(rep(c("Semestre 2"), each = length(T))))
data3 <- data.frame(T = rep(T, 4), mantenibilidad = c(Mr_3), semestre = factor(rep(c("Semestre 3"), each = length(T))))
data4 <- data.frame(T = rep(T, 4), mantenibilidad = c(Mr_4), semestre = factor(rep(c("Semestre 4"), each = length(T))))
#Graficos
# 1
ggplot(data1, aes(x = T, y = mantenibilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("red")) + labs(title = "Mantenibilidad Semestre 1 (2023-1)", x = "Horas", y = "Mantenibilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 2
ggplot(data2, aes(x = T, y = mantenibilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("blue")) + labs(title = "Mantenibilidad Semestre 2 (2023-2)", x = "Horas", y = "Mantenibilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 3
ggplot(data3, aes(x = T, y = mantenibilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("green")) + labs(title = "Mantenibilidad Semestre 3 (2024-1)", x = "Horas", y = "Mantenibilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 4
ggplot(data4, aes(x = T, y = mantenibilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("black")) + labs(title = "Mantenibilidad Semestre 4 (2024-2)", x = "Horas", y = "Mantenibilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
# 5
ggplot(data, aes(x = T, y = mantenibilidad, color = semestre, shape = semestre)) + geom_line(size = 1) + geom_point(size = 2) + scale_color_manual(values = c("red", "blue", "green", "black")) + scale_shape_manual(values = c(3, 24, 8, 19)) + labs(title = "Mantenibilidad de los ultimos 4 Semestres", x = "Horas", y = "Mantenibilidad") + theme_minimal() + theme( plot.title = element_text(hjust = 0.5, size = 12, face = "bold"), axis.title = element_text(size = 12), legend.title = element_blank())
Respuesta: En los últimos cuatro semestres la mantenibilidad del equipo
mejoró en general, reflejando menores tiempos de reparación y mayor
eficacia del mantenimiento. El semestre 2024-1 muestra el mejor
desempeño, alcanzando valores altos más rápido, aunque en 2024-2 se
observa una ligera disminución, indicando que la mejora no se mantuvo
del todo constante.
5.- ¿Cuáles son los tiempos esperados de mantención en general, preventiva y correctiva en el último semestre?
Para determinar los tiempos esperados de mantención se crea un data frame que resume los tiempos medios de reparación (MTTR) para el semestre “2024-2”. Este data frame contiene una sola fila con cuatro columnas, el semestre, los valores de mantención general, preventiva y correctiva.
Cada valor de mantención se convierte a texto agregando la unidad “Horas” mediante la función paste0(). Este resumen permite visualizar los MTTR correspondientes a cada tipo de mantención para el semestre indicado.
data.frame(Semestre = "2024-2", "Mantención_General" = paste0(MTTR_S4, " Horas"), "Mantención_Preventiva" = paste0(MTTRp_S4, " Horas"), "Mantención_Correctiva"= paste0(MTTRc_S4, " Horas"))
6.- ¿Cuándo se debería esperar en promedio las próximas intervenciones y que naturaleza tienen?
La proxima intervención general se espera que sea en la fecha:
tail(Datos_S4$`Detención Operacional`,1) +hours(144)
## [1] "2025-01-06 16:06:00 UTC"
La proxima intervención Correctiva se espera que sea en la fecha:
tail(Fallas_Correctivas_S4$`Detención Operacional`,1) +hours(263)
## [1] "2025-01-11 15:06:00 UTC"
La proxima intervención general se espera que sea en la fecha:
tail(Fallas_Preventivas_S4$`Detención Operacional`,1) +hours(318)
## [1] "2023-08-15 08:30:00 UTC"
7.- ¿Cada cuánto tiempo se debería intervenir el equipo para tener un 90% de certeza de que no va a fallar cuando se encuentre en servicio?
A continuación se usa la inversa de la función de confiabilidad de Weibull: R(t) = 0.9, para despejar el tiempo t con 90% de confiabilidad, usando los parámetros MTBF_S4 (η) y TBF_b_4 (β). El resultado se muestra como texto en horas
t <- MTBF_S4 * (-log(0.9))^(1/TBF_b_4)
t <- data.frame("Tiempo_de_certeza" = paste0(t, " Horas"))
t
8.- ¿Cuánto tiempo se le debería asignar a las mantenciones preventivas para tener una certeza del 95% de que terminen del tiempo estimado?
A continuación se calcula el tiempo necesario para alcanzar un 95% de mantenibilidad usando la función inversa de Weibull. Usa TTRp_e_4 (η) y TTRp_b_4 (β) como parámetros. El resultado se entrega en horas.
t2 <- TTRp_e_4 * (-log(1 - 0.95))^(1/TTRp_b_4)
t2 <- data.frame("Tiempo_para_asignar_a_TTM" = paste0(t2, " Horas"))
t2
Conclusión General del Análisis RAM
El análisis RAM del equipo evidencia un desempeño operacional moderadamente estable, con fallas principalmente aleatorias y sin indicios claros de desgaste progresivo. Los parámetros de Weibull muestran valores de β cercanos a 0,6–0,9, lo que confirma una tasa de fallas constante y un comportamiento no dependiente de la edad del componente. Sin embargo, las variaciones observadas en η entre semestres reflejan fluctuaciones en la confiabilidad, especialmente con un descenso en el último periodo (2024-2), lo que sugiere una posible pérdida de control en la planificación del mantenimiento o un aumento en la exigencia operativa.
En términos de disponibilidad, el sistema alcanzó su punto máximo en el tercer semestre, coincidiendo con los mejores valores de confiabilidad y mantenibilidad. No obstante, durante el cuarto semestre se aprecia un deterioro general, asociado posiblemente a fallas no programadas o a una menor efectividad del mantenimiento preventivo.
Respecto a la mantenibilidad, se observa una mejora progresiva hasta el semestre 2024-1, reflejada en menores tiempos de reparación y mayor rapidez de recuperación del sistema. El leve retroceso en 2024-2 no altera la tendencia global positiva, pero advierte la necesidad de reforzar la capacitación técnica y la gestión de repuestos.
Finalmente, los tiempos esperados de intervención (≈490 h en general, 253 h preventivas y 229 h correctivas) y las proyecciones de próximas fallas (enero de 2025) permiten estimar una operación razonablemente controlada, aunque dependiente de la consistencia en la ejecución del mantenimiento. En conjunto, el sistema mantiene niveles aceptables de confiabilidad, disponibilidad y mantenibilidad, pero requiere fortalecer la planificación preventiva y la gestión de paradas para evitar que las mejoras alcanzadas se reviertan en los próximos periodos.