1 Carga de librerías y datos

##============================================================== ###
##                UNIVERSIDAD CENTRAL DEL ECUADOR                ###
##Facultad de Ingeniería en Geología,Minas, Petróleos y Ambiental ##
##===============================================================###
##Materia:Estadistica ======== Docente:Ing.Christian Mejía .E MSc.##
##===============================================================###
##   Utilización del Programa R-Studio en Estadistica             ##
###=============================================================####
##Expuesto- Proyecto Semestral                                    ##          
##===============================================================###
#Tema: Proyecto de Estadística en R                               ##
##===============================================================###
#Elaborado por: Jim Acuña                                         ##               
##===============================================================###

########################
###### Librerias #######
########################

library(dplyr)
library(ggplot2)
library(ggfortify)
library(tidyverse)
library(fdth)
library(lattice)
library(MASS)
library(PASWR)
library(magick)
library(readxl)
library(plotly)
library(psych)
library(car)
library(ggpmisc)
library(scatterplot3d)
library(corrplot)
library(GGally)
library(RSNNS)
#############################
#### Directorio de trabajo ##
#############################

setwd("D:/Personal/Escritorio/ESTADISTICA JIM/Kaggle")
Datos<-read.csv("market_pipe_thickness_loss_dataset_LIMPIO.csv", header = T, sep=";",dec =".", fileEncoding = "ISO-8859-1")
Datos <- na.omit(Datos)
str(Datos)
## 'data.frame':    1000 obs. of  11 variables:
##  $ Pipe_Size       : int  800 800 400 1500 1500 600 200 300 150 800 ...
##  $ Thickness       : num  15.5 22 12.1 38.7 24.3 ...
##  $ Material        : chr  "Carbon Steel" "PVC" "Carbon Steel" "Carbon Steel" ...
##  $ Grade           : chr  "ASTM A333 Grade 6" "ASTM A106 Grade B" "API 5L X52" "API 5L X42" ...
##  $ Max_Pressure    : int  300 150 2500 1500 1500 600 1500 900 300 150 ...
##  $ Temperature     : num  84.9 14.1 0.6 52.7 11.7 67.3 89.6 40.8 3.2 11.6 ...
##  $ Corrosion_Impact: num  16.04 7.38 2.12 5.58 12.29 ...
##  $ Thickness_Loss  : num  4.91 7.32 6.32 6.2 8.58 5.21 5.86 3.02 2.47 0.53 ...
##  $ Material_Loss   : num  31.7 33.3 52.5 16 35.3 ...
##  $ Time            : int  2 4 7 19 20 11 6 21 19 1 ...
##  $ Condition       : chr  "Moderate" "Critical" "Critical" "Critical" ...
names(Datos)
##  [1] "Pipe_Size"        "Thickness"        "Material"         "Grade"           
##  [5] "Max_Pressure"     "Temperature"      "Corrosion_Impact" "Thickness_Loss"  
##  [9] "Material_Loss"    "Time"             "Condition"
#View(Datos)
#Normalizacion de Variable Material Loss#
normalizacion<-normalizeData(Datos$Material_Loss,type ="0_1")
Datos$Material_Loss_norm<-as.data.frame(normalizacion)
summary(Datos$Material_Loss)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.08   15.66   31.66   46.75   61.03  318.75
summary(Datos$Material_Loss_norm)
##        V1         
##  Min.   :0.00000  
##  1st Qu.:0.04891  
##  Median :0.09910  
##  Mean   :0.14644  
##  3rd Qu.:0.19128  
##  Max.   :1.00000
#view(Datos)

######################################################################

2 Variables cualitativas

#### Tablas de distribución de frecuencias (variables cualitativas) ##
######################################################################
# Material
TDF_Material <- Datos %>% count(Material) %>% mutate(hi = round(n / sum(n), 4),Porcentaje = round(hi * 100, 2))
TDF_Material
# Grade
TDF_Grade <- Datos %>% count(Grade) %>% mutate(hi = round(n / sum(n), 4), Porcentaje = round(hi * 100, 2))
TDF_Grade
# Condition
TDF_Condition <- Datos %>% count(Condition) %>% mutate(hi = round(n / sum(n), 4),Porcentaje = round(hi * 100, 2))
TDF_Condition

3 Graficas (variables cualitativas)

######################################################################
            #### Graficas (variables cualitativas) ##
######################################################################
# Barras: Material (frecuencia absoluta)
ggplot(TDF_Material, aes(x = reorder(Material, -n), y = n)) +
  geom_bar(stat = "identity", color = "black", fill=(c("red", "blue", "green", "yellow","orange"))) +
  labs(title = "Distribución de Material (Frecuencia Absoluta)",
       x = "Material", y = "Frecuencia")

