En este trabajo se realiza un análisis estadístico de un conjunto de
datos relacionado con una línea de producción de acero. El análisis se
centra en el estudio de la relación entre la variable linea
y la variable sistema, utilizando tablas de contingencia,
probabilidades marginales, probabilidades conjuntas, probabilidades
condicionales y una prueba de independencia Chi-cuadrado.
El objetivo es aplicar conceptos de probabilidad y estadística a una situación relacionada con un proceso industrial, interpretando los resultados tanto desde el punto de vista estadístico como desde una perspectiva de ingeniería.
Analizar la relación entre la línea de producción y el estado del sistema mediante herramientas de probabilidad y estadística.
linea y sistema.El conjunto de datos utilizado se encuentra en el archivo
acero.csv.
Primero se importa el archivo utilizando R.
acero <- read.csv("acero.csv", stringsAsFactors = FALSE)
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,49 3,545 0,545 0,038 101,5 6,35
## 2 No 0 OFF 7251 0,0725 2,895 0,425 0,047 63,565 2,23
## 3 No 0 OFF 11066 1,49 5,0075 0,69 0,062 98,8175 5,99
## 4 No 0 ON 8311 1,715 2,16 0,36 0,066 70,1825 3,66
## 5 No 0 OFF 12459 0,465 4,845 0,6625 0,086 88,53 6,06
## 6 Si 1 OFF 13059 2,4175 3,6725 0,575 0,056 116,5375 6,15
Para conocer las dimensiones del conjunto de datos se utilizan las
funciones dim(), names() y
str().
dim(acero)
## [1] 117 20
names(acero)
## [1] "consumo" "pr.tbc" "pr.cc" "pr.ca" "pr.galv1"
## [6] "pr.galv2" "pr.pint" "linea" "hora" "temperatura"
## [11] "averias" "naverias" "sistema" "ProdTotal" "NOx"
## [16] "CO" "COV" "SO2" "CO2" "N2O"
str(acero)
## 'data.frame': 117 obs. of 20 variables:
## $ consumo : chr "135,31" "84,08" "131,62" "90,46" ...
## $ 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 : chr "0,49" "0,0725" "1,49" "1,715" ...
## $ CO : chr "3,545" "2,895" "5,0075" "2,16" ...
## $ COV : chr "0,545" "0,425" "0,69" "0,36" ...
## $ SO2 : chr "0,038" "0,047" "0,062" "0,066" ...
## $ CO2 : chr "101,5" "63,565" "98,8175" "70,1825" ...
## $ N2O : chr "6,35" "2,23" "5,99" "3,66" ...
El conjunto de datos contiene 117 observaciones y 20 variables.
La variable linea identifica la línea de producción,
mientras que la variable sistema identifica si el sistema
se encuentra en estado ON u OFF.
Se calcula la frecuencia de cada línea de producción.
table(acero$linea)
##
## A B C
## 39 39 39
El resultado muestra:
Por lo tanto, las tres líneas presentan la misma cantidad de observaciones.
Se calcula la frecuencia de los estados del sistema.
table(acero$sistema)
##
## OFF ON
## 59 58
Los resultados son:
La cantidad de observaciones en ambos estados es bastante similar.
Para el análisis se seleccionaron las variables linea y
sistema.
La variable linea permite identificar a cuál de las tres
líneas de producción pertenece cada observación.
La variable sistema permite conocer si el sistema se
encontraba en estado ON u OFF.
Estas variables son adecuadas para construir una tabla de contingencia y analizar si existe alguna relación entre la línea de producción y el estado del sistema.
Se construye la tabla de contingencia entre linea y
sistema.
tabla <- table(acero$linea, acero$sistema)
tabla
##
## OFF ON
## A 18 21
## B 20 19
## C 21 18
La tabla obtenida es:
| Línea | OFF | ON | Total |
|---|---|---|---|
| A | 18 | 21 | 39 |
| B | 20 | 19 | 39 |
| C | 21 | 18 | 39 |
| Total | 59 | 58 | 117 |
Para agregar los totales directamente en R:
addmargins(tabla)
##
## OFF ON Sum
## A 18 21 39
## B 20 19 39
## C 21 18 39
## Sum 59 58 117
Los totales marginales permiten observar las frecuencias totales de cada variable.
Para la variable linea:
margin.table(tabla, 1)
##
## A B C
## 39 39 39
Para la variable sistema:
margin.table(tabla, 2)
##
## OFF ON
## 59 58
Los totales son:
Las probabilidades marginales se obtienen dividiendo cada total marginal entre el total de observaciones.
prop.table(margin.table(tabla, 1))
##
## A B C
## 0.3333333 0.3333333 0.3333333
Las probabilidades de las líneas son:
Para los estados del sistema:
prop.table(margin.table(tabla, 2))
##
## OFF ON
## 0.5042735 0.4957265
Se obtiene:
Las probabilidades conjuntas representan la probabilidad de que ocurran simultáneamente una determinada línea y un determinado estado del sistema.
prop.table(tabla)
##
## OFF ON
## A 0.1538462 0.1794872
## B 0.1709402 0.1623932
## C 0.1794872 0.1538462
Por ejemplo:
\[ P(A\cap OFF)=\frac{18}{117}=0.1538 \]
Por lo tanto, existe aproximadamente un 15.38 % de observaciones correspondientes simultáneamente a la línea A y al sistema OFF.
También:
\[ P(A\cap ON)=\frac{21}{117}=0.1795 \]
\[ P(B\cap OFF)=\frac{20}{117}=0.1709 \]
\[ P(B\cap ON)=\frac{19}{117}=0.1624 \]
\[ P(C\cap OFF)=\frac{21}{117}=0.1795 \]
\[ P(C\cap ON)=\frac{18}{117}=0.1538 \]
Las probabilidades condicionales permiten analizar la probabilidad de una línea determinada dado un estado específico del sistema.
Se calculan utilizando:
prop.table(tabla, margin = 2)
##
## OFF ON
## A 0.3050847 0.3620690
## B 0.3389831 0.3275862
## C 0.3559322 0.3103448
En este caso se obtiene la distribución de las líneas condicionada al estado del sistema.
Para el sistema OFF:
\[ P(A|OFF)=\frac{18}{59}=0.3051 \]
\[ P(B|OFF)=\frac{20}{59}=0.3390 \]
\[ P(C|OFF)=\frac{21}{59}=0.3559 \]
Para el sistema ON:
\[ P(A|ON)=\frac{21}{58}=0.3621 \]
\[ P(B|ON)=\frac{19}{58}=0.3276 \]
\[ P(C|ON)=\frac{18}{58}=0.3103 \]
La probabilidad condicional solicitada es:
\[ P(A|OFF)=\frac{P(A\cap OFF)}{P(OFF)} \]
De acuerdo con la tabla de contingencia:
\[ P(A\cap OFF)=\frac{18}{117} \]
y:
\[ P(OFF)=\frac{59}{117} \]
Por lo tanto:
\[ P(A|OFF)= \frac{18/117}{59/117} \]
Se simplifica el cálculo:
\[ P(A|OFF)=\frac{18}{59} \]
Finalmente:
\[ P(A|OFF)=0.3051 \]
o expresado como porcentaje:
\[ P(A|OFF)=30.51\% \]
Esto significa que, entre todas las observaciones en las que el sistema está en estado OFF, aproximadamente el 30.51 % corresponde a la línea A.
A continuación se presenta la evidencia del cálculo manual realizado.
La imagen muestra el procedimiento:
\[ P(A|OFF)=\frac{P(A\cap OFF)}{P(OFF)} \]
\[ =\frac{18/117}{59/117} \]
\[ =\frac{18}{59} \]
\[ =0.3051 \]
\[ =30.51\% \]
El resultado obtenido manualmente se verifica utilizando R.
prob_A_dado_OFF <- tabla["A", "OFF"] / sum(tabla[, "OFF"])
prob_A_dado_OFF
## [1] 0.3050847
prob_A_dado_OFF * 100
## [1] 30.50847
El resultado obtenido es aproximadamente:
\[ P(A|OFF)=0.3051 \]
o:
\[ P(A|OFF)=30.51\% \]
Por lo tanto, el cálculo manual coincide con el cálculo realizado mediante R.
También es posible analizar la probabilidad del estado del sistema condicionada a cada línea.
prop.table(tabla, margin = 1)
##
## OFF ON
## A 0.4615385 0.5384615
## B 0.5128205 0.4871795
## C 0.5384615 0.4615385
Los resultados son aproximadamente:
\[ P(OFF|A)=\frac{18}{39}=0.4615 \]
\[ P(ON|A)=\frac{21}{39}=0.5385 \]
\[ P(OFF|B)=\frac{20}{39}=0.5128 \]
\[ P(ON|B)=\frac{19}{39}=0.4872 \]
\[ P(OFF|C)=\frac{21}{39}=0.5385 \]
\[ P(ON|C)=\frac{18}{39}=0.4615 \]
Esto permite observar cómo se distribuyen los estados ON y OFF dentro de cada línea.
Para determinar si existe una relación estadísticamente significativa
entre linea y sistema, se realiza una prueba
Chi-cuadrado de independencia.
Las hipótesis son:
Hipótesis nula \(H_0\):
Las variables linea y sistema son
independientes.
Hipótesis alternativa \(H_1\):
Las variables linea y sistema no son
independientes; existe una asociación entre ellas.
Se utilizará un nivel de significancia:
\[ \alpha=0.05 \]
La prueba se realiza utilizando la función
chisq.test().
prueba_chi <- chisq.test(tabla)
prueba_chi
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 0.47867, df = 2, p-value = 0.7872
El resultado obtenido es aproximadamente:
\[ \chi^2=0.4787 \]
con:
\[ gl=2 \]
y un valor p aproximado de:
\[ p=0.7872 \]
Las frecuencias esperadas pueden obtenerse mediante:
prueba_chi$expected
##
## OFF ON
## A 19.66667 19.33333
## B 19.66667 19.33333
## C 19.66667 19.33333
Los valores esperados son aproximadamente:
| Línea | OFF | ON |
|---|---|---|
| A | 19.67 | 19.33 |
| B | 19.67 | 19.33 |
| C | 19.67 | 19.33 |
Estas frecuencias representan los valores que se esperarían si las
variables linea y sistema fueran
independientes.
El valor p puede obtenerse directamente mediante:
prueba_chi$p.value
## [1] 0.7871521
El valor obtenido es aproximadamente:
\[ p=0.7872 \]
Como:
\[ 0.7872>0.05 \]
no se rechaza la hipótesis nula.
Con un nivel de significancia del 5 %, no existe evidencia estadística suficiente para rechazar la hipótesis de independencia entre la línea de producción y el estado del sistema.
En otras palabras, con los datos disponibles en esta muestra, no se
encuentra una asociación estadísticamente significativa entre
linea y sistema.
Esto no significa que se haya demostrado que las variables sean absolutamente independientes en cualquier situación, sino que los datos analizados no proporcionan evidencia suficiente para afirmar una asociación estadísticamente significativa.
La corrección de continuidad de Yates se utiliza principalmente en tablas de contingencia 2 × 2.
En este análisis la tabla tiene dimensiones 3 × 2, debido a que existen tres líneas de producción (A, B y C) y dos estados del sistema (ON y OFF).
Por esta razón, la corrección de continuidad de Yates no se aplica en este caso.
La prueba utilizada corresponde a la prueba Chi-cuadrado de independencia para una tabla de contingencia 3 × 2.
Desde una perspectiva de ingeniería, la tabla permite observar cómo se distribuyen los estados ON y OFF entre las tres líneas de producción.
Las frecuencias observadas son relativamente similares entre las líneas:
Aunque existen pequeñas diferencias entre las frecuencias observadas, estas diferencias son pequeñas y la prueba Chi-cuadrado indica que no son estadísticamente significativas al nivel de significancia del 5 %.
Por lo tanto, en esta muestra no se identifica evidencia estadística suficiente para afirmar que el estado del sistema dependa de la línea de producción.
A partir del análisis realizado se obtienen las siguientes conclusiones:
El conjunto de datos contiene 117 observaciones y 20 variables.
Las líneas A, B y C cuentan cada una con 39 observaciones.
El sistema se encuentra en estado OFF en 59 observaciones y en estado ON en 58 observaciones.
La probabilidad de que una observación pertenezca a la línea A dado que el sistema está OFF es:
\[ P(A|OFF)=\frac{18}{59}=0.3051 \]
equivalente a 30.51 %.
El cálculo manual de \(P(A|OFF)\) coincide con el resultado obtenido mediante R.
La prueba Chi-cuadrado produjo aproximadamente:
\[ \chi^2=0.4787 \]
con 2 grados de libertad y un valor p aproximado de:
\[ p=0.7872 \]
Debido a que el valor p es mayor que 0.05, no se rechaza la hipótesis nula de independencia.
En consecuencia, para esta muestra no existe evidencia estadística suficiente para afirmar que exista una asociación entre la línea de producción y el estado del sistema.
Para la realización del trabajo se utilizaron las siguientes herramientas:
Los cálculos estadísticos y resultados presentados en este informe
fueron realizados y verificados mediante R utilizando el archivo
acero.csv.
R Core Team. (2024). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. https://www.R-project.org/
RStudio Team. (2024). RStudio: Integrated Development Environment for R. Posit Software, PBC. https://posit.co/products/open-source/rstudio/
Walpole, R. E., Myers, R. H., Myers, S. L., & Ye, K. (2012). Probabilidad y estadística para ingeniería y ciencias (9.ª ed.). Pearson Educación.
Montgomery, D. C., & Runger, G. C. (2018). Probabilidad y estadística aplicadas a la ingeniería (7.ª ed.). Limusa Wiley.
# Cargar los datos
acero <- read.csv("acero.csv", stringsAsFactors = FALSE)
# Exploración inicial
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,49 3,545 0,545 0,038 101,5 6,35
## 2 No 0 OFF 7251 0,0725 2,895 0,425 0,047 63,565 2,23
## 3 No 0 OFF 11066 1,49 5,0075 0,69 0,062 98,8175 5,99
## 4 No 0 ON 8311 1,715 2,16 0,36 0,066 70,1825 3,66
## 5 No 0 OFF 12459 0,465 4,845 0,6625 0,086 88,53 6,06
## 6 Si 1 OFF 13059 2,4175 3,6725 0,575 0,056 116,5375 6,15
dim(acero)
## [1] 117 20
names(acero)
## [1] "consumo" "pr.tbc" "pr.cc" "pr.ca" "pr.galv1"
## [6] "pr.galv2" "pr.pint" "linea" "hora" "temperatura"
## [11] "averias" "naverias" "sistema" "ProdTotal" "NOx"
## [16] "CO" "COV" "SO2" "CO2" "N2O"
str(acero)
## 'data.frame': 117 obs. of 20 variables:
## $ consumo : chr "135,31" "84,08" "131,62" "90,46" ...
## $ 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 : chr "0,49" "0,0725" "1,49" "1,715" ...
## $ CO : chr "3,545" "2,895" "5,0075" "2,16" ...
## $ COV : chr "0,545" "0,425" "0,69" "0,36" ...
## $ SO2 : chr "0,038" "0,047" "0,062" "0,066" ...
## $ CO2 : chr "101,5" "63,565" "98,8175" "70,1825" ...
## $ N2O : chr "6,35" "2,23" "5,99" "3,66" ...
# Frecuencias
table(acero$linea)
##
## A B C
## 39 39 39
table(acero$sistema)
##
## OFF ON
## 59 58
# Tabla de contingencia
tabla <- table(acero$linea, acero$sistema)
tabla
##
## OFF ON
## A 18 21
## B 20 19
## C 21 18
addmargins(tabla)
##
## OFF ON Sum
## A 18 21 39
## B 20 19 39
## C 21 18 39
## Sum 59 58 117
# Totales marginales
margin.table(tabla, 1)
##
## A B C
## 39 39 39
margin.table(tabla, 2)
##
## OFF ON
## 59 58
# Probabilidades marginales
prop.table(margin.table(tabla, 1))
##
## A B C
## 0.3333333 0.3333333 0.3333333
prop.table(margin.table(tabla, 2))
##
## OFF ON
## 0.5042735 0.4957265
# Probabilidades conjuntas
prop.table(tabla)
##
## OFF ON
## A 0.1538462 0.1794872
## B 0.1709402 0.1623932
## C 0.1794872 0.1538462
# Probabilidades condicionales
prop.table(tabla, margin = 2)
##
## OFF ON
## A 0.3050847 0.3620690
## B 0.3389831 0.3275862
## C 0.3559322 0.3103448
prop.table(tabla, margin = 1)
##
## OFF ON
## A 0.4615385 0.5384615
## B 0.5128205 0.4871795
## C 0.5384615 0.4615385
# Probabilidad P(A|OFF)
prob_A_dado_OFF <- tabla["A", "OFF"] / sum(tabla[, "OFF"])
prob_A_dado_OFF
## [1] 0.3050847
prob_A_dado_OFF * 100
## [1] 30.50847
# Prueba Chi-cuadrado
prueba_chi <- chisq.test(tabla)
prueba_chi
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 0.47867, df = 2, p-value = 0.7872
# Frecuencias esperadas
prueba_chi$expected
##
## OFF ON
## A 19.66667 19.33333
## B 19.66667 19.33333
## C 19.66667 19.33333
# Valor p
prueba_chi$p.value
## [1] 0.7871521