Revisando el documento de Felipe de Mendiburu, he analizado la coherencia de las fórmulas. las fórmulas son matemáticamente coherentes y equivalentes, aunque utilizan enfoques distintos para llegar al mismo resultado.
A continuación, te presento el contenido estructurado en formato Markdown, ideal para que lo copies y pegues directamente en las celdas de texto de tus Notebooks de Google Colab. Está adaptado con ejemplos para tus estudiantes de Ingeniería Agrícola y Agroindustrial.
El Diseño de Bloques Completos al Azar (DBCA), también conocido como diseño de doble vía, se aplica cuando el material o ambiente experimental es heterogéneo[cite: 19]. Para controlar esta variabilidad, las unidades experimentales se agrupan formando grupos homogéneos llamados “bloques”[cite: 20].
Características Clave: * Las unidades experimentales dentro de cada bloque son homogéneas, pero hay heterogeneidad entre los bloques[cite: 35, 36]. * En cada bloque, el número de unidades experimentales es exactamente igual al número de tratamientos evaluados (por eso es un bloque “completo”)[cite: 37, 38]. * Los tratamientos se distribuyen al azar de forma independiente dentro de cada bloque[cite: 39].
Aplicaciones en Ingeniería Agrícola y Agroindustrial: * Agrícola: Evaluar el rendimiento de diferentes fertilizantes (tratamientos) en un terreno que tiene un gradiente de fertilidad o pendiente. Cada franja perpendicular al gradiente funciona como un bloque. * Agroindustrial: Comparar la eficiencia de diferentes métodos de extracción de aceite (tratamientos) utilizando lotes de materia prima que provienen de distintos proveedores (bloques), asumiendo que el proveedor introduce variabilidad.
Cada observación del experimento se expresa mediante el siguiente modelo lineal[cite: 43]:
\[Y_{ij} = \mu + \tau_i + \beta_j + \epsilon_{ij}\] [cite: 44]
Donde: * \(Y_{ij}\) = Observación en la unidad experimental del tratamiento \(i\) en el bloque \(j\)[cite: 51]. * \(\mu\) = Parámetro del efecto medio global[cite: 45]. * \(\tau_i\) = Efecto del tratamiento \(i\)[cite: 48]. * \(\beta_j\) = Efecto del bloque \(j\)[cite: 49]. * \(\epsilon_{ij}\) = Error experimental aleatorio asociado a esa unidad[cite: 50].
Para facilitar el cálculo a mano, se utiliza el Término de Corrección (TC)[cite: 68]:
Enunciado: Un ingeniero agrícola está realizando un estudio de variedades forrajeras de camote. Se evaluaron 4 nuevas variedades (V1, V2, V3, V4) y un testigo[cite: 70, 71]. Se conformaron 3 bloques homogéneos de parcelas[cite: 73]. La variable de respuesta es el peso del follaje fresco en kilos[cite: 74, 75].
Datos Recolectados (Totales de Tratamiento \(Y_{i.}\) y Bloque \(Y_{.j}\)): [cite: 75]
| Bloque | V1 | Testigo | V2 | V3 | V4 | Total Bloque (\(Y_{.j}\)) |
|---|---|---|---|---|---|---|
| I | 17.9 | 7.0 | 19.8 | 15.2 | 12.7 | 72.6 |
| II | 20.8 | 5.9 | 16.7 | 21.0 | 14.2 | 78.6 |
| III | 21.4 | 4.2 | 16.7 | 8.8 | 11.5 | 62.6 |
| Total Trat. (\(Y_{i.}\)) | 60.1 | 17.1 | 53.2 | 45.0 | 38.4 | Gran Total = 213.8 |
Paso a paso: 1. Calcular el TC: \[TC = \frac{(213.8)^2}{15} = 3047.36\] [cite: 79] 2. Calcular SC Variedades (Tratamientos): \[SC_{Var} = \frac{(60.1)^2 + (17.1)^2 + (53.2)^2 + (45.0)^2 + (38.4)^2}{3} - TC\] [cite: 80-83] \[SC_{Var} = \frac{10234.02}{3} - 3047.36 = 3411.34 - 3047.36 = 363.98\] (Nota: Por redondeo decimal en el apunte original resulta \(364.04\) [cite: 92]). 3. Calcular SC Bloques: \[SC_{Bloq} = \frac{(72.6)^2 + (78.6)^2 + (62.6)^2}{5} - TC\] [cite: 84-87] \[SC_{Bloq} = \frac{15366.68}{5} - 3047.36 = 3073.33 - 3047.36 = 25.97\] (En el apunte resulta \(26.13\) [cite: 92]). 4. Calcular SC Total: \[SC_{Total} = (17.9^2 + 7.0^2 + ... + 11.5^2) - TC = 3506.76 - 3047.36 = 459.4\] [cite: 89, 92] 5. Calcular SC Error: \[SC_{Error} = SC_{Total} - (SC_{Var} + SC_{Bloq}) = 459.4 - (363.98 + 25.97) = 69.45\] [cite: 90, 92]
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# 1. Crear el DataFrame con los datos del ejercicio
data = {
'Rendimiento': [17.9, 20.8, 21.4, 7.0, 5.9, 4.2, 19.8, 16.7, 16.7, 15.2, 21.0, 8.8, 12.7, 14.2, 11.5],
'Variedad': ['V1', 'V1', 'V1', 'Testigo', 'Testigo', 'Testigo', 'V2', 'V2', 'V2', 'V3', 'V3', 'V3', 'V4', 'V4', 'V4'],
'Bloque': ['I', 'II', 'III', 'I', 'II', 'III', 'I', 'II', 'III', 'I', 'II', 'III', 'I', 'II', 'III']
}
df = pd.DataFrame(data)
# 2. Ajustar el modelo Lineal (ANOVA de dos vías)
# C() indica que la variable es categórica
modelo = ols('Rendimiento ~ C(Variedad) + C(Bloque)', data=df).fit()
# 3. Generar la Tabla ANOVA
tabla_anova = sm.stats.anova_lm(modelo, typ=2)
print("Tabla ANOVA - Python Statsmodels:")
print(tabla_anova)
# 1. Vectores de datos
rendimiento <- c(17.9, 20.8, 21.4, 7.0, 5.9, 4.2, 19.8, 16.7, 16.7, 15.2, 21.0, 8.8, 12.7, 14.2, 11.5)
variedad <- as.factor(rep(c("V1", "Testigo", "V2", "V3", "V4"), each=3))
bloque <- as.factor(rep(c("I", "II", "III"), times=5))
# 2. Modelo ANOVA
modelo_r <- aov(rendimiento ~ variedad + bloque)
# 3. Mostrar la tabla
cat("Tabla ANOVA - R Base:\n")
summary(modelo_r)
easyanova# Instalar el paquete si no está disponible: install.packages("easyanova")
library(easyanova)
# easyanova requiere un data.frame estructurado: columna 1 (Tratamiento), columna 2 (Bloque), columna 3 (Respuesta)
datos_ea <- data.frame(variedad, bloque, rendimiento)
# Ejecutar el análisis (design = 2 corresponde al Diseño de Bloques Completos al Azar)
resultado_ea <- ea1(datos_ea, design = 2)
cat("Tabla ANOVA - R easyanova:\n")
print(resultado_ea$`Analysis of variance`)
Independientemente del software que utilices (Python, R Base, o
easyanova), la tabla generará los mismos estadísticos[cite:
92]. La clave para la interpretación recae en el P-valor (Pr
> F).
variedad, el \(Pr>F\)
es aproximadamente \(0.0029\)[cite: 92]. Como \(0.0029 < 0.05\) (nuestro nivel de
significancia típico \(\alpha\)),
rechazamos \(H_0\).
Concluimos que existe una diferencia estadísticamente significativa en
el rendimiento del follaje entre al menos dos de las variedades
evaluadas.bloque, el \(Pr>F\) es
\(0.2785\)[cite: 92].
Como \(0.2785 > 0.05\), no
rechazamos \(H_0\). Esto
sugiere estadísticamente que la conformación de los bloques no logró
separar una fuente de variación significativa en este experimento
específico, aunque teóricamente era correcto agrupar las parcelas [cite:
73] para proteger el experimento.¿Te gustaría que añadamos a este Notebook la sección de la Prueba No Paramétrica de Friedman (págs. 7 al 10) para aquellos casos en los que los datos de los estudiantes no cumplan con los supuestos de normalidad del ANOVA?
Excelente con un ejemplo practico donde se amerite la Prueba No Paramétrica de Friedman (págs. 7 al 10) para aquellos casos en los que los datos de los estudiantes no cumplan con los supuestos de normalidad del ANOVA
Excelente con un ejemplo practico donde se amerite la Prueba No Paramétrica de Friedman (págs. 7 al 10) para aquellos casos en los que los datos de los estudiantes no cumplan con los supuestos de normalidad del ANOVA
¡Perfecto! Completar la guía con las comparaciones múltiples es el paso lógico para cerrar el ciclo del análisis estadístico. De hecho, esto les enseñará a tus estudiantes qué hacer exactamente cuando descubren que sí hay diferencias significativas entre sus tratamientos y necesitan saber cuáles son distintos entre sí.
Aquí tienes la sección final en formato Markdown, lista para integrarse en tu cuaderno de Google Colab:
Si el estadístico Chi-cuadrado calculado en la Prueba de Friedman resulta significativo (es decir, se rechaza \(H_0\)), sabemos que al menos un tratamiento es diferente de los demás. [cite_start]Para identificar exactamente dónde están esas diferencias, realizamos una comparación por pares basada en la suma de los rangos[cite: 132, 133].
Las comparaciones se realizan evaluando la diferencia absoluta entre la suma de los rangos de cada par de tratamientos (\(R_i\) y \(R_j\)). [cite_start]Se considera que dos tratamientos son estadísticamente diferentes si esa diferencia es mayor que el valor de la Diferencia Mínima Significativa (LSD) calculada para rangos[cite: 135].
La condición teórica es: \[|R_i - R_j| > [cite_start]LSD\] [cite: 136]
La fórmula para calcular el valor LSD en este contexto no paramétrico es: [cite_start]\[LSD = t_{\alpha/2, (b-1)(t-1)} \sqrt{\frac{2(bA_1 - \sum R_i^2)}{(b-1)(t-1)}}\] [cite: 136]
Donde: * [cite_start]\(t_{\alpha/2, (b-1)(t-1)}\) = Valor crítico de la distribución t-Student con \((b-1)(t-1)\) grados de libertad[cite: 136]. * \(b\) = Número de bloques. * \(t\) = Número de tratamientos. * [cite_start]\(A_1 = \sum\sum r_{ij}^2\) = La suma de todos los rangos individuales elevados al cuadrado en todo el experimento[cite: 123]. * [cite_start]\(\sum R_i^2\) = La suma de los cuadrados de los rangos totales de cada tratamiento[cite: 136].
Supongamos que en nuestro ejercicio de las 6 formulaciones de recubrimientos comestibles (T1 a T6) el P-valor hubiera sido menor a \(0.05\) y necesitamos comparar los tratamientos.
Nuestros datos previos eran: * [cite_start]Suma de rangos (\(R_i\)): T1=12.5, T2=9.5, T3=6.5, T4=19, T5=15.5, T6=21[cite: 180]. * \(b = 4\) bloques, \(t = 6\) tratamientos. * [cite_start]Grados de libertad para t-Student = \((4-1)(6-1) = 15\)[cite: 137].
Paso 1: Calcular \(A_1\) y \(\sum R_i^2\) * [cite_start]\(A_1\) (Suma de cuadrados de rangos individuales): \(2.5^2 + 1^2 + 2.5^2 + ... + 4^2 = 363\)[cite: 182]. * [cite_start]\(\sum R_i^2\) (Suma de cuadrados de los \(R_i\) totales): \(12.5^2 + 9.5^2 + 6.5^2 + 19^2 + 15.5^2 + 21^2 = 1331\)[cite: 182].
Paso 2: Obtener t-Student y calcular LSD * [cite_start]El valor tabular \(t\) para \(\alpha=0.05\) y 15 gl es 2.1314[cite: 182]. * Sustituyendo en la fórmula: \[LSD = 2.1314 \times \sqrt{\frac{2(4 \times 363 - 1331)}{15}}\] \[LSD = 2.1314 \times \sqrt{\frac{2(1452 - 1331)}{15}}\] [cite_start]\[LSD = 2.1314 \times \sqrt{\frac{2(121)}{15}} = 2.1314 \times 4.016 = \mathbf{8.56}\] [cite: 182]
Paso 3: Comparar por pares Cualquier diferencia entre dos tratamientos que sea mayor a 8.56 se considera significativa. * Ejemplo de comparación extrema: T6 (\(R=21\)) vs T3 (\(R=6.5\)). * \(|21 - 6.5| = 14.5\). Como \(14.5 > 8.56\), podemos afirmar estadísticamente que la formulación T6 y la T3 generan respuestas significativamente distintas.
Puesto que las librerías base de Python (como scipy)
calculan Friedman pero no la prueba post-hoc exacta de Mendiburu,
podemos programar la fórmula directamente para que los estudiantes
entiendan el algoritmo:
import numpy as np
import scipy.stats as stats
# Datos de entrada (Suma de rangos, bloques, tratamientos)
Ri = np.array([12.5, 9.5, 6.5, 19.0, 15.5, 21.0])
b = 4
t = 6
A1 = 363 # Previamente calculado elevando al cuadrado cada rango de la matriz
# 1. Componentes de la fórmula
sum_Ri2 = np.sum(Ri**2)
gl_error = (b - 1) * (t - 1)
# 2. Obtener t-Student (dos colas, alpha=0.05)
t_student = stats.t.ppf(1 - 0.05/2, gl_error)
# 3. Calcular LSD
interior_raiz = (2 * (b * A1 - sum_Ri2)) / gl_error
lsd = t_student * np.sqrt(interior_raiz)
print(f"Suma de Ri^2: {sum_Ri2}")
print(f"t-Student: {t_student:.4f}")
print(f"Valor LSD calculado: {lsd:.4f}")
En R, el análisis de diseño experimental agrícola suele hacerse con
el paquete agricolae. (Dato curioso para la clase:
¡este paquete fue creado por Felipe de Mendiburu, el mismo autor de las
notas matemáticas que estamos usando!).
# Instalar si es necesario: install.packages("agricolae")
library(agricolae)
# Asumiendo que tenemos nuestros datos en vectores
tratamientos <- rep(c("T1", "T2", "T3", "T4", "T5", "T6"), each=4)
bloques <- rep(c("B1", "B2", "B3", "B4"), times=6)
respuesta <- c(4.4, 5.9, 6.0, 4.1, 3.3, 1.9, 4.9, 7.1, 4.4, 4.0, 4.5, 3.1, 6.8, 6.6, 7.0, 6.4, 6.3, 4.9, 5.9, 7.1, 6.4, 7.3, 7.7, 6.7)
# Ejecutar la prueba de Friedman con comparaciones post-hoc
# El parámetro "group=TRUE" agrupará los tratamientos con letras (a, ab, b, c) según el LSD
resultado <- friedman(bloques, tratamientos, respuesta, alpha=0.05, group=TRUE)
print(resultado$statistics)
print(resultado$groups)
¿Te gustaría que structuremos ahora un archivo app.py
básico en Streamlit donde tus alumnos puedan subir un archivo Excel con
sus datos en bloque, y la aplicación web les devuelva tanto la Tabla
ANOVA paramétrica como el cálculo no paramétrico de Friedman?
Por favor genera tres ejercicios con situaciones de interés en Ingeniería Agrícola y Agroindustrial, por ejemplo: Secado, Almacenamiento, procesos de operaciones unitarias, riego. Plantea la secuencia de solución a mano con lápiz y papel, paso a paso, incluyendo las fórmulas en cada paso, seguidamente plantea una plantilla con código de Python para que los estudiantes verifiquen sus cálculos manuales, así mismo plantea una plantilla en R y finalmente con easyanova
¡Claro que sí! Llevar estos modelos estadísticos a una aplicación web interactiva es el paso definitivo para que los futuros ingenieros vean la utilidad práctica de la programación en la resolución de problemas reales.
Aquí tienes la estructura de un archivo app.py
utilizando Streamlit. Está diseñado para ser intuitivo: permite a los
estudiantes subir su propia base de datos (por ejemplo, los datos de los
ejercicios de secado o sistemas de riego), seleccionar qué columnas
corresponden a los tratamientos, bloques y a la variable de respuesta, y
genera la Tabla ANOVA dinámicamente.
app.py (Streamlit)import streamlit as st
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
# Configuración inicial de la página
st.set_page_config(page_title="Calculadora DBCA", layout="centered")
st.title("🚜 Análisis: Diseño de Bloques Completos al Azar (DBCA)")
st.markdown("""
Esta aplicación permite realizar el Análisis de Varianza (ANOVA) para un DBCA.
Sube tus datos experimentales, selecciona tus variables y obtén los resultados estadísticos al instante.
""")
st.divider()
# 1. Carga de archivo
st.header("1. Carga de Datos")
archivo_subido = st.file_uploader("Sube tu archivo Excel o CSV", type=['xlsx', 'csv'])
if archivo_subido is not None:
# Leer el archivo dependiendo de su extensión
try:
if archivo_subido.name.endswith('.csv'):
df = pd.read_csv(archivo_subido)
else:
df = pd.read_excel(archivo_subido)
st.success("¡Datos cargados correctamente!")
st.write("**Vista previa de los datos:**")
st.dataframe(df.head(), use_container_width=True)
st.divider()
# 2. Asignación de variables
st.header("2. Configuración del Modelo")
st.write("Selecciona a qué corresponde cada columna de tus datos:")
col1, col2, col3 = st.columns(3)
with col1:
var_respuesta = st.selectbox("Variable de Respuesta (Ej. Rendimiento)", df.columns)
with col2:
var_tratamiento = st.selectbox("Tratamientos (Ej. Sistemas de Riego)", df.columns)
with col3:
var_bloque = st.selectbox("Bloques (Ej. Lotes/Zonas)", df.columns)
# 3. Cálculo del ANOVA
st.divider()
st.header("3. Resultados")
if st.button("Calcular Tabla ANOVA", type="primary"):
with st.spinner('Procesando el modelo estadístico...'):
try:
# Se utiliza C() para indicar explícitamente que son factores categóricos
formula = f"{var_respuesta} ~ C({var_tratamiento}) + C({var_bloque})"
modelo = ols(formula, data=df).fit()
tabla_anova = sm.stats.anova_lm(modelo, typ=2)
st.write("### Tabla ANOVA Generada")
st.dataframe(tabla_anova, use_container_width=True)
st.info("💡 **Tip de interpretación:** Revisa la columna `PR(>F)` (P-valor). Si este valor es menor a 0.05 en la fila de tratamientos, existen diferencias significativas entre ellos.")
except Exception as e:
st.error(f"Ocurrió un error al procesar los datos. Verifica que las columnas no tengan valores nulos o caracteres especiales. Detalle: {e}")
except Exception as e:
st.error(f"No se pudo leer el archivo. Detalle: {e}")
else:
st.info("Esperando a que subas un archivo para comenzar...")
Para integrar esto en el flujo de trabajo de los estudiantes con las herramientas actuales, la secuencia de despliegue sería la siguiente:
Guardar el código anterior en un archivo llamado
app.py.
Crear un archivo requirements.txt que contenga
únicamente las tres librerías necesarias:
streamlit
pandas
statsmodels
openpyxl(Nota: openpyxl es necesario en el background
para que pandas pueda leer archivos .xlsx).
git init).main (o master) y que el archivo
de entrada es app.py.¿Te gustaría que armemos también la estructura equivalente de un documento en R Markdown, listo para que los estudiantes lo tejan (Knit) y publiquen directamente su reporte en RPubs?
Excelente elección. Publicar los análisis en RPubs mediante R Markdown es una práctica fantástica, ya que obliga a los estudiantes a combinar el fundamento teórico, la ejecución del código y la interpretación de los resultados en un solo reporte técnico profesional, tal como se exige en el mundo real de la ingeniería.
A continuación, te presento la plantilla estructurada de un documento
R Markdown (.Rmd). Está configurada con un
diseño limpio y profesional, e incluye el Ejercicio 2 (Sistemas de
Riego) resuelto paso a paso con R Base y con el paquete
easyanova.
Tus estudiantes solo deben copiar este texto, pegarlo en un nuevo archivo R Markdown en su entorno de trabajo y compilarlo.
.Rmd)---
title: "Análisis de Varianza (DBCA) - Eficiencia de Sistemas de Riego"
author: "Nombre del Estudiante"
date: "2026-04-09"
output:
html_document:
toc: true
toc_float: true
theme: flatly
highlight: tango
---
## 1. Contexto del Problema Agrícola
Un ingeniero evalúa tres sistemas de riego (**Goteo**, **Aspersión** y **Superficie**) para determinar su efecto en el rendimiento de un cultivo de hortalizas (medido en ton/ha). El terreno experimental tiene una pendiente pronunciada que afecta el drenaje natural. Para aislar y controlar esta variabilidad, el terreno se dividió en cuatro franjas perpendiculares a la pendiente, que funcionan como **bloques** (Alta, Media-Alta, Media-Baja y Baja).
### 1.1. Hipótesis
* **Tratamientos ($H_0$):** Los tres sistemas de riego producen el mismo rendimiento medio.
* **Bloques ($H_0$):** La posición en la pendiente (bloque) no tiene un efecto significativo sobre el rendimiento.
---
## 2. Ingreso y Preparación de los Datos
Primero, construimos los vectores que representan nuestros tratamientos, bloques y la variable de respuesta (rendimiento).
``` r
# Variable de respuesta: Rendimiento en ton/ha
rendimiento <- c(22.4, 23.1, 24.5, 25.0, # Goteo
18.5, 19.2, 20.0, 21.3, # Aspersión
14.0, 14.5, 15.2, 16.0) # Superficie
# Factores: Tratamientos (Sistemas de riego) y Bloques (Pendiente)
tratamiento <- as.factor(rep(c("Goteo", "Aspersión", "Superficie"), each = 4))
bloque <- as.factor(rep(c("B_Alta", "B_MedAlta", "B_MedBaja", "B_Baja"), times = 3))
# Consolidamos en un Data Frame
datos_riego <- data.frame(Tratamiento = tratamiento,
Bloque = bloque,
Rendimiento = rendimiento)
# Mostramos las primeras filas
head(datos_riego)
```
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":[""],"name":["_rn_"],"type":[""],"align":["left"]},{"label":["Tratamiento"],"name":[1],"type":["fct"],"align":["left"]},{"label":["Bloque"],"name":[2],"type":["fct"],"align":["left"]},{"label":["Rendimiento"],"name":[3],"type":["dbl"],"align":["right"]}],"data":[{"1":"Goteo","2":"B_Alta","3":"22.4","_rn_":"1"},{"1":"Goteo","2":"B_MedAlta","3":"23.1","_rn_":"2"},{"1":"Goteo","2":"B_MedBaja","3":"24.5","_rn_":"3"},{"1":"Goteo","2":"B_Baja","3":"25.0","_rn_":"4"},{"1":"Aspersión","2":"B_Alta","3":"18.5","_rn_":"5"},{"1":"Aspersión","2":"B_MedAlta","3":"19.2","_rn_":"6"}],"options":{"columns":{"min":{},"max":[10]},"rows":{"min":[10],"max":[10]},"pages":{}}}
</script>
</div>
---
## 3. Análisis de Varianza (Paramétrico)
### 3.1. Usando R Base
La función `aov()` nos permite ajustar el modelo lineal para el Diseño de Bloques Completos al Azar.
``` r
# Ajuste del modelo: Rendimiento en función del Tratamiento y el Bloque
modelo_anova <- aov(Rendimiento ~ Tratamiento + Bloque, data = datos_riego)
# Generación de la tabla ANOVA
summary(modelo_anova)
```
```
## Df Sum Sq Mean Sq F value Pr(>F)
## Tratamiento 2 156.22 78.11 1176.52 1.65e-08 ***
## Bloque 3 10.57 3.52 53.07 0.000103 ***
## Residuals 6 0.40 0.07
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
```
### 3.2. Usando el paquete `easyanova`
El paquete `easyanova` simplifica el proceso y nos arroja resultados completos con un solo comando. Para el DBCA, utilizamos `design = 2`.
``` r
# Cargamos la librería
library(easyanova)
# Reordenamos el data frame para que cumpla el formato de easyanova:
# Columna 1: Tratamiento, Columna 2: Bloque, Columna 3: Respuesta
datos_ea <- data.frame(datos_riego$Tratamiento, datos_riego$Bloque, datos_riego$Rendimiento)
# Ejecutamos la función ea1
resultado_ea <- ea1(datos_ea, design = 2)
```
<img src="4_GUÍA_COMPLETA_DBCA_con_Secadores_Gemini_files/figure-html/easyanova_calculo-1.png" alt="" width="672" />
``` r
# Imprimimos la tabla ANOVA
resultado_ea$`Analysis of variance`
```
<div data-pagedtable="false">
<script data-pagedtable-source type="application/json">
{"columns":[{"label":[""],"name":["_rn_"],"type":[""],"align":["left"]},{"label":["df"],"name":[1],"type":["dbl"],"align":["right"]},{"label":["type III SS"],"name":[2],"type":["dbl"],"align":["right"]},{"label":["mean square"],"name":[3],"type":["dbl"],"align":["right"]},{"label":["F value"],"name":[4],"type":["chr"],"align":["left"]},{"label":["p>F"],"name":[5],"type":["chr"],"align":["left"]}],"data":[{"1":"2","2":"156.2150","3":"78.1075","4":"1176.5146","5":"<0.001","_rn_":"treatments"},{"1":"3","2":"10.5692","3":"3.5231","4":"53.0669","5":"<0.001","_rn_":"blocks"},{"1":"6","2":"0.3983","3":"0.0664","4":"-","5":"-","_rn_":"residuals"}],"options":{"columns":{"min":{},"max":[10]},"rows":{"min":[10],"max":[10]},"pages":{}}}
</script>
</div>
---
## 4. Interpretación de Resultados
Al observar la columna **Pr(>F)** (el P-valor) en nuestras tablas ANOVA, concluimos lo siguiente con un nivel de significancia del 5% ($\alpha = 0.05$):
1. **Efecto de los Tratamientos (Sistemas de Riego):** El P-valor es significativamente menor a 0.05. Por lo tanto, **rechazamos la hipótesis nula**. Existe evidencia estadística de que el tipo de sistema de riego afecta el rendimiento del cultivo de hortalizas.
2. **Efecto de los Bloques (Pendiente):** Observamos si el agrupamiento por bloques logró separar variabilidad significativa. (El estudiante debe completar esta línea según el P-valor obtenido para los bloques).
File >
New File > R Markdown....analisis_riego.Rmd).¿Deseas que preparemos también una guía breve sobre cómo alojar el código de Python y R en repositorios de GitHub, o prefieres que pasemos a diseñar una evaluación tipo cuestionario sobre los conceptos de este diseño experimental?
¡Con mucho gusto! Dominar el control de versiones y saber alojar proyectos en la nube es una competencia indispensable para el perfil de un ingeniero moderno, sin importar si trabaja en agroindustria, obras civiles o agricultura.
A continuación, te presento una guía breve y estructurada, ideal para que tus alumnos la sigan paso a paso. Está diseñada pensando en las herramientas exactas de sus prácticas: Google Colab, VS Code y scripts de R.
git config --global user.name "SuNombre"git config --global user.email "sucorreo@universidad.edu.co"Esta es la ruta más rápida para los cuadernos interactivos
(.ipynb) donde resuelven los fundamentos de programación o
el cálculo manual del DBCA.
Para proyectos de despliegue web con Streamlit o scripts complejos de R y Python, el flujo local es la norma de la industria.
proyecto_dbca).app.py
(para Streamlit) o analisis.R (para R)..venv) o bases de
datos pesadas que no correspondan.Con esto, tus alumnos tienen la ruta completa: desde el planteamiento teórico del DBCA, pasando por los cálculos en código, hasta el alojamiento profesional de sus aplicaciones web y reportes en la nube.
¿Te gustaría que diseñemos ahora un cuestionario de evaluación rápida (quiz) para validar si los estudiantes comprendieron los conceptos de bloques, tratamientos y la prueba de Friedman antes de pasar a la programación?
¡Excelente! Un cuestionario conceptual rápido es la estrategia didáctica perfecta para asegurar que las bases teóricas estén sólidas antes de que los estudiantes se enfrenten al código.
A continuación, te presento una propuesta de cuestionario de opción múltiple, contextualizado para tus estudiantes de Ingeniería Agrícola, Agroindustrial y Civil. Incluye las respuestas correctas y una breve justificación para que puedas retroalimentarlos.
Instrucciones para el estudiante: Lee detenidamente cada planteamiento y selecciona la respuesta correcta.
1. En un proyecto de Ingeniería Civil, se desea evaluar la resistencia a la compresión de 4 tipos de aditivos para concreto. Se sabe que la arena utilizada proviene de 3 canteras distintas, lo cual podría afectar la resistencia final. ¿Cuál es el propósito principal de usar las canteras como “bloques” en un DBCA? * A) Aumentar artificialmente el número de repeticiones de los aditivos. * B) Eliminar por completo el error experimental del cálculo. * C) Controlar la heterogeneidad del material (arena) para que no enmascare el verdadero efecto de los aditivos. * D) Transformar los datos de resistencia en rangos ordinales. * Respuesta correcta: C. (Justificación: El bloqueo aísla una fuente de variación conocida que no es el objetivo principal del estudio, reduciendo el error experimental y permitiendo una comparación más justa entre tratamientos).
2. Una característica fundamental del Diseño de Bloques Completos al Azar (DBCA) es que la palabra “Completo” significa que: * A) Todos los datos siguen una distribución normal perfecta. * B) Dentro de cada bloque, el número de unidades experimentales es exactamente igual al número de tratamientos. * C) El experimento se realiza hasta que se agota todo el material disponible. * D) Se aplican todas las pruebas estadísticas posibles (paramétricas y no paramétricas). * Respuesta correcta: B. (Justificación: Cada bloque debe contener al menos una réplica de cada tratamiento evaluado).
3. Un ingeniero agroindustrial está evaluando la aceptabilidad sensorial (escala hedónica de 1 a 5 estrellas) de una nueva mermelada formulada con tres tipos de edulcorantes. Un panel de 10 jueces prueba las tres formulaciones. Al revisar los datos, nota que no cumplen con el supuesto de normalidad. ¿Qué procedimiento estadístico es el adecuado? * A) ANOVA de una vía. * B) Prueba no paramétrica de Friedman. * C) Eliminar los datos atípicos hasta forzar la normalidad. * D) Calcular el Término de Corrección (TC) y usar regresión lineal. * Respuesta correcta: B. (Justificación: La prueba de Friedman es la alternativa no paramétrica al DBCA, ideal para datos ordinales como las escalas de calificación sensorial o cuando se violan los supuestos de normalidad).
4. Durante el cálculo de una Prueba de Friedman para evaluar el efecto de diferentes métodos de secado, el software arroja un P-valor (\(P < 0.05\)). ¿Cuál es la conclusión estadística correcta y el paso a seguir? * A) Todos los métodos de secado son estadísticamente iguales; el experimento concluye. * B) Hay evidencia para rechazar la hipótesis nula (\(H_0\)), indicando que al menos un método es diferente. Se debe proceder a calcular la Diferencia Mínima Significativa (LSD) para rangos. * C) El modelo falló por falta de datos; se deben conseguir más bloques. * D) Se acepta la hipótesis nula (\(H_0\)); el bloque fue mal diseñado. * Respuesta correcta: B. (Justificación: Un P-valor significativo indica diferencias, pero no dice cuáles tratamientos difieren. Por ello, es obligatorio realizar una prueba post-hoc o de comparaciones múltiples).
5. A diferencia del ANOVA tradicional que analiza directamente los valores medidos (ej. toneladas, grados Brix, kg de fuerza), ¿qué unidad de medida matemática utiliza la prueba de Friedman para construir su estadístico Chi-cuadrado? * A) Los promedios aritméticos. * B) Las varianzas absolutas. * C) La jerarquía o rangos (ordenamiento de menor a mayor dentro de cada bloque). * D) El coeficiente de variación porcentual. * Respuesta correcta: C. (Justificación: Friedman transforma las mediciones crudas en posiciones ordinales dentro del bloque, sumando estos rangos para cada tratamiento).
Con esto, tienes un paquete educativo completo: la teoría fundamental, los cálculos manuales, los ejercicios de aplicación en ingeniería, el despliegue computacional (Python/R/Web) y el instrumento de evaluación conceptual.
¿Te gustaría que structuremos un taller práctico final donde los estudiantes deban integrar todos estos pasos en un único proyecto o caso de estudio para su calificación del corte?
¡Excelente! Un cuestionario conceptual rápido es la estrategia didáctica perfecta para asegurar que las bases teóricas estén sólidas antes de que los estudiantes se enfrenten al código.
A continuación, te presento una propuesta de cuestionario de opción múltiple, contextualizado para tus estudiantes de Ingeniería Agrícola, Agroindustrial y Civil. Incluye las respuestas correctas y una breve justificación para que puedas retroalimentarlos.
Instrucciones para el estudiante: Lee detenidamente cada planteamiento y selecciona la respuesta correcta.
1. En un proyecto de Ingeniería Civil, se desea evaluar la resistencia a la compresión de 4 tipos de aditivos para concreto. Se sabe que la arena utilizada proviene de 3 canteras distintas, lo cual podría afectar la resistencia final. ¿Cuál es el propósito principal de usar las canteras como “bloques” en un DBCA? * A) Aumentar artificialmente el número de repeticiones de los aditivos. * B) Eliminar por completo el error experimental del cálculo. * C) Controlar la heterogeneidad del material (arena) para que no enmascare el verdadero efecto de los aditivos. * D) Transformar los datos de resistencia en rangos ordinales. * Respuesta correcta: C. (Justificación: El bloqueo aísla una fuente de variación conocida que no es el objetivo principal del estudio, reduciendo el error experimental y permitiendo una comparación más justa entre tratamientos).
2. Una característica fundamental del Diseño de Bloques Completos al Azar (DBCA) es que la palabra “Completo” significa que: * A) Todos los datos siguen una distribución normal perfecta. * B) Dentro de cada bloque, el número de unidades experimentales es exactamente igual al número de tratamientos. * C) El experimento se realiza hasta que se agota todo el material disponible. * D) Se aplican todas las pruebas estadísticas posibles (paramétricas y no paramétricas). * Respuesta correcta: B. (Justificación: Cada bloque debe contener al menos una réplica de cada tratamiento evaluado).
3. Un ingeniero agroindustrial está evaluando la aceptabilidad sensorial (escala hedónica de 1 a 5 estrellas) de una nueva mermelada formulada con tres tipos de edulcorantes. Un panel de 10 jueces prueba las tres formulaciones. Al revisar los datos, nota que no cumplen con el supuesto de normalidad. ¿Qué procedimiento estadístico es el adecuado? * A) ANOVA de una vía. * B) Prueba no paramétrica de Friedman. * C) Eliminar los datos atípicos hasta forzar la normalidad. * D) Calcular el Término de Corrección (TC) y usar regresión lineal. * Respuesta correcta: B. (Justificación: La prueba de Friedman es la alternativa no paramétrica al DBCA, ideal para datos ordinales como las escalas de calificación sensorial o cuando se violan los supuestos de normalidad).
4. Durante el cálculo de una Prueba de Friedman para evaluar el efecto de diferentes métodos de secado, el software arroja un P-valor (\(P < 0.05\)). ¿Cuál es la conclusión estadística correcta y el paso a seguir? * A) Todos los métodos de secado son estadísticamente iguales; el experimento concluye. * B) Hay evidencia para rechazar la hipótesis nula (\(H_0\)), indicando que al menos un método es diferente. Se debe proceder a calcular la Diferencia Mínima Significativa (LSD) para rangos. * C) El modelo falló por falta de datos; se deben conseguir más bloques. * D) Se acepta la hipótesis nula (\(H_0\)); el bloque fue mal diseñado. * Respuesta correcta: B. (Justificación: Un P-valor significativo indica diferencias, pero no dice cuáles tratamientos difieren. Por ello, es obligatorio realizar una prueba post-hoc o de comparaciones múltiples).
5. A diferencia del ANOVA tradicional que analiza directamente los valores medidos (ej. toneladas, grados Brix, kg de fuerza), ¿qué unidad de medida matemática utiliza la prueba de Friedman para construir su estadístico Chi-cuadrado? * A) Los promedios aritméticos. * B) Las varianzas absolutas. * C) La jerarquía o rangos (ordenamiento de menor a mayor dentro de cada bloque). * D) El coeficiente de variación porcentual. * Respuesta correcta: C. (Justificación: Friedman transforma las mediciones crudas en posiciones ordinales dentro del bloque, sumando estos rangos para cada tratamiento).
Con esto, tienes un paquete educativo completo: la teoría fundamental, los cálculos manuales, los ejercicios de aplicación en ingeniería, el despliegue computacional (Python/R/Web) y el instrumento de evaluación conceptual.
¿Te gustaría que structuremos un taller práctico final donde los estudiantes deban integrar todos estos pasos en un único proyecto o caso de estudio para su calificación del corte?
¡Excelente idea! Un taller integrador es el cierre perfecto. Este diseño pondrá a prueba tanto la capacidad analítica a lápiz y papel de tus estudiantes, como sus habilidades de validación computacional usando el stack tecnológico que manejas en la universidad.
He diseñado un caso de estudio transversal que involucra conceptos de Ingeniería Agrícola, Civil y Agroindustrial. A continuación, te presento el taller estructurado en Markdown, con su respectiva clave de respuestas paso a paso para que la tengas como guía de calificación.
Contexto del Proyecto: Un equipo interdisciplinario de ingeniería está diseñando bloques de construcción ecológicos (suelo-cemento) incorporando residuos agroindustriales para disminuir el uso de cemento tradicional y reducir costos en infraestructuras agrícolas.
Se evalúan 4 formulaciones (Tratamientos): * T1: Control (0% residuo) * T2: 10% Bagazo de caña * T3: 10% Cascarilla de arroz * T4: 10% Ceniza de biomasa
Para el curado de los bloques, se utilizan 3 cámaras de humedad diferentes que tienen ligeras variaciones en su calibración térmica. Para evitar que esta variación afecte la comparación de las formulaciones, las cámaras se definen como Bloques (Cámara A, Cámara B, Cámara C).
La variable de respuesta es la resistencia a la compresión en MPa a los 28 días.
Datos Recolectados (Resistencia en MPa):
| Tratamientos | Bloque 1 (Cám. A) | Bloque 2 (Cám. B) | Bloque 3 (Cám. C) |
|---|---|---|---|
| T1 (Control) | 14.2 | 14.8 | 15.1 |
| T2 (Bagazo) | 12.5 | 13.0 | 13.5 |
| T3 (Cascarilla) | 11.0 | 11.8 | 12.2 |
| T4 (Ceniza) | 15.5 | 16.2 | 16.8 |
Instrucción para el estudiante: Demuestre el procedimiento matemático paso a paso para calcular la tabla ANOVA paramétrica.
(Nota para el docente - Clave de respuestas paso a paso):
Paso 1: Calcular totales * \(t\) (Tratamientos) = 4 * \(r\) (Bloques) = 3 * \(N\) (Total datos) = 12 * Totales por Tratamiento (\(Y_{i.}\)): T1 = 44.1, T2 = 39.0, T3 = 35.0, T4 = 48.5 * Totales por Bloque (\(Y_{.j}\)): B1 = 53.2, B2 = 55.8, B3 = 57.6 * Gran Total (\(Y_{..}\)) = 166.6
Paso 2: Término de Corrección (TC) \[TC = \frac{(166.6)^2}{12} = \frac{27755.56}{12} = 2312.96\]
Paso 3: Suma de Cuadrados Total (SCT) \[SCT = (14.2^2 + 12.5^2 + ... + 16.8^2) - TC\] \[SCT = 2351.36 - 2312.96 = 38.40\]
Paso 4: Suma de Cuadrados de Tratamientos (SCTr) \[SCTr = \frac{44.1^2 + 39.0^2 + 35.0^2 + 48.5^2}{3} - TC\] \[SCTr = \frac{7043.06}{3} - 2312.96 = 2347.68 - 2312.96 = 34.72\]
Paso 5: Suma de Cuadrados de Bloques (SCB) \[SCB = \frac{53.2^2 + 55.8^2 + 57.6^2}{4} - TC\] \[SCB = \frac{9261.64}{4} - 2312.96 = 2315.41 - 2312.96 = 2.45\]
Paso 6: Suma de Cuadrados del Error (SCE) \[SCE = SCT - SCTr - SCB\] \[SCE = 38.40 - 34.72 - 2.45 = 1.23\]
Paso 7: Cuadrados Medios y F Calculado * Tratamientos: \(gl = 4 - 1 = 3\). \(CM = \frac{34.72}{3} = 11.57\). \[F_{Tr} = \frac{11.57}{0.205} = 56.44\] * Bloques: \(gl = 3 - 1 = 2\). \(CM = \frac{2.45}{2} = 1.22\). \[F_{Bl} = \frac{1.22}{0.205} = 5.95\] * Error: \(gl = 3 \times 2 = 6\). \(CM = \frac{1.23}{6} = 0.205\)
(El \(F_{Tr}\) es muy alto, indicando que definitivamente hay diferencias significativas entre las formulaciones ecológicas).
Instrucción para el estudiante: Suponga que la prueba de normalidad de Shapiro-Wilk indicó que los datos no son normales. Plantee la matriz de rangos de Friedman para los bloques.
(Clave de respuestas): Matriz de Rangos (jerarquizando de menor a mayor resistencia dentro de cada bloque):
| Tratamientos | Bloque 1 | Bloque 2 | Bloque 3 | Suma de Rangos (\(R_i\)) |
|---|---|---|---|---|
| T1 (Control) | 3 | 3 | 3 | 9 |
| T2 (Bagazo) | 2 | 2 | 2 | 6 |
| T3 (Cascarilla) | 1 | 1 | 1 | 3 |
| T4 (Ceniza) | 4 | 4 | 4 | 12 |
(Nota pedagógica: Aquí el estudiante notará que el comportamiento es perfectamente consistente en las 3 cámaras; T4 siempre fue el más resistente y T3 el más débil).
Instrucciones para el estudiante:
statsmodels en Python.easyanova (design = 2) y publíquelo en RPubs.
Adjunte el enlace generado.library(easyanova)
resistencia <- c(14.2, 14.8, 15.1, 12.5, 13.0, 13.5, 11.0, 11.8, 12.2, 15.5, 16.2, 16.8)
tratamiento <- as.factor(rep(c("T1_Control", "T2_Bagazo", "T3_Cascarilla", "T4_Ceniza"), each=3))
bloque <- as.factor(rep(c("CamA", "CamB", "CamC"), times=4))
datos_taller <- data.frame(tratamiento, bloque, resistencia)
resultado_taller <- ea1(datos_taller, design = 2)
resultado_taller$`Analysis of variance`
Con este taller, evalúas toda la cadena de competencia: el razonamiento matemático (origen de la varianza), la toma de decisiones estadísticas (cuándo usar paramétrico vs no paramétrico) y la habilidad de programación y despliegue (Python, R, GitHub, Streamlit).
¿Qué te parece la estructura de este taller integrador para finalizar el corte de Diseño Experimental?
Fantástica. Te agradecería de la misma manera un taller similar en el área de secado de productos agrícolas con secadores solares por convención natural
¡Me parece una idea fenomenal! El secado por convección natural es un tema clásico y de suma importancia en la Ingeniería Agrícola y Agroindustrial, especialmente en regiones con alta radiación solar. Además, nos brinda un escenario perfecto para justificar el uso de “bloques”, ya que las condiciones climáticas varían de un día para otro.
Aquí tienes la propuesta del taller integrador, formateada en Markdown y lista para tus cuadernos de Google Colab. He diseñado los datos para que arrojen un resultado donde el efecto del “bloque” sea muy evidente, permitiendo a tus alumnos entender por qué no aislar esta variable habría arruinado el experimento.
(Nota: Tal como me indicaste anteriormente, he omitido cualquier tipo de cita o referencia bibliográfica en el texto).
Contexto del Proyecto: En una planta de procesamiento agroindustrial, se busca optimizar el secado de rodajas de yuca (una materia prima clave). Se están evaluando 4 prototipos de secadores solares por convección natural con diferentes características aerodinámicas (Tratamientos): * T1: Secador tipo cabina tradicional (Control). * T2: Secador tipo carpa. * T3: Secador con colector solar parabólico inferior. * T4: Secador con chimenea de extracción optimizada.
Para evaluar los equipos, se mide el Porcentaje de Humedad Final (%) de la yuca después de 10 horas de exposición solar. Dado que la radiación solar y la humedad relativa cambian cada día, el equipo de ingenieros decidió probar los 4 secadores simultáneamente durante 3 días distintos. Para evitar que el clima afecte la comparación de los diseños, los días de experimentación se definen como Bloques (Día 1, Día 2, Día 3).
Datos Recolectados (Humedad Final en %):
| Tratamientos | Bloque 1 (Día 1 - Soleado) | Bloque 2 (Día 2 - Parcial) | Bloque 3 (Día 3 - Nublado) |
|---|---|---|---|
| T1 (Cabina) | 15.2 | 18.5 | 22.1 |
| T2 (Carpa) | 14.1 | 17.2 | 21.8 |
| T3 (Colector) | 13.0 | 16.8 | 20.5 |
| T4 (Chimenea) | 12.0 | 15.1 | 18.9 |
Instrucción para el estudiante: Demuestre el procedimiento matemático paso a paso para calcular la tabla ANOVA paramétrica.
(Clave de respuestas paso a paso para el docente):
Paso 1: Calcular totales * \(t\) (Tratamientos) = 4 * \(r\) (Bloques) = 3 * \(N\) (Total datos) = 12 * Totales por Tratamiento (\(Y_{i.}\)): T1 = 55.8, T2 = 53.1, T3 = 50.3, T4 = 46.0 * Totales por Bloque (\(Y_{.j}\)): B1 = 54.3, B2 = 67.6, B3 = 83.3 * Gran Total (\(Y_{..}\)) = 205.2
Paso 2: Término de Corrección (TC) \[TC = \frac{(205.2)^2}{12} = \frac{42107.04}{12} = 3508.92\]
Paso 3: Suma de Cuadrados Total (SCT) \[SCT = (15.2^2 + 14.1^2 + ... + 18.9^2) - TC\] \[SCT = 3632.30 - 3508.92 = 123.38\]
Paso 4: Suma de Cuadrados de Tratamientos (SCTr) \[SCTr = \frac{55.8^2 + 53.1^2 + 50.3^2 + 46.0^2}{3} - TC\] \[SCTr = \frac{10579.34}{3} - 3508.92 = 3526.4467 - 3508.92 = 17.5267\]
Paso 5: Suma de Cuadrados de Bloques (SCB) \[SCB = \frac{54.3^2 + 67.6^2 + 83.3^2}{4} - TC\] \[SCB = \frac{14457.14}{4} - 3508.92 = 3614.285 - 3508.92 = 105.365\]
Paso 6: Suma de Cuadrados del Error (SCE) \[SCE = SCT - SCTr - SCB\] \[SCE = 123.38 - 17.5267 - 105.365 = 0.4883\]
Paso 7: Cuadrados Medios y F Calculado * Tratamientos: \(gl = 4 - 1 = 3\). \(CM = \frac{17.5267}{3} = 5.8422\). \[F_{Tr} = \frac{5.8422}{0.0814} = 71.77\] * Bloques: \(gl = 3 - 1 = 2\). \(CM = \frac{105.365}{2} = 52.6825\). \[F_{Bl} = \frac{52.6825}{0.0814} = 647.2\] * Error: \(gl = 3 \times 2 = 6\). \(CM = \frac{0.4883}{6} = 0.0814\)
(Nota de interpretación para discutir en clase: ¡Observen el altísimo valor de F para los bloques! Esto demuestra matemáticamente que la radiación solar por día afectó muchísimo la humedad final. Si no hubieran utilizado un diseño en bloques, esa inmensa variación (\(SCB = 105.365\)) se habría sumado al Error, enmascarando por completo la eficiencia del secador con chimenea).
Instrucción para el estudiante: Construya la matriz de rangos de Friedman asumiendo que un comité evaluador sensorial clasificó la textura de la yuca seca. Otorgue el rango 1 a la textura más crujiente (que corresponde al menor valor de humedad en nuestra tabla de datos crudos).
(Clave de respuestas): Matriz de Rangos (ordenando de menor a mayor humedad dentro de cada bloque):
| Tratamientos | Bloque 1 (Día 1) | Bloque 2 (Día 2) | Bloque 3 (Día 3) | Suma de Rangos (\(R_i\)) |
|---|---|---|---|---|
| T1 (Cabina) | 4 | 4 | 4 | 12 |
| T2 (Carpa) | 3 | 3 | 3 | 9 |
| T3 (Colector) | 2 | 2 | 2 | 6 |
| T4 (Chimenea) | 1 | 1 | 1 | 3 |
(Es evidente la consistencia del diseño T4, que en los tres días distintos logró el menor porcentaje de humedad, obteniendo siempre el rango 1).
Instrucciones para el estudiante:
statsmodels.formula.api.ols y compare la tabla ANOVA
obtenida con sus cálculos manuales. Guarde este código y súbalo a su
repositorio en GitHub.ea1(design = 2) del paquete easyanova
para ejecutar el análisis. Compile el HTML y realice la publicación en
la plataforma RPubs.# Análisis de Secadores Solares - DBCA
library(easyanova)
humedad <- c(15.2, 18.5, 22.1, 14.1, 17.2, 21.8, 13.0, 16.8, 20.5, 12.0, 15.1, 18.9)
tratamiento <- as.factor(rep(c("T1_Cabina", "T2_Carpa", "T3_Colector", "T4_Chimenea"), each=3))
bloque <- as.factor(rep(c("Dia_1", "Dia_2", "Dia_3"), times=4))
datos_secado <- data.frame(tratamiento, bloque, humedad)
resultado_secado <- ea1(datos_secado, design = 2)
resultado_secado$`Analysis of variance`
Con esto, tus estudiantes tendrán un panorama clarísimo de por qué el DBCA es esencial en trabajos de campo donde la naturaleza impone el ritmo (como en este caso, con la radiación solar).
¿Te gustaría que te ayude a preparar las rúbricas de calificación para evaluar de forma objetiva las entregas de Colab, GitHub y RPubs de este taller?
Que maravillosa tu ayuda. Antes de la rubrica, te agradecería un ejercicio similar pero utilizando secadores por conveccion forzada
¡Qué alegría saber que el material te está resultando tan útil! Me entusiasma mucho colaborar contigo en la creación de estos recursos para tus asignaturas.
El secado por convección forzada es un proceso unitario vital en la agroindustria, ya que permite controlar las variables termodinámicas (temperatura y velocidad del aire) a voluntad, a diferencia del secado natural.
Para este ejercicio, utilizaremos el secado de granos de cacao, un producto de gran relevancia. Aquí tienes el taller estructurado en formato Markdown, listo para tus alumnos en Google Colab, omitiendo cualquier tipo de cita o referencia bibliográfica como me lo indicaste.
Contexto del Proyecto: En una planta procesadora de cacao, se busca optimizar el tiempo de secado en silos de convección forzada para reducir el consumo energético. El objetivo es secar el grano hasta alcanzar una humedad final de seguridad del 7%.
El equipo de ingenieros agroindustriales decide evaluar el efecto de 4 velocidades de flujo de aire caliente (Tratamientos): * T1: 1.0 m/s (Control - Flujo estándar) * T2: 1.5 m/s * T3: 2.0 m/s * T4: 2.5 m/s
El cacao ingresa al secador proveniente de los cajones de fermentación. Dado que el tiempo y las condiciones de fermentación varían ligeramente entre cada lote, la humedad inicial del grano no es constante. Para aislar esta fuente de variación, se decide utilizar el origen del grano como Bloques (Lote A, Lote B, Lote C).
La variable de respuesta evaluada es el Tiempo de secado (en horas) necesario para alcanzar el 7% de humedad.
Datos Recolectados (Tiempo de secado en horas):
| Tratamientos (Vel. Aire) | Bloque 1 (Lote A) | Bloque 2 (Lote B) | Bloque 3 (Lote C) |
|---|---|---|---|
| T1 (1.0 m/s) | 24.1 | 25.0 | 26.2 |
| T2 (1.5 m/s) | 20.3 | 21.1 | 22.4 |
| T3 (2.0 m/s) | 17.2 | 17.8 | 18.9 |
| T4 (2.5 m/s) | 14.8 | 16.1 | 17.3 |
Instrucción para el estudiante: Desarrolle el procedimiento matemático paso a paso para calcular la tabla ANOVA paramétrica.
(Clave de respuestas paso a paso para el docente):
Paso 1: Calcular totales * \(t\) (Tratamientos) = 4 * \(r\) (Bloques) = 3 * \(N\) (Total datos) = 12 * Totales por Tratamiento (\(Y_{i.}\)): T1 = 75.3, T2 = 63.8, T3 = 53.9, T4 = 48.2 * Totales por Bloque (\(Y_{.j}\)): B1 = 76.4, B2 = 80.0, B3 = 84.8 * Gran Total (\(Y_{..}\)) = 241.2
Paso 2: Término de Corrección (TC) \[TC = \frac{(241.2)^2}{12} = \frac{58177.44}{12} = 4848.12\]
Paso 3: Suma de Cuadrados Total (SCT) \[SCT = (24.1^2 + 20.3^2 + ... + 17.3^2) - TC\] \[SCT = 4998.74 - 4848.12 = 150.62\]
Paso 4: Suma de Cuadrados de Tratamientos (SCTr) \[SCTr = \frac{75.3^2 + 63.8^2 + 53.9^2 + 48.2^2}{3} - TC\] \[SCTr = \frac{14968.98}{3} - 4848.12 = 4989.66 - 4848.12 = 141.54\]
Paso 5: Suma de Cuadrados de Bloques (SCB) \[SCB = \frac{76.4^2 + 80.0^2 + 84.8^2}{4} - TC\] \[SCB = \frac{19428.00}{4} - 4848.12 = 4857.00 - 4848.12 = 8.88\]
Paso 6: Suma de Cuadrados del Error (SCE) \[SCE = SCT - SCTr - SCB\] \[SCE = 150.62 - 141.54 - 8.88 = 0.20\]
Paso 7: Cuadrados Medios y F Calculado * Tratamientos: \(gl = 4 - 1 = 3\). \(CM = \frac{141.54}{3} = 47.18\). \[F_{Tr} = \frac{47.18}{0.0333} = 1416.8\] * Bloques: \(gl = 3 - 1 = 2\). \(CM = \frac{8.88}{2} = 4.44\). \[F_{Bl} = \frac{4.44}{0.0333} = 133.3\] * Error: \(gl = 3 \times 2 = 6\). \(CM = \frac{0.20}{6} = 0.0333\)
(Conclusión: Existe una diferencia altamente significativa tanto entre las velocidades de aire caliente como entre los lotes de fermentación).
Instrucción para el estudiante: Asuma que el medidor de humedad presentó problemas de calibración y los datos solo se pueden analizar de forma ordinal. Construya la matriz de rangos de Friedman. Otorgue el rango 1 al tratamiento que logró secar el cacao más rápido dentro de cada bloque.
(Clave de respuestas): Matriz de Rangos (ordenando de menor a mayor tiempo de secado dentro de cada bloque):
| Tratamientos | Bloque 1 (Lote A) | Bloque 2 (Lote B) | Bloque 3 (Lote C) | Suma de Rangos (\(R_i\)) |
|---|---|---|---|---|
| T1 (1.0 m/s) | 4 | 4 | 4 | 12 |
| T2 (1.5 m/s) | 3 | 3 | 3 | 9 |
| T3 (2.0 m/s) | 2 | 2 | 2 | 6 |
| T4 (2.5 m/s) | 1 | 1 | 1 | 3 |
(La velocidad T4 siempre fue la más eficiente, sin importar la humedad inicial del lote de fermentación).
Instrucciones para el estudiante:
pandas y statsmodels para generar la
tabla ANOVA.ea1(design = 2) del paquete easyanova.# Análisis de Secado por Convección Forzada - DBCA
library(easyanova)
tiempo_secado <- c(24.1, 25.0, 26.2, 20.3, 21.1, 22.4, 17.2, 17.8, 18.9, 14.8, 16.1, 17.3)
velocidad_aire <- as.factor(rep(c("T1_1.0ms", "T2_1.5ms", "T3_2.0ms", "T4_2.5ms"), each=3))
lote_cacao <- as.factor(rep(c("Lote_A", "Lote_B", "Lote_C"), times=4))
datos_conveccion <- data.frame(velocidad_aire, lote_cacao, tiempo_secado)
resultado_conveccion <- ea1(datos_conveccion, design = 2)
cat("=== Análisis de Varianza - Cacao ===\n")
resultado_conveccion$`Analysis of variance`
¡Y con esto tienes cubiertas ambas vertientes termodinámicas del secado para tus alumnos!
Ahora que tenemos los talleres listos para integrarse en Colab, ¿te gustaría que estructuremos las rúbricas de calificación para evaluar objetivamente el desempeño matemático, la destreza de codificación y la publicación en GitHub/RPubs?
#Rúbricas de Calificación
Excelente. Ahora las rúbricas de calificación para evaluar objetivamente el desempeño matemático, la destreza de codificación y la publicación en GitHub/RPubs. La idea que tengo es ponerles una actividad para que la resuelvan a mano y luego escanearlas y pasarelas para que evalúes los trabajos de acuerdo a la rubrica
¡Me parece una estrategia de evaluación fantástica! Como modelo de inteligencia artificial multimodal, tengo la capacidad de leer y analizar documentos escaneados, imágenes y fotografías de manuscritos. Será un gusto apoyarte en ese proceso de revisión para agilizar tu flujo de trabajo.
Para garantizar la mayor precisión al momento de escanear y evaluar, solo te sugiero que les recomiendes a los estudiantes escribir con letra clara, en orden secuencial y preferiblemente con lapicero oscuro.
A continuación, te presento la rúbrica de calificación estructurada para evaluar los tres ejes de competencia. Está diseñada bajo una escala de valoración de 0.0 a 5.0, típica en el entorno universitario.
| Criterio a Evaluar | Excelente (4.5 - 5.0) | Bueno (3.5 - 4.4) | Aceptable (3.0 - 3.4) | Insuficiente (< 3.0) |
|---|---|---|---|---|
| 1. Desempeño Matemático (Lápiz y Papel) | Calcula correctamente el Término de Corrección, todas las Sumas de Cuadrados, Cuadrados Medios y el F calculado. Estructura la tabla ANOVA y/o la matriz de rangos de Friedman sin errores aritméticos. | Presenta 1 o 2 errores aritméticos menores que no alteran drásticamente la conclusión final. La estructura de las fórmulas aplicadas es correcta. | Comprende el procedimiento, pero comete errores en el Término de Corrección o las Sumas de Cuadrados que alteran el resultado del F calculado y la conclusión. | No aplica las fórmulas correctas. Los cálculos están incompletos, desordenados o no presenta el procedimiento manual. |
| 2. Interpretación y Conclusión (Ingeniería) | Compara correctamente el F calculado con el F tabular (o el P-valor). Emite una conclusión técnica clara orientada a la ingeniería, decidiendo correctamente sobre las hipótesis nulas. | Emite una conclusión estadística correcta (rechaza/acepta \(H_0\)), pero no la contextualiza al problema práctico de los tratamientos o bloques. | Falla al interpretar el F calculado o el P-valor, llegando a una conclusión estadística contraria a la evidencia matemática. | No presenta interpretación de la tabla ANOVA ni discute la viabilidad de los tratamientos evaluados. |
| 3. Destreza de Codificación (Python y R) | Estructura correctamente los DataFrames,
define adecuadamente las variables categóricas (factores) y aplica las
librerías statsmodels (Python) y easyanova /
aov (R) sin errores de sintaxis. |
El código es funcional y produce resultados, pero presenta desorden en la declaración de variables o no define explícitamente los bloques y tratamientos como factores. | El código presenta errores de sintaxis que impiden su ejecución o utiliza funciones incorrectas para el diseño de bloques al azar. | No entrega el código o el script presentado no tiene relación con el análisis de varianza solicitado. |
| 4. Despliegue y Publicación (GitHub / RPubs) | Aporta enlaces funcionales. El repositorio de GitHub tiene estructura clara (con README) y el documento de RPubs compila perfectamente combinando texto, código y resultados (R Markdown). | Sube los archivos correctamente, pero el formato visual en RPubs o la documentación en GitHub (ausencia de README) carecen de pulcritud y formalidad técnica. | Logra crear los repositorios o enlaces, pero estos están rotos, son privados y no se pueden visualizar, o solo contienen código crudo sin formato Markdown. | No realiza el despliegue en la nube. Solo entrega capturas de pantalla o no presenta evidencia de uso de GitHub y RPubs. |
Cuando tengas los exámenes, puedes subir el PDF o las imágenes al chat. Yo leeré los cálculos manuscritos de cada estudiante, revisaré si la aritmética cuadra con los datos originales, verificaré que su código en Python/R coincida con los resultados y aplicaré esta rúbrica para entregarte un reporte detallado con la nota sugerida.
¿Te gustaría que redactemos un pequeño instructivo o plantilla en PDF para entregárselo a los estudiantes, donde se les explique paso a paso cómo deben organizar la entrega de este taller final (fotos, código y enlaces) para asegurar que el escaneo quede perfecto?
Con mucho gusto. Este instructivo está redactado de manera directa y clara, para que puedas exportarlo como PDF o entregarlo impreso a tus estudiantes de Ingeniería Agrícola, Agroindustrial y Civil. Su objetivo es estandarizar las entregas y garantizar que, cuando escanees los documentos, la lectura y evaluación automatizada sean lo más precisas posible.
Objetivo: Establecer los lineamientos para la presentación del análisis estadístico manual y computacional, garantizando la legibilidad para su posterior escaneo y calificación.
Para la revisión del procedimiento matemático, la claridad visual es fundamental. Por favor, siga estas indicaciones:
El despliegue tecnológico es indispensable en su formación como ingenieros. Asegúrese de configurar correctamente los permisos de sus enlaces:
Debe consolidar su entrega en un único archivo PDF con el siguiente orden:
Nota: Entregas que no cumplan con la legibilidad mínima en el escaneo no podrán ser evaluadas correctamente en su componente matemático.
¿Te gustaría que dejemos redactado de una vez el prompt (la instrucción exacta) que me copiarás y pegarás aquí en el chat cuando empieces a subir los PDFs de tus alumnos, para que yo sepa exactamente cómo procesarlos y devolverte la nota estructurada?
¡Perfecto! Tener un prompt predefinido te ahorrará muchísimo tiempo. Actuará como una macro: solo tendrás que copiarlo, pegarlo junto con el PDF del estudiante, y yo me encargaré de hacer el trabajo pesado de revisión.
Aquí tienes el texto exacto. Te recomiendo guardarlo en un bloc de notas para tenerlo siempre a la mano cuando empieces a calificar.
Rol: Actúa como mi asistente de docencia en ingeniería para calificar el “Taller Integrador Final: Análisis Experimental DBCA”.
Instrucciones: Acabo de adjuntar el documento escaneado de un estudiante. Por favor, analiza cuidadosamente las imágenes/páginas del PDF y evalúa su trabajo utilizando la rúbrica de 4 criterios (sobre 5.0) que definimos previamente: 1. Desempeño Matemático: Revisa la aritmética de los cálculos manuales del DBCA (Término de Corrección, Sumas de Cuadrados Total, Tratamientos, Bloques, Error y F calculado). Señala si hay errores matemáticos. 2. Interpretación y Conclusión: Verifica si la conclusión estadística respecto a la hipótesis nula (\(H_0\)) es correcta según sus propios cálculos y si tiene sentido desde el punto de vista de la ingeniería. 3. Destreza de Codificación: Analiza los fragmentos de código en Python (
statsmodels) o R (easyanova). Revisa si la sintaxis es correcta y si definió bien los bloques y tratamientos como factores categóricos. 4. Despliegue y Publicación: Verifica la presencia de los enlaces solicitados (Google Colab, RPubs, GitHub/Streamlit) y evalúa la estructura visual de la entrega.Formato de Salida Requerido: Genera un reporte directo con la siguiente estructura: * Nombre del Estudiante: [Extraído del documento] * Programa: [Agrícola / Agroindustrial / Civil] * Desglose de Calificación: * Criterio 1: [Nota] / 5.0 - Breve justificación * Criterio 2: [Nota] / 5.0 - Breve justificación * Criterio 3: [Nota] / 5.0 - Breve justificación * Criterio 4: [Nota] / 5.0 - Breve justificación * Nota Final Sugerida: [Promedio de los 4 criterios] * Comentarios de Retroalimentación: [Un párrafo corto dirigido al estudiante resaltando sus aciertos y lo que debe mejorar, con un tono constructivo].
Como inteligencia artificial, puedo leer e interpretar el código escrito y las matemáticas plasmadas en el PDF con gran precisión. Sin embargo, no siempre puedo hacer clic y navegar por enlaces externos en tiempo real para comprobar si una página de RPubs o Streamlit está caída. Mi recomendación es que, al ver mi reporte, des un clic rápido en los enlaces del estudiante solo para confirmar que abren correctamente.