Las tablas de contingencia permiten analizar la relación entre dos variables categóricas. En este trabajo se utiliza un conjunto de datos relacionado con un proceso de producción para estudiar la relación entre la línea de producción y la categoría de temperatura registrada. Primero se realiza un cálculo manual de probabilidad condicional y posteriormente se comprueba mediante R.
Se utiliza el archivo acero (1).csv, que contiene
información relacionada con diferentes variables del proceso de
producción. La base contiene 117 observaciones y 20 variables.
Para este análisis se seleccionaron las variables:
La relación entre la línea de producción y la temperatura es relevante porque permite identificar si la distribución de las categorías de temperatura es similar entre las diferentes líneas. En un proceso industrial, esta información puede servir como apoyo para revisar las condiciones de operación de cada línea.
El archivo acero (1).csv debe encontrarse en la misma
carpeta que este documento RMarkdown.
# Verificar los archivos disponibles
list.files()
## [1] "acero (1).csv" "Actividad_Final_50%.html"
## [3] "Actividad_Final_50%.Rmd" "calculo_manual.png"
## [5] "project.Rproj"
# Cargar la base de datos
acero <- read.csv(
"acero (1).csv",
stringsAsFactors = FALSE,
check.names = FALSE
)
# Información general
cat("Número de observaciones:", nrow(acero), "\n")
## Número de observaciones: 117
cat("Número de variables:", ncol(acero), "\n")
## Número de variables: 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"
unique(acero$linea)
## [1] "A" "B" "C"
unique(acero$temperatura)
## [1] "Alta" "Baja" "Media"
tabla <- table(
acero$linea,
acero$temperatura
)
tabla
##
## Alta Baja Media
## A 24 15 0
## B 13 13 13
## C 9 10 20
knitr::kable(
tabla,
caption = "Tabla 1. Frecuencias observadas de línea y temperatura"
)
| Alta | Baja | Media | |
|---|---|---|---|
| A | 24 | 15 | 0 |
| B | 13 | 13 | 13 |
| C | 9 | 10 | 20 |
La tabla obtenida es:
| Línea | Alta | Baja | Media | Total |
|---|---|---|---|---|
| A | 24 | 15 | 0 | 39 |
| B | 13 | 13 | 13 | 39 |
| C | 9 | 10 | 20 | 39 |
| Total | 46 | 38 | 33 | 117 |
Se utiliza margin.table() para obtener los totales de
cada línea.
totales_linea <- margin.table(
tabla,
1
)
knitr::kable(
data.frame(
Linea = names(totales_linea),
Total = as.numeric(totales_linea)
),
caption = "Tabla 2. Totales marginales por línea"
)
| Linea | Total |
|---|---|
| A | 39 |
| B | 39 |
| C | 39 |
totales_temperatura <- margin.table(
tabla,
2
)
knitr::kable(
data.frame(
Temperatura = names(totales_temperatura),
Total = as.numeric(totales_temperatura)
),
caption = "Tabla 3. Totales marginales por temperatura"
)
| Temperatura | Total |
|---|---|
| Alta | 46 |
| Baja | 38 |
| Media | 33 |
La función addmargins() permite agregar los totales por
filas y columnas.
tabla_totales <- addmargins(tabla)
knitr::kable(
tabla_totales,
caption = "Tabla 4. Tabla de contingencia con totales marginales"
)
| Alta | Baja | Media | Sum | |
|---|---|---|---|---|
| A | 24 | 15 | 0 | 39 |
| B | 13 | 13 | 13 | 39 |
| C | 9 | 10 | 20 | 39 |
| Sum | 46 | 38 | 33 | 117 |
La probabilidad condicional se calcula mediante:
\[ P(A|B)=\frac{P(A\cap B)}{P(B)} \]
En este trabajo se calculará:
\[ P(\text{Temperatura Alta}|\text{Línea A}) \]
De la tabla de contingencia se obtiene:
Por lo tanto:
\[ P(\text{Alta}|\text{Línea A}) = \frac{24}{39} \]
Realizando la división:
\[ P(\text{Alta}|\text{Línea A}) = 0.6154 \]
Convertido a porcentaje:
\[ 0.6154\times100=61.54\% \]
Por lo tanto:
\[ \boxed{P(\text{Alta}|\text{Línea A})=61.54\%} \]
El estudiante debe tomar una fotografía del procedimiento realizado a mano en el cuaderno y subirla a Posit Cloud.
La imagen debe mostrar:
\[ P(\text{Alta}|\text{Línea A}) = \frac{24}{39} = 0.6154 = 61.54\% \]
La función prop.table() permite convertir las
frecuencias de la tabla en proporciones.
probabilidades <- prop.table(
tabla,
margin = 1
)
knitr::kable(
probabilidades,
digits = 4,
caption = "Tabla 5. Probabilidades condicionales de temperatura según la línea"
)
| Alta | Baja | Media | |
|---|---|---|---|
| A | 0.6154 | 0.3846 | 0.0000 |
| B | 0.3333 | 0.3333 | 0.3333 |
| C | 0.2308 | 0.2564 | 0.5128 |
p_alta_A <- prop.table(
tabla,
margin = 1
)["A", "Alta"]
p_alta_A
## [1] 0.6153846
El resultado obtenido debe ser:
\[ 0.6154 \]
Para expresarlo como porcentaje:
p_alta_A * 100
## [1] 61.53846
El resultado es:
\[ 61.54\% \]
comparacion <- data.frame(
Metodo = c(
"Cálculo manual",
"R"
),
Probabilidad = c(
24/39,
p_alta_A
),
Porcentaje = c(
(24/39)*100,
p_alta_A*100
)
)
knitr::kable(
comparacion,
digits = 4,
caption = "Tabla 6. Comparación del cálculo manual con el cálculo en R"
)
| Metodo | Probabilidad | Porcentaje |
|---|---|---|
| Cálculo manual | 0.6154 | 61.5385 |
| R | 0.6154 | 61.5385 |
Las probabilidades conjuntas se calculan dividiendo cada frecuencia entre el número total de observaciones.
prob_conjuntas <- prop.table(tabla)
knitr::kable(
prob_conjuntas,
digits = 4,
caption = "Tabla 7. Probabilidades conjuntas"
)
| Alta | Baja | Media | |
|---|---|---|---|
| A | 0.2051 | 0.1282 | 0.0000 |
| B | 0.1111 | 0.1111 | 0.1111 |
| C | 0.0769 | 0.0855 | 0.1709 |
p_A_alta <- prop.table(tabla)["A", "Alta"]
p_A_alta
## [1] 0.2051282
El cálculo manual es:
\[ P(\text{A y Alta}) = \frac{24}{117} \]
\[ P(\text{A y Alta}) = 0.2051 \]
Porcentaje:
\[ 20.51\% \]
H₀: La línea de producción y la temperatura son independientes.
H₁: La línea de producción y la temperatura no son independientes.
Se establece:
\[ \alpha=0.05 \]
Como la tabla tiene dimensiones 3 × 3, se utiliza
chisq.test() sin corrección de continuidad.
prueba_chi <- chisq.test(
tabla,
correct = FALSE
)
prueba_chi
##
## Pearson's Chi-squared test
##
## data: tabla
## X-squared = 27.597, df = 4, p-value = 1.505e-05
resultado_chi <- data.frame(
Chi_cuadrado = as.numeric(
prueba_chi$statistic
),
Grados_libertad = as.numeric(
prueba_chi$parameter
),
Valor_p = as.numeric(
prueba_chi$p.value
)
)
knitr::kable(
resultado_chi,
digits = 6,
caption = "Tabla 8. Resultado de la prueba de chi-cuadrado"
)
| Chi_cuadrado | Grados_libertad | Valor_p |
|---|---|---|
| 27.59684 | 4 | 1.5e-05 |
frecuencias_esperadas <- prueba_chi$expected
knitr::kable(
round(frecuencias_esperadas, 4),
caption = "Tabla 9. Frecuencias esperadas"
)
| Alta | Baja | Media | |
|---|---|---|---|
| A | 15.3333 | 12.6667 | 11 |
| B | 15.3333 | 12.6667 | 11 |
| C | 15.3333 | 12.6667 | 11 |
El nivel de significancia establecido es:
\[ \alpha=0.05 \]
La regla de decisión es:
alpha <- 0.05
if (prueba_chi$p.value < alpha) {
decision <- "Se rechaza H0"
} else {
decision <- "No se rechaza H0"
}
resultado_decision <- data.frame(
Alfa = alpha,
Valor_p = prueba_chi$p.value,
Decision = decision
)
knitr::kable(
resultado_decision,
digits = 6,
caption = "Tabla 10. Decisión estadística"
)
| Alfa | Valor_p | Decision |
|---|---|---|
| 0.05 | 1.5e-05 | Se rechaza H0 |
La prueba de chi-cuadrado produce un valor p aproximadamente igual a:
\[ p=0.000015 \]
Este valor es menor que el nivel de significancia:
\[ 0.000015 < 0.05 \]
Por lo tanto, se rechaza la hipótesis nula de independencia.
Existe evidencia estadística de asociación entre la línea de producción y la categoría de temperatura en los datos analizados.
comparacion_lineas <- data.frame(
Linea = rownames(probabilidades),
Alta = probabilidades[, "Alta"],
Baja = probabilidades[, "Baja"],
Media = probabilidades[, "Media"]
)
knitr::kable(
comparacion_lineas,
digits = 4,
caption = "Tabla 11. Probabilidades de temperatura dentro de cada línea"
)
| Linea | Alta | Baja | Media | |
|---|---|---|---|---|
| A | A | 0.6154 | 0.3846 | 0.0000 |
| B | B | 0.3333 | 0.3333 | 0.3333 |
| C | C | 0.2308 | 0.2564 | 0.5128 |
La Línea A presenta una probabilidad de 61.54 % para la categoría Alta y 38.46 % para Baja.
La Línea B presenta una distribución de 33.33 % para cada una de las tres categorías.
La Línea C presenta 23.08 % para Alta, 25.64 % para Baja y 51.28 % para Media.
Estas diferencias en las distribuciones ayudan a explicar el resultado obtenido mediante la prueba de chi-cuadrado.
Desde la perspectiva de la ingeniería, las tablas de contingencia pueden utilizarse para comparar condiciones de operación entre diferentes grupos o líneas de producción.
En este caso, la asociación encontrada entre línea y temperatura indica que las categorías de temperatura no presentan la misma distribución en las tres líneas. Este resultado puede utilizarse como punto de partida para revisar las condiciones de operación y realizar análisis adicionales que permitan identificar las causas de las diferencias observadas.
La tabla de contingencia permitió analizar conjuntamente la línea de producción y la categoría de temperatura utilizando 117 observaciones.
La probabilidad de registrar una temperatura Alta cuando la observación corresponde a la Línea A fue de 61.54 %, resultado obtenido manualmente y comprobado mediante R.
La probabilidad conjunta de pertenecer a la Línea A y presentar una temperatura Alta fue de 20.51 %.
La prueba de chi-cuadrado obtuvo un valor p aproximado de 0.000015, menor que 0.05.
Por lo tanto, se rechaza la hipótesis de independencia y existe evidencia estadística de asociación entre la línea de producción y la categoría de temperatura.
Se utilizó ChatGPT como herramienta de apoyo para organizar el código RMarkdown, revisar la estructura de las tablas y orientar la aplicación de las funciones estadísticas.
“Ayúdame a realizar una actividad en RMarkdown con una base de datos de acero. Necesito seleccionar dos variables categóricas, construir una tabla de contingencia, calcular una probabilidad condicional manualmente y comprobarla en R usando table(), margin.table(), prop.table(), addmargins() y chisq.test(). También necesito interpretación, conclusión y referencias.”
Los resultados obtenidos mediante R fueron comparados con el cálculo manual de la probabilidad condicional para comprobar que ambos procedimientos produjeran el mismo resultado.
Illowsky, B., & Dean, S. (2023). Introductory statistics 2e. OpenStax.
National Institute of Standards and Technology. (2012). Engineering statistics handbook: Product and process comparisons. U.S. Department of Commerce.
OpenStax. (2022). Introducción a la estadística. OpenStax.