Estudiante: Brandon Ortiz Hernandez

Codigo:1104258729

Docente: Justo Fuentes

Introducción

En esta actividad se realiza un análisis de probabilidad condicional utilizando el conjunto de datos acero.csv. El objetivo es analizar la posible relación entre dos variables categóricas mediante una tabla de contingencia, probabilidades condicionales y una prueba de independencia chi-cuadrado.

Las variables seleccionadas para el análisis son sistema y averias.

1. Dataset y selección de variables

El conjunto de datos utilizado es acero.csv, relacionado con información de un proceso industrial.

Se seleccionaron las variables sistema y averias. La variable sistema indica el estado del sistema, mientras que averias indica si se presentó o no una avería.

Esta pareja de variables es relevante para un ingeniero porque permite analizar si la ocurrencia de averías presenta alguna relación con el estado operativo del sistema. Esta información puede ser útil para analizar condiciones de operación y tomar decisiones relacionadas con mantenimiento.

2. Importación de los datos

# Importar el archivo acero.csv
acero <- read.csv("acero.csv", dec = ",")

# Mostrar las primeras filas
head(acero)
##   consumo pr.tbc pr.cc pr.ca pr.galv1 pr.galv2 pr.pint linea hora temperatura
## 1  135.31   6840   830     0      579     1401       0     A   1º        Alta
## 2   84.08    443   903    58      611     1636     717     A   2º        Alta
## 3  131.62   7270   572    36      982     1963     243     A   3º        Baja
## 4   90.46   5031   694   122      896     1568       0     A   4º        Baja
## 5  120.04   9365  1054   157      403     1480       0     A   5º        Baja
## 6  153.68   9281  1003   172      605     1525     473     A   6º        Baja
##   averias naverias sistema ProdTotal    NOx     CO    COV   SO2      CO2  N2O
## 1      Si        1     OFF     11266 0.4900 3.5450 0.5450 0.038 101.5000 6.35
## 2      No        0     OFF      7251 0.0725 2.8950 0.4250 0.047  63.5650 2.23
## 3      No        0     OFF     11066 1.4900 5.0075 0.6900 0.062  98.8175 5.99
## 4      No        0      ON      8311 1.7150 2.1600 0.3600 0.066  70.1825 3.66
## 5      No        0     OFF     12459 0.4650 4.8450 0.6625 0.086  88.5300 6.06
## 6      Si        1     OFF     13059 2.4175 3.6725 0.5750 0.056 116.5375 6.15
# Revisar la estructura de los datos
str(acero)
## 'data.frame':    117 obs. of  20 variables:
##  $ consumo    : num  135.3 84.1 131.6 90.5 120 ...
##  $ pr.tbc     : int  6840 443 7270 5031 9365 9281 3223 10490 7394 8654 ...
##  $ pr.cc      : int  830 903 572 694 1054 1003 1118 1077 1204 851 ...
##  $ pr.ca      : int  0 58 36 122 157 172 0 179 167 0 ...
##  $ pr.galv1   : int  579 611 982 896 403 605 643 737 580 828 ...
##  $ pr.galv2   : int  1401 1636 1963 1568 1480 1525 1424 1333 934 1326 ...
##  $ pr.pint    : int  0 717 243 0 0 473 732 93 247 607 ...
##  $ linea      : chr  "A" "A" "A" "A" ...
##  $ hora       : chr  "1º" "2º" "3º" "4º" ...
##  $ temperatura: chr  "Alta" "Alta" "Baja" "Baja" ...
##  $ averias    : chr  "Si" "No" "No" "No" ...
##  $ naverias   : int  1 0 0 0 0 1 0 0 0 3 ...
##  $ sistema    : chr  "OFF" "OFF" "OFF" "ON" ...
##  $ ProdTotal  : int  11266 7251 11066 8311 12459 13059 8555 18253 11697 13194 ...
##  $ NOx        : num  0.49 0.0725 1.49 1.715 0.465 ...
##  $ CO         : num  3.54 2.9 5.01 2.16 4.84 ...
##  $ COV        : num  0.545 0.425 0.69 0.36 0.662 ...
##  $ SO2        : num  0.038 0.047 0.062 0.066 0.086 0.056 0.07 0.103 0.058 0.066 ...
##  $ CO2        : num  101.5 63.6 98.8 70.2 88.5 ...
##  $ N2O        : num  6.35 2.23 5.99 3.66 6.06 6.15 7.75 9.09 8.69 5 ...
# Cantidad de filas y columnas
dim(acero)
## [1] 117  20