# Circular: Material (Porcentual)
ggplot(TDF_Material, aes(x = "", y = Porcentaje, fill = Material)) +
  geom_bar(stat = "identity", color = "black", width = 1) +
  coord_polar(theta = "y") +
  theme_void() +
  geom_text(aes(label = paste(Porcentaje, "%")),
            position = position_stack(vjust = 0.5), color = "black")+
  labs(title = "Distribución de Material (Porcentaje)")

# Barras: Condition (frecuencia absoluta)
ggplot(TDF_Condition, aes(x = reorder(Condition, -n), y = n)) +
  geom_bar(stat = "identity", color = "black", fill=(c("red", "blue", "green"))) +
  labs(title = "Distribución de Condition (Frecuencia Absoluta)",
       x = "Condition", y = "Frecuencia")

# Circular: Condition (Porcentual)
ggplot(TDF_Condition, aes(x = "", y = Porcentaje, fill = Condition)) +
  geom_bar(stat = "identity", color = "black", width = 1) +
  coord_polar(theta = "y") +
  theme_void() +
  geom_text(aes(label = paste0(Porcentaje, "%")),
            position = position_stack(vjust = 0.5), color = "black") +
  labs(title = "Distribución de Condition (Porcentaje)")

# Barras: Grade (frecuencia absoluta)
ggplot(TDF_Grade, aes(x = reorder(Grade, -n), y = n)) +
  geom_bar(stat = "identity", color = "black", fill=(c("red", "blue", "green", "yellow","orange"))) +
  labs(title = "Distribución de Grade (Frecuencia Absoluta)",
       x = "Grade", y = "Frecuencia")

# Circular: Grade (Porcentual)
ggplot(TDF_Grade, aes(x = "", y = Porcentaje, fill = Grade)) +
  geom_bar(stat = "identity", color = "black", width = 1) +
  coord_polar(theta = "y") +
  theme_void() +
  geom_text(aes(label = paste(Porcentaje, "%")),
            position = position_stack(vjust = 0.5), color = "black") +
  labs(title = "Distribución de Grade (Porcentaje)")

####################################################################################

4 Conclusiones (variables cualitativas)

#1) Material

#La variable Material está bastante equilibrada: Fiberglass (21.9%), Carbon Steel (21.0%), Stainless Steel (20.1%), PVC (18.6%) y #HDPE (18.4%). Esto sugiere que el dataset no está dominado por un solo material, lo cual es positivo para comparaciones y para #evitar sesgos fuertes por represetación significativa de una categoría.

#2) Grade

#Grade también presenta una distribución relativamente balanceada, con un leve predominio de ASTM A333 Grade 6 (22.8%) y ASTM A106 #Grade B (21.2%), mientras que API 5L X52 (19.1%), API 5L X42 (18.6%) y API 5L X65 (18.3%) quedan cerca. En términos descriptivos, #esto permite evaluar comportamiento del deterioro sin que un grado reduzca la fiabilidad del análisis.

#3) Condition

#En Condition sí hay un desbalance claro: Critical representa 48.7%, Moderate 29.9% y Normal 21.4%. Esto indica que el dataset está orientado hacia condiciones más severas, por lo que los promedios globales de deterioro tenderán a reflejar un entorno de mayor riesgo.

5 Variables cuantitativas

#### Tablas de distribución de frecuencias y graficas (variables cuantitativas)##
####################################################################################

5.1 Thickness Loss

##Thickness Loss#####
#####################
x <- Datos$Thickness_Loss
x <- x[!is.na(x)]
n <- length(x)

# Número de clases (Sturges)
k <- ceiling(1 + 3.322 * log10(n))

# Intervalos
breaks <- pretty(range(x), n = k)

# Tabla de frecuencias por intervalos
clase <- cut(x, breaks = breaks, include.lowest = TRUE, right = TRUE)
tabla <- as.data.frame(table(clase))
names(tabla) <- c("Intervalo", "fi")

# Frecuencias relativas y acumuladas
tabla$hi <- round(tabla$fi / n, 4)
tabla$Fi <- cumsum(tabla$fi)
tabla$Hi <- round(cumsum(tabla$hi), 4)

# Marca de clase (xi)
tabla$xi <- (head(breaks, -1) + tail(breaks, -1)) / 2

# Tabla final
TDF_Thickness_Loss <- tabla[, c("Intervalo", "xi", "fi", "hi", "Fi", "Hi")]
TDF_Thickness_Loss
##Histograma: Thickness_Loss