3. Revisión de las variables seleccionadas

Primero se revisan las categorías de las dos variables que se van a utilizar.

# Frecuencias de sistema
table(acero$sistema)
## 
## OFF  ON 
##  59  58
# Frecuencias de averias
table(acero$averias)
## 
## No Si 
## 89 28

La variable sistema presenta los estados ON y OFF, mientras que la variable averias indica la presencia o ausencia de una avería.

4. Cálculo manual de probabilidad condicional

Se calculará la probabilidad de que ocurra una avería cuando el sistema se encuentra en estado OFF.

La probabilidad que se desea calcular es:

\[ P(\text{Avería = Sí} \mid \text{Sistema = OFF}) \]

La fórmula utilizada es:

\[ P(A|B)=\frac{P(A\cap B)}{P(B)} \]

En este caso, se tienen 16 registros donde el sistema está en OFF y se presentó una avería. Además, existen 59 registros en los que el sistema está en OFF.

Por lo tanto:

\[ P(\text{Avería Sí}|\text{Sistema OFF}) = \frac{16}{59} \]

\[ P(\text{Avería Sí}|\text{Sistema OFF}) = 0.2712 \]

Expresado como porcentaje:

\[ 0.2712\times100=27.12\% \]

Por lo tanto, la probabilidad de que ocurra una avería cuando el sistema está en OFF es aproximadamente 27.12%.

Evidencia del cálculo manual

Calculo manual
Calculo manual

5. Tabla de contingencia

Se construye una tabla de contingencia utilizando la función table().

tabla <- table(acero$sistema, acero$averias)

tabla
##      
##       No Si
##   OFF 43 16
##   ON  46 12

La tabla permite observar conjuntamente el estado del sistema y la presencia o ausencia de averías.

También se presenta la tabla de forma más organizada:

knitr::kable(
  tabla,
  caption = "Tabla de contingencia entre sistema y averias"
)
Tabla de contingencia entre sistema y averias
No Si
OFF 43 16
ON 46 12

6. Totales marginales

Los totales marginales permiten conocer el número total de observaciones de cada fila y de cada columna.

Totales por fila

margin.table(tabla, 1)
## 
## OFF  ON 
##  59  58

Los totales por fila corresponden a la cantidad de registros en cada estado del sistema.

Totales por columna

margin.table(tabla, 2)
## 
## No Si 
## 89 28

Los totales por columna corresponden a la cantidad de registros con y sin averías.

7. Probabilidades condicionales

Para calcular las probabilidades dentro de cada fila se utiliza prop.table() con margin = 1.

prob_condicionales <- prop.table(tabla, margin = 1)

prob_condicionales
##      
##              No        Si
##   OFF 0.7288136 0.2711864
##   ON  0.7931034 0.2068966

Para mostrar los resultados en porcentaje:

round(prob_condicionales * 100, 2)
##      
##          No    Si
##   OFF 72.88 27.12
##   ON  79.31 20.69

Los resultados permiten comparar la proporción de averías dependiendo del estado del sistema.

La probabilidad de una avería cuando el sistema está OFF se puede obtener directamente:

prob_averia_off <- prop.table(tabla, margin = 1)["OFF", "Si"]

prob_averia_off
## [1] 0.2711864

En porcentaje:

round(prob_averia_off * 100, 2)
## [1] 27.12

8. Comprobación del cálculo manual

Se comprueba mediante R el cálculo realizado manualmente.

casos_off_averia <- tabla["OFF", "Si"]

total_off <- sum(tabla["OFF", ])

probabilidad_manual <- casos_off_averia / total_off

probabilidad_manual
## [1] 0.2711864

En porcentaje:

round(probabilidad_manual * 100, 2)
## [1] 27.12

El resultado obtenido mediante R coincide con el cálculo realizado manualmente, confirmando que la probabilidad calculada es aproximadamente 27.12%.

9. Probabilidades conjuntas

Las probabilidades conjuntas se calculan utilizando prop.table() sin especificar el argumento margin.

prob_conjuntas <- prop.table(tabla)

prob_conjuntas
##      
##              No        Si
##   OFF 0.3675214 0.1367521
##   ON  0.3931624 0.1025641

Los resultados también pueden expresarse como porcentajes:

round(prob_conjuntas * 100, 2)
##      
##          No    Si
##   OFF 36.75 13.68
##   ON  39.32 10.26

Por ejemplo, la probabilidad conjunta de que el sistema esté OFF y se presente una avería es:

prob_off_averia <- prop.table(tabla)["OFF", "Si"]

prob_off_averia
## [1] 0.1367521

En porcentaje:

round(prob_off_averia * 100, 2)
## [1] 13.68

10. Tabla resumen con totales

Se utiliza addmargins() para agregar los totales de las filas y columnas.

tabla_resumen <- addmargins(tabla)

tabla_resumen
##      
##        No  Si Sum
##   OFF  43  16  59
##   ON   46  12  58
##   Sum  89  28 117

También se presenta la tabla de forma organizada:

knitr::kable(
  tabla_resumen,
  caption = "Tabla de contingencia con totales marginales"
)
Tabla de contingencia con totales marginales
No Si Sum
OFF 43 16 59
ON 46 12 58
Sum 89 28 117

11. Prueba chi-cuadrado

Para determinar si existe evidencia de asociación entre las variables se realiza una prueba de independencia chi-cuadrado.

Hipótesis

Hipótesis nula (H0):

Las variables sistema y averias son independientes.

Hipótesis alternativa (H1):

Existe una asociación entre las variables sistema y averias.

Se utilizará un nivel de significancia de:

\[ \alpha = 0.05 \]

12. Chi-cuadrado con corrección de Yates

Primero se realiza la prueba utilizando la configuración predeterminada de chisq.test().

prueba_chi <- chisq.test(tabla)

prueba_chi
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla
## X-squared = 0.35785, df = 1, p-value = 0.5497

Se extraen los principales resultados:

cat("Chi-cuadrado:", prueba_chi$statistic, "\n")
## Chi-cuadrado: 0.3578515
cat("Grados de libertad:", prueba_chi$parameter, "\n")
## Grados de libertad: 1
cat("Valor p:", prueba_chi$p.value, "\n")
## Valor p: 0.5497019

13. Chi-cuadrado sin corrección de Yates

Debido a que la tabla es 2 × 2, también se realiza la prueba sin corrección.

prueba_chi_sin_correccion <- chisq.test(
  tabla,
  correct = FALSE
)

prueba_chi_sin_correccion
## 
##  Pearson's Chi-squared test
## 
## data:  tabla
## X-squared = 0.66405, df = 1, p-value = 0.4151

Se extraen los resultados:

cat(
  "Chi-cuadrado sin corrección:",
  prueba_chi_sin_correccion$statistic,
  "\n"
)
## Chi-cuadrado sin corrección: 0.6640537
cat(
  "Grados de libertad:",
  prueba_chi_sin_correccion$parameter,
  "\n"
)
## Grados de libertad: 1
cat(
  "Valor p:",
  prueba_chi_sin_correccion$p.value,
  "\n"
)
## Valor p: 0.4151325

14. Comparación de las pruebas chi-cuadrado

comparacion <- data.frame(
  Prueba = c(
    "Con corrección de Yates",
    "Sin corrección de Yates"
  ),
  Chi_cuadrado = c(
    as.numeric(prueba_chi$statistic),
    as.numeric(prueba_chi_sin_correccion$statistic)
  ),
  Valor_p = c(
    prueba_chi$p.value,
    prueba_chi_sin_correccion$p.value
  )
)

knitr::kable(
  comparacion,
  digits = 4,
  caption = "Comparación de las pruebas chi-cuadrado"
)
Comparación de las pruebas chi-cuadrado
Prueba Chi_cuadrado Valor_p
Con corrección de Yates 0.3579 0.5497
Sin corrección de Yates 0.6641 0.4151

15. Interpretación de los resultados

El nivel de significancia utilizado es:

\[ \alpha=0.05 \]

El valor p obtenido mediante la prueba chi-cuadrado con corrección de Yates es aproximadamente 0.5497.

El valor p obtenido sin la corrección de Yates es aproximadamente 0.4151.

Ambos valores son mayores que 0.05.

Por lo tanto, no se rechaza la hipótesis nula de independencia.

Esto significa que, con los datos disponibles, no existe evidencia estadísticamente significativa suficiente para afirmar que exista una asociación entre el estado del sistema y la ocurrencia de averías.

Es importante aclarar que este resultado no demuestra que las dos variables sean completamente independientes. Lo que indica es que los datos analizados no proporcionan evidencia suficiente para rechazar la hipótesis de independencia al nivel de significancia utilizado.

16. Conclusión técnica

A partir del análisis realizado no se encontró evidencia estadísticamente significativa de una dependencia entre el estado del sistema y la ocurrencia de averías. La probabilidad de presentar una avería cuando el sistema está en OFF fue aproximadamente 27.12%. Aunque existen diferencias entre las proporciones observadas en los estados ON y OFF, la prueba chi-cuadrado no encontró una asociación significativa al nivel de 0.05.

Desde el punto de vista de ingeniería, estos resultados indican que no sería adecuado atribuir las averías únicamente al estado ON u OFF del sistema. Para tomar decisiones relacionadas con mantenimiento o prevención de fallas sería conveniente analizar también otras variables del proceso, como la temperatura, la hora de operación y otros factores que puedan estar relacionados con las averías.

17. Conclusión general

El análisis permitió aplicar diferentes herramientas estadísticas para estudiar la relación entre dos variables categóricas. Primero se construyó una tabla de contingencia y posteriormente se calcularon probabilidades marginales, condicionales y conjuntas.

El cálculo manual de la probabilidad de una avería cuando el sistema está en OFF produjo un resultado de aproximadamente 27.12%, el cual coincidió con el cálculo realizado mediante R. Finalmente, las pruebas chi-cuadrado con y sin corrección de Yates presentaron valores p superiores a 0.05.

Por lo tanto, con la información analizada no se encontró evidencia estadísticamente significativa de una relación entre sistema y averias.

18. Bitácora de IA

Herramienta utilizada

Se utilizó ChatGPT como herramienta de apoyo para comprender las instrucciones de la actividad, organizar el análisis y revisar el código utilizado en R.

Prompt utilizado

El prompt utilizado para solicitar apoyo fue:

“Teniendo en cuenta ese link y la imagen que te mandé explícame qué tengo que hacer paso a paso.”

Posteriormente se solicitó apoyo para organizar el código completo del análisis.

Verificación humana

El código generado con apoyo de IA fue revisado antes de utilizarse. Se verificó la importación del archivo acero.csv, las variables seleccionadas, la tabla de contingencia, las probabilidades condicionales y conjuntas y las pruebas chi-cuadrado.

También se comprobó que el cálculo manual de la probabilidad de una avería cuando el sistema está OFF coincidiera con el resultado obtenido mediante R.

19. Referencias

  • R Core Team. (2024). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria.

  • R Documentation. chisq.test: Pearson’s Chi-squared Test for Count Data. Documentación oficial de R.

  • R Documentation. table: Cross Tabulation and Table Creation. Documentación oficial de R.

  • R Documentation. prop.table: Proportions of Table Margins. Documentación oficial de R.

  • R Documentation. margin.table: Compute Table Margins. Documentación oficial de R.

  • R Documentation. addmargins: Put Arbitrary Margins on a Table. Documentación oficial de R.

  • Fuente de apoyo de la actividad: RPubs. Probabilidad Condicional y Tablas de Contingencia. https://rpubs.com/justorfc/1457385