Histo_Thickness_loss <- ggplot(Datos, aes(x = Thickness_Loss)) +
  geom_histogram(breaks = breaks, color = "black", fill = "orange") +
  geom_freqpoly(breaks = breaks, color = "black", linewidth = 1) +
  labs(
    title = "Histograma de Thickness Loss",
    x = "Thickness Loss",
    y = "Frecuencia",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.2), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Histo_Thickness_loss

#############################
## OJIVAS: Thickness_loss ###
#############################

ojiva_TL <- TDF_Thickness_Loss

# Frecuencia acumulada descendente (absoluta)
ojiva_TL$F_desc <- rev(cumsum(rev(ojiva_TL$fi)))

# Frecuencia acumulada descendente (relativa)
ojiva_TL$H_desc <- round(ojiva_TL$F_desc / sum(ojiva_TL$fi), 4)

############################################################
####### Ojiva ABSOLUTA (Fi ascendente y descendente) #######
############################################################
Ojiva_TL_abs <- ggplot(ojiva_TL) +
  geom_line(aes(x = xi, y = Fi), color = "blue", linewidth = 1) +
  geom_point(aes(x = xi, y = Fi), color = "blue", size = 2.5) +
  geom_line(aes(x = xi, y = F_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = F_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada absoluta) de Thickness loss",
    x = "Thickness loss",
    y = "Frecuencia acumulada (Ni)",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, sum(ojiva_TL$fi)))

Ojiva_TL_abs

############################################################
####### Ojiva RELATIVA (Hi ascendente y descendente) #######
############################################################

Ojiva_TL_rel <- ggplot(ojiva_TL) +
  geom_line(aes(x = xi, y = Hi), color = "green3", linewidth = 1) +
  geom_point(aes(x = xi, y = Hi), color = "green3", size = 2.5) +
  geom_line(aes(x = xi, y = H_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = H_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada relativa) de Thickness loss",
    x = "Thickness loss",
    y = "Frecuencia acumulada (Hi)",
    caption = "Jim Acuña"
  ) +
  scale_y_continuous(labels = function(z) paste0(round(z * 100, 0), "%")) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, 1))

Ojiva_TL_rel

############################################################
####### Diagrama de caja y bigotes para Thickness loss ###
############################################################
Caja_Thickness_loss <- ggplot(Datos, aes(x =Thickness_Loss, y = "" )) +
  stat_boxplot(geom = "errorbar", width = 0.3) +
  geom_boxplot(color = "black", fill = "pink",
               outlier.colour = "black", outlier.shape = 1) +
  labs(
    title = "Diagrama de caja y bigotes de Thickness loss",
    x = "",
    y = "Thickness loss",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Caja_Thickness_loss

####################

5.1.1 Conclusión Thickness loss

#Thickness_Loss se distribuye en todo su rango (0.01 a 9.99) con tendencia casi simétrica: media ≈ 4.89 y mediana ≈ 4.92. En el boxplot se esperaría poca presencia de outliers, lo que sugiere variación amplia pero controlada dentro del rango típico del dataset.

5.2 Material_Loss_norm

##Material_Loss_norm#
#####################

x <- Datos$Material_Loss_norm
x <- x[!is.na(x)]
n <- length(x)

# Intervalos
breaks <- seq(0, 1, by = 0.1) #10 clases

# Tabla de frecuencias por intervalos
clase <- cut(x, breaks = breaks, include.lowest = TRUE, right = TRUE)
tabla <- as.data.frame(table(clase))
names(tabla) <- c("Intervalo", "fi")

# Frecuencias relativas y acumuladas
tabla$hi <- round(tabla$fi / n, 4)
tabla$Fi <- cumsum(tabla$fi)
tabla$Hi <- round(cumsum(tabla$hi), 4)

# Marca de clase (xi)
tabla$xi <- (head(breaks, -1) + tail(breaks, -1)) / 2

# Tabla final
TDF_Material_Loss_norm <- tabla[, c("Intervalo", "xi", "fi", "hi", "Fi", "Hi")]
TDF_Material_Loss_norm
##Histograma: Material_Loss_norm

Histo_Material_Loss_norm <- ggplot(data.frame(Material_Loss_norm=x), aes(x = Material_Loss_norm)) +
  geom_histogram(breaks = breaks, color = "black", fill = "red") +
  geom_freqpoly(breaks = breaks, color = "black", linewidth = 1) +
  labs(
    title = "Histograma de Material_Loss_norm",
    x = "Material Loss norm",
    y = "Frecuencia",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.2), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Histo_Material_Loss_norm

################################
## OJIVAS: Material_Loss_norm ##
################################

ojiva_MLn <- TDF_Material_Loss_norm

# Frecuencia acumulada descendente (absoluta)
ojiva_MLn$F_desc <- rev(cumsum(rev(ojiva_MLn$fi)))

# Frecuencia acumulada descendente (relativa)
ojiva_MLn$H_desc <- round(ojiva_MLn$F_desc / sum(ojiva_MLn$fi), 4)

############################################################
####### Ojiva ABSOLUTA (Fi ascendente y descendente) #######
############################################################
Ojiva_MLn_abs <- ggplot(ojiva_MLn) +
  geom_line(aes(x = xi, y = Fi), color = "blue", linewidth = 1) +
  geom_point(aes(x = xi, y = Fi), color = "blue", size = 2.5) +
  geom_line(aes(x = xi, y = F_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = F_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada absoluta) de Material Loss norm",
    x = "Material Loss norm",
    y = "Frecuencia acumulada (Ni)",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, sum(ojiva_MLn$fi)))

Ojiva_MLn_abs

############################################################
####### Ojiva RELATIVA (Hi ascendente y descendente) #######
############################################################

Ojiva_MLn_rel <- ggplot(ojiva_MLn) +
  geom_line(aes(x = xi, y = Hi), color = "green3", linewidth = 1) +
  geom_point(aes(x = xi, y = Hi), color = "green3", size = 2.5) +
  geom_line(aes(x = xi, y = H_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = H_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada relativa) de Material Loss norm",
    x = "Material Loss norm",
    y = "Frecuencia acumulada (Hi)",
    caption = "Jim Acuña"
  ) +
  scale_y_continuous(labels = function(z) paste0(round(z * 100, 0), "%")) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, 1))

Ojiva_MLn_rel

############################################################
####### Diagrama de caja y bigotes para Corrosion Impact ###
############################################################
Caja_Material_Loss_norm <- ggplot(data.frame(Material_Loss_norm=x), aes(x =Material_Loss_norm)) +
  stat_boxplot(geom = "errorbar", width = 0.3) +
  geom_boxplot(color = "black", fill = "pink",
               outlier.colour = "black", outlier.shape = 1) +
  labs(
    title = "Diagrama de caja y bigotes de Material Loss norm",
    x = "Material Loss norm",
    y = "",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Caja_Material_Loss_norm

#####################

5.2.1 Conclusión Material Loss norm

#La variable Material Loss es la que muestra el patrón estadístico más “crítico”: presenta un sesgo fuerte a la derecha y cola pesada (curtosis alta), lo cual se evidencia en la diferencia entre media (46.75) y mediana (31.66). Se identifican outliers altos, indicando un subconjunto de casos severos que inflan la media. Por lo tanto, la interpretación descriptiva para esta variable debe basarse en mediana, y percentiles, porque el promedio queda fuertemente afectado por pérdidas extremas. La versión normalizada Material Loss norm conserva exactamente la forma estadística de Material_Loss (misma asimetría y cola), pero en escala 0–1, lo cual facilita comparación e interpretación visual.

5.3 Corrosion_Impact

##Corrosion_Impact###
#####################
x <- Datos$Corrosion_Impact
x <- x[!is.na(x)]
n <- length(x)

# Número de clases (Sturges)
k <- ceiling(1 + 3.322 * log10(n))

# Intervalos
breaks <- pretty(range(x), n = k)

# Tabla de frecuencias por intervalos
clase <- cut(x, breaks = breaks, include.lowest = TRUE, right = TRUE)
tabla <- as.data.frame(table(clase))
names(tabla) <- c("Intervalo", "fi")

# Frecuencias relativas y acumuladas
tabla$hi <- round(tabla$fi / n, 4)
tabla$Fi <- cumsum(tabla$fi)
tabla$Hi <- round(cumsum(tabla$hi), 4)

# Marca de clase (xi)
tabla$xi <- (head(breaks, -1) + tail(breaks, -1)) / 2

# Tabla final
TDF_Corrosion_Impact <- tabla[, c("Intervalo", "xi", "fi", "hi", "Fi", "Hi")]
TDF_Corrosion_Impact
##Histograma: Corrosion_Impact

Histo_Corrosion_Impact <- ggplot(Datos, aes(x = Corrosion_Impact)) +
  geom_histogram(breaks = breaks, color = "black", fill = "purple") +
  geom_freqpoly(breaks = breaks, color = "black", linewidth = 1) +
  labs(
    title = "Histograma de Corrosion_Impact",
    x = "Corrosion Impact",
    y = "Frecuencia",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.2), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Histo_Corrosion_Impact

#############################
## OJIVAS: Corrosion_Impact ##
#############################

ojiva_CI <- TDF_Corrosion_Impact

# Frecuencia acumulada descendente (absoluta)
ojiva_CI$F_desc <- rev(cumsum(rev(ojiva_CI$fi)))

# Frecuencia acumulada descendente (relativa)
ojiva_CI$H_desc <- round(ojiva_CI$F_desc / sum(ojiva_CI$fi), 4)

############################################################
####### Ojiva ABSOLUTA (Fi ascendente y descendente) #######
############################################################
Ojiva_CI_abs <- ggplot(ojiva_CI) +
  geom_line(aes(x = xi, y = Fi), color = "blue", linewidth = 1) +
  geom_point(aes(x = xi, y = Fi), color = "blue", size = 2.5) +
  geom_line(aes(x = xi, y = F_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = F_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada absoluta) de Corrosion Impact",
    x = "Corrosion Impact",
    y = "Frecuencia acumulada (Ni)",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, sum(ojiva_CI$fi)))

Ojiva_CI_abs

############################################################
####### Ojiva RELATIVA (Hi ascendente y descendente) #######
############################################################

Ojiva_CI_rel <- ggplot(ojiva_CI) +
  geom_line(aes(x = xi, y = Hi), color = "green3", linewidth = 1) +
  geom_point(aes(x = xi, y = Hi), color = "green3", size = 2.5) +
  geom_line(aes(x = xi, y = H_desc), color = "red", linewidth = 1) +
  geom_point(aes(x = xi, y = H_desc), color = "red", size = 2.5) +
  labs(
    title = "Ojiva (Frecuencia acumulada relativa) de Corrosion Impact",
    x = "Corrosion Impact",
    y = "Frecuencia acumulada (Hi)",
    caption = "Jim Acuña"
  ) +
  scale_y_continuous(labels = function(z) paste0(round(z * 100, 0), "%")) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) +
  expand_limits(y = c(0, 1))

Ojiva_CI_rel

############################################################
####### Diagrama de caja y bigotes para Corrosion Impact ###
############################################################
Caja_Corrosion_Impact <- ggplot(Datos, aes(x = Corrosion_Impact, y = "")) +
  stat_boxplot(geom = "errorbar", width = 0.3) +
  geom_boxplot(color = "black", fill = "pink",
               outlier.colour = "black", outlier.shape = 1) +
  labs(
    title = "Diagrama de caja y bigotes de Corrosion Impact",
    x = "Corrosion Impact",
    y = "",
    caption = "Jim Acuña"
  ) +
  theme(
    plot.title = element_text(size = rel(1.1), hjust = 0.5, face = "bold"),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Caja_Corrosion_Impact

5.3.1 Conclusión Corrosion Impact

#Corrosion_Impact presenta un comportamiento prácticamente simétrico: media 9.75 y mediana 9.72, no aparecen outliers. Esto sugiere que el impacto de corrosión está distribuido de forma extendida a lo largo de su dominio, sin valores atípicos que distorsionen el resumen central.

##Max_Pressure

#####################
#### Max_Pressure ###
#####################

TDF_Max_Pressure <- Datos %>% count(Max_Pressure) %>% mutate(hi = round(n / sum(n), 4),Porcentaje = round(hi * 100, 2))
TDF_Max_Pressure
# Barras: Max_Pressure (frecuencia absoluta)
ggplot(TDF_Max_Pressure, aes(x = reorder(Max_Pressure, -n), y = n)) +
  geom_bar(stat = "identity", color = "black", fill=(c("red", "blue", "green", "yellow","orange","purple"))) +
  labs(title = "Distribución de Max Pressure (Frecuencia Absoluta)",
       x = "Max_Pressure", y = "Frecuencia")

# Circular: Max_Pressure (Porcentual)
ggplot(TDF_Max_Pressure, aes(x = "", y = Porcentaje, fill = Max_Pressure)) +
  geom_bar(stat = "identity", color = "black", width = 1) +
  coord_polar(theta = "y") +
  theme_void() +
  geom_text(aes(label = paste(Porcentaje, "%")),
            position = position_stack(vjust = 0.5), color = "black") +
  labs(title = "Distribución de Max Pressure (Porcentaje)")

### Conclusion Max_Pressure

#Max_Pressure aparece muy uniforme: cada nivel está alrededor del 16–17% (150, 300, 600, 900, 1500, 2500). Esta uniformidad sugiere que el dataset está diseñado o muestreado para cubrir rangos de presión de forma homogénea, lo que ayuda a comparar el deterioro sin concentrarse solo en una presión.