Oct 15, 2026 · @Justo
Cada estudiante construye, en su propio repositorio de GitHub, la interfaz de la App de Diseño Experimental y el módulo DCA funcional, después de resolver el mismo DCA a mano. Es la 1.ª nota del 2.º 50 % y se trabaja en modalidad virtual, por cualquiera de dos rutas que llevan al mismo producto y se califican con la misma rúbrica.
| Campo | Detalle |
|---|---|
| Asignatura | Diseño Experimental · Ingeniería Agrícola · Universidad de Sucre · 2026-2 |
| Docente | Justo Fuentes |
| Evaluación | Actividad 1 de 3 del 2.º 50 % (Interfaz + DCA). Siguen: Actividad 2 (DBCA, DCL, DPD) y Actividad 3 (Factoriales y RSM) |
| Tipo | Individual. Cada estudiante tiene su repositorio y su variante de datos |
| Modalidad | Virtual (2 sesiones semanales de 2 h por videollamada) + trabajo autónomo en casa |
| Duración sugerida | 2 semanas: semana 1 = Fase 1 + interfaz; semana 2 = módulo DCA + verificación + entrega |
| Rutas de trabajo | Ruta A: Copilot en modo agente (VS Code local o Codespaces). Ruta B: agente de IA externo + pegado manual en Codespaces |
| Peso en la nota | Por definir por el docente: ___ % |
| Fecha de entrega | Por definir por el docente: ________ |
Entregables (un solo envío por el aula virtual):
app-diseno-experimental
en GitHub.verificacion/verificacion_dca.R en el
repositorio, con su salida pegada como comentario.BITACORA_IA.md en el repositorio, con los
prompts usados y qué se verificó.La cooperativa de un productor de Sampués quiere saber cuál de sus 4 secadores solares por convección natural (A, B, C, D) deja las rodajas de yuca con menor humedad final. Se secó un lote en cada secador en 4 ocasiones, asignando los lotes al azar: es un Diseño Completamente al Azar (DCA) con 4 tratamientos y 4 réplicas.
Analogía para el estudiante: construir la app es
como montar la planta de secado. La interfaz (app.py) es la
nave con su señalización; cada módulo (pages/) es un
secador; las funciones de utils/ son las herramientas que
todos los secadores comparten. Hoy se levanta la nave y se pone a
funcionar el primer secador: el DCA.
La actividad sigue la metodología de reserva cognitiva, en este orden obligatorio:
La IA escribe código; el estudiante responde por la estadística. Ningún resultado de la app se acepta sin compararlo con la Fase 1.
General. Construir la interfaz multipágina de la App de Diseño Experimental y su módulo DCA, verificando que el análisis automatizado coincide con el cálculo manual y con R.
Específicos. El estudiante será capaz de:
app.py, pages/, utils/,
data/) y control de versiones en GitHub.| Tipo | Competencia |
|---|---|
| Específica | Analiza experimentos agrícolas con el DCA para tomar decisiones técnicas sustentadas en evidencia estadística |
| Específica | Desarrolla herramientas de software en Python para automatizar análisis estadísticos de ingeniería |
| Genérica | Usa de forma crítica y ética la inteligencia artificial, verificando y documentando sus resultados |
| Genérica | Gestiona su trabajo con control de versiones y comunica resultados técnicos por escrito |
| RA | Resultado de aprendizaje | Evidencia |
|---|---|---|
| RA1 | Calcula correctamente a mano el ANOVA y la prueba de Tukey de un DCA y concluye sobre la hipótesis de igualdad de medias | Hoja de la Fase 1 |
| RA2 | Estructura un proyecto Streamlit multipágina y lo versiona en GitHub con commits descriptivos | Repositorio y su historial |
| RA3 | Implementa el módulo DCA con carga de datos, ANOVA, medias, gráfica, Tukey y supuestos | App corriendo y código |
| RA4 | Verifica la concordancia entre cálculo manual, app (Python) y R, y explica las diferencias | Tabla de verificación en BITACORA_IA.md y script R |
| RA5 | Documenta el uso de IA con prompts, respuestas y decisiones propias | BITACORA_IA.md y defensa oral breve |
Cada estudiante resuelve a mano el DCA de su variante: sume k = (último dígito de su código estudiantil) ÷ 10 a las cuatro observaciones del secador D. Ejemplo: código terminado en 7 → k = 0,7 → D queda 14,2; 13,7; 14,5; 14,0.
Datos base: humedad final de rodajas de yuca (% base húmeda)
| Réplica | Secador A | Secador B | Secador C | Secador D (+ k) |
|---|---|---|---|---|
| 1 | 12,4 | 14,1 | 11,8 | 13,5 |
| 2 | 13,1 | 14,8 | 12,3 | 13,0 |
| 3 | 12,8 | 13,9 | 11,5 | 13,8 |
| 4 | 13,5 | 14,6 | 12,2 | 13,3 |
Pasos (mostrar todas las operaciones):
\[FC = \frac{Y_{..}^{2}}{t\,r} \qquad SC_{Total} = \sum_{i}\sum_{j} Y_{ij}^{2} - FC \qquad SC_{Trat} = \frac{\sum_{i} Y_{i.}^{2}}{r} - FC\]
\[SC_{Error} = SC_{Total} - SC_{Trat} \qquad F = \frac{CM_{Trat}}{CM_{Error}} \qquad DMS_{Tukey} = q_{(0.05;\,t;\,gl_E)}\sqrt{\frac{CM_{Error}}{r}}\]
Pregunta de reserva cognitiva: sin hacer cuentas, ¿qué le pasa a la SC Error cuando se suma la misma constante k a todas las observaciones de un tratamiento? Comprobarlo después con la app.
La hoja se fotografía o escanea antes de pasar a la Fase 2 y se sube al aula virtual. Sus valores serán el patrón contra el que se verifica la app.
Nota final = Σ (nota del criterio × peso), en escala de 0,0 a 5,0. La ruta (A o B) no influye en la nota.
| Criterio (peso) | Excelente (4,6–5,0) | Bueno (4,0–4,5) | Aceptable (3,0–3,9) | Insuficiente (0,0–2,9) |
|---|---|---|---|---|
| C1. Fase 1: cálculo manual del DCA (25 %) — RA1 | Hipótesis, SC, tabla ANOVA, F, DMS de Tukey, letras y CV correctos para su variante; operaciones visibles; recomendación agrícola argumentada | Procedimiento completo con 1–2 errores aritméticos que no cambian la conclusión | ANOVA correcto pero sin Tukey, sin CV o sin conclusión agrícola | Errores de procedimiento, no corresponde a su variante o se entregó después de usar la IA |
| C2. Interfaz y estructura del proyecto (15 %) — RA2 | app.py con portada, propósito, módulos y advertencia
académica; menú con las 6 páginas (5 en construcción); estructura
pages/, utils/, data/,
verificacion/ completa |
Interfaz y estructura completas con detalles menores de orden o redacción | Interfaz básica; faltan páginas o carpetas | La app no abre o no tiene estructura multipágina |
| C3. Módulo DCA funcional (25 %) — RA3 | Carga CSV/Excel y ejemplo embebido; selección de columnas; ANOVA,
medias, boxplot, Tukey condicionado al p-valor, supuestos (Shapiro-Wilk,
Levene, gráficas) e interpretación; funciones en
utils/anova_utils.py con comentarios |
Todo funciona; faltan supuestos o la interpretación es pobre | ANOVA y medias funcionan; falta Tukey o carga de archivos | El módulo falla o los resultados son incorrectos |
| C4. Verificación mano ↔︎ Python ↔︎ R (15 %) — RA4 | Tabla comparativa con SC, CM, F, p y DMS de las tres fuentes; script R ejecutado con salida; explica las diferencias de redondeo | Tabla completa, sin explicar diferencias | Compara solo la F o solo dos fuentes | No hay verificación o se copió la de otro estudiante |
| C5. GitHub y bitácora de IA (10 %) — RA2, RA5 | ≥ 6 commits con mensajes descriptivos en distintos días;
.gitignore correcto; README; bitácora con prompts, qué se
aceptó, qué se corrigió y por qué |
4–5 commits; bitácora completa pero poco reflexiva | 1–3 commits o bitácora incompleta | Un solo commit con todo, o sin bitácora |
| C6. Defensa oral breve (10 %) — RA1, RA5 | En 3 min explica una función de anova_utils.py y
relaciona la SC Error con su cálculo a mano; responde la pregunta de
reserva cognitiva |
Explica el código con apoyo; respuesta parcial | Lee el código sin explicarlo | No puede explicar su propio código |
Regla de integridad: si el estudiante no puede explicar el código de su repositorio en la defensa, C3 se califica como máximo en 3,0.
| Sesión (2 h) | Qué se hace | Resultado al terminar |
|---|---|---|
| 1 | Presentación de la actividad, repaso del DCA y Fase 1 guiada | Fase 1 resuelta y subida al aula virtual |
| 2 | Preparación del repositorio + Prompts 0, 1 y 2 | Interfaz de la app corriendo y 3 commits |
| 3 | Prompts 3, 4 y 5 | Módulo DCA con Tukey y supuestos funcionando |
| 4 | Prompt 6, verificación con R, bitácora y defensas orales de 3 min | Entrega completa |
El trabajo que no se termine en la sesión se completa en casa. Los prompts son iguales en contenido para ambas rutas; solo cambia cómo llega el código al repositorio.
| Mi situación | Ruta |
|---|---|
| Inicié sesión en GitHub (con correo institucional o personal), tengo Copilot activo y trabajo en mi portátil | Ruta A — Copilot en modo agente |
| No pude validar el correo institucional, no tengo Copilot o se me agotó la cuota | Ruta B — agente externo + pegado manual |
| Mi internet es lento y el Codespace tarda mucho | Ruta A en VS Code instalado en el portátil (sin Codespace), o Ruta B con el plan liviano (abajo) |
Importante para la Ruta B: GitHub no exige el correo institucional. Una cuenta creada con Gmail u otro correo personal sirve para tener repositorio, Codespaces (cuota gratuita mensual para cuentas personales) y Copilot Free. El correo institucional solo se necesita para los beneficios de GitHub Education. Si aún no tiene cuenta, créela con su correo personal y siga la Ruta B.
app-diseno-experimental. Público. Marcar Add a
README file y en .gitignore elegir la
plantilla Python. Crear.git clone https://github.com/USUARIO/app-diseno-experimental.git,
luego cd app-diseno-experimental y code .python --version y
git --version.BITACORA_IA.md y hacer el
primer commit: git add .,
git commit -m "Inicia bitácora de IA",
git push.Consejos para internet lento en Codespaces:
.). Carga en segundos porque
no crea una máquina. No ejecuta la app: use el Codespace solo para el
paso de ejecutar y verificar.Copie este bloque en BITACORA_IA.md una vez por cada
prompt usado:
### Prompt N — (título)
- Ruta: A (Copilot agente) / B (agente externo: nombre)
- Fecha:
- Qué generó la IA (archivos):
- Qué acepté sin cambios:
- Qué corregí y por qué:
- Cómo lo verifiqué (ejecuté la app / comparé con mi Fase 1 / R):
Con 7 prompts el agente crea los archivos, instala librerías y ejecuta la app; el estudiante revisa, prueba y hace commit después de cada uno.
Ciclo para cada prompt:
Ctrl+Alt+I) y elegir el modo
Agent en el selector inferior.streamlit run app.py (en Codespaces aparece un
aviso para abrir el puerto 8501 en el navegador). Detener con
Ctrl+C.git push.
Registrar el prompt en la bitácora.Ahorro de cuota: use el modo Ask para preguntas («¿qué hace esta línea?») y reserve Agent para estos 7 prompts. Si la cuota se agota a mitad de camino, continúe con el mismo número de prompt en la Ruta B.
Copilot lee automáticamente el archivo
.github/copilot-instructions.md en cada conversación, así
no hay que repetir el contexto.
Crea el archivo .github/copilot-instructions.md con estas reglas permanentes para este repositorio:
- Proyecto: App de Diseño Experimental en Python y Streamlit, curso de Diseño Experimental, Ingeniería Agrícola, Universidad de Sucre.
- Estructura: app.py (portada), pages/ (un archivo por diseño), utils/ (funciones reutilizables, con __init__.py), data/ (CSV de ejemplo), verificacion/ (scripts de R).
- Todo el código, comentarios, docstrings y mensajes de la interfaz en español.
- Cada paso estadístico lleva un comentario que explique qué calcula y por qué, pensado para estudiantes de Ingeniería Agrícola.
- Funciones con type hints y docstrings estilo Google.
- Librerías permitidas: streamlit, pandas, numpy, scipy, statsmodels, plotly, openpyxl. No agregues otras sin pedir permiso.
- Los ANOVA se ajustan con statsmodels.formula.api.ols y statsmodels.stats.anova.anova_lm(typ=2). Tukey con statsmodels.stats.multicomp.pairwise_tukeyhsd.
- No inventes resultados: los números salen siempre del cálculo.
- Antes de terminar una tarea, ejecuta el código y corrige los errores que aparezcan.
No modifiques ningún otro archivo.
Commit: Agrega instrucciones para el agente
Prepara la estructura del proyecto en este repositorio.
1. Crea las carpetas pages/, utils/, data/ y verificacion/. Crea utils/__init__.py vacío.
2. Crea requirements.txt con: streamlit, pandas, numpy, scipy, statsmodels, plotly, openpyxl (sin versiones fijas).
3. Completa el .gitignore existente para que también excluya: .venv/, __pycache__/, .streamlit/secrets.toml, exports/.
4. Crea data/dca_secadores.csv con columnas secador,replica,humedad y estos 16 datos de humedad final de yuca (% b.h.):
A: 12.4, 13.1, 12.8, 13.5 | B: 14.1, 14.8, 13.9, 14.6 | C: 11.8, 12.3, 11.5, 12.2 | D: 13.5, 13.0, 13.8, 13.3 (réplicas 1 a 4 en ese orden).
5. Instala las librerías:
- Si la variable de entorno CODESPACES existe, instala directo con: pip install -r requirements.txt
- Si no (VS Code local en Windows), crea el entorno con python -m venv .venv, actívalo con .venv\Scripts\Activate.ps1 e instala dentro de él.
6. Verifica con: python -c "import streamlit, statsmodels; print(streamlit.__version__, statsmodels.__version__)"
Al final, muéstrame el árbol de carpetas y explica en 5 líneas para qué sirve cada carpeta.
Commit:
Crea estructura del proyecto y datos de ejemplo
Crea la interfaz de la app multipágina usando la carpeta pages/ (Streamlit muestra cada archivo como una página del menú lateral).
1. app.py (portada):
- st.set_page_config(page_title="App de Diseño Experimental", page_icon="🌱", layout="wide").
- Título, subtítulo "Ingeniería Agrícola – Universidad de Sucre" y un párrafo sobre para qué sirve el diseño experimental en el campo.
- Tabla con los 6 módulos (DCA, DBCA, DCL, DPD, Factoriales, RSM): nombre completo, cuándo se usa y un ejemplo agrícola de una línea; columna Estado: DCA = "Disponible", los demás = "En construcción".
- Instrucciones de uso en 4 pasos (elegir módulo, cargar datos, revisar resultados, verificar a mano).
- st.warning con: "Esta app apoya el aprendizaje. El estudiante interpreta los resultados, verifica supuestos y compara con su cálculo manual."
- En st.sidebar: nombre del autor (dejar AUTOR = "Escribe aquí tu nombre" como constante al inicio del archivo), curso y semestre 2026-2.
2. Crea pages/01_DCA.py con solo un título y st.info("Módulo en desarrollo") (se completará después).
3. Crea pages/02_DBCA.py, 03_DCL.py, 04_DPD.py, 05_Factoriales.py y 06_RSM.py, cada una con su título, una definición de 2 líneas del diseño y st.info("En construcción: Actividad 2") o ("En construcción: Actividad 3") para Factoriales y RSM.
4. Ejecuta streamlit run app.py --server.headless true, comprueba que no hay errores y detén la app.
No agregues cálculos estadísticos todavía.
Commit: Agrega portada y menú de módulos. Luego cambiar
la constante AUTOR por su nombre a
mano.
Crea utils/anova_utils.py con estas funciones para un DCA (un factor). Usa nombres de columna genéricos y protege los nombres en la fórmula con Q("nombre").
1. cargar_datos(archivo) -> pd.DataFrame: lee CSV (detecta separador , o ;) o Excel (.xlsx).
2. validar_dca(df, col_trat, col_resp) -> list[str]: devuelve una lista de mensajes de error en español si: faltan columnas, la respuesta no es numérica, hay datos faltantes, hay menos de 2 tratamientos o algún tratamiento tiene menos de 2 réplicas. Lista vacía si todo está bien.
3. ajustar_dca(df, col_trat, col_resp): ajusta ols("Q(resp) ~ C(Q(trat))") y devuelve el modelo.
4. tabla_anova(modelo) -> pd.DataFrame: anova_lm(typ=2) con columnas en español: Fuente, gl, SC, CM, F, p-valor; renombra las filas a "Tratamientos" y "Error" y agrega la fila "Total". Calcula CM = SC/gl.
5. resumen_tratamientos(df, col_trat, col_resp) -> pd.DataFrame: n, total, media, desviación estándar por tratamiento.
6. coeficiente_variacion(modelo, df, col_resp) -> float: CV = sqrt(CME) / media general * 100.
7. tukey(df, col_trat, col_resp, alfa=0.05) -> tuple[pd.DataFrame, float]: resultado de pairwise_tukeyhsd como DataFrame en español y la DMS = q(alfa; t; glE) * sqrt(CME / r) usando scipy.stats.studentized_range.ppf. Si el diseño no está balanceado, avisa que la DMS es aproximada.
8. interpretar_dca(tabla, alfa=0.05) -> str: texto sencillo que diga si se rechaza H0 y qué significa para la decisión.
Cada función: type hints, docstring estilo Google, comentarios paso a paso y la fórmula usada en el comentario.
Al final, prueba las funciones en la terminal con data/dca_secadores.csv e imprime la tabla ANOVA, el CV y la DMS.
Commit: Agrega funciones del ANOVA de un factor.
Comparar ya la tabla impresa con la Fase 1 (con k = 0
los valores deben coincidir con los datos base).
Reemplaza el contenido de pages/01_DCA.py por el módulo completo del DCA, usando SOLO las funciones de utils/anova_utils.py (importa con: from utils.anova_utils import ...).
1. Título y una explicación breve del DCA con el ejemplo de los 4 secadores solares.
2. st.file_uploader para CSV o Excel. Si no se carga archivo, usar data/dca_secadores.csv y avisarlo con st.caption.
3. Selectores (st.selectbox) para la columna de tratamiento y la de respuesta; st.slider para alfa (0.01 a 0.10, por defecto 0.05).
4. Mostrar validaciones con st.error y detener con st.stop() si hay errores.
5. Pestañas (st.tabs): "Datos", "ANOVA", "Comparaciones", "Gráficos".
- Datos: tabla y resumen por tratamiento.
- ANOVA: tabla ANOVA (4 decimales), F crítica, CV y la interpretación con st.success o st.info.
- Comparaciones: si p-valor < alfa, tabla de Tukey y la DMS; si no, explicar por qué no se hace Tukey.
- Gráficos: boxplot con plotly.express (respuesta por tratamiento, con los puntos) y gráfico de medias.
6. Usa @st.cache_data en la carga de datos.
7. Ejecuta la app, revisa que las 4 pestañas funcionen con el ejemplo y corrige cualquier error (en especial ModuleNotFoundError).
Commit: Implementa módulo DCA
Agrega el diagnóstico de supuestos del DCA.
1. Crea utils/diagnostico_utils.py con: residuos_y_ajustados(modelo), prueba_shapiro(residuos), prueba_levene(df, col_trat, col_resp) (scipy.stats.levene con center="median"), grafico_residuos_vs_ajustados(...) y grafico_qq(...) con plotly. Cada prueba devuelve estadístico, p-valor y una conclusión en español.
2. En pages/01_DCA.py agrega una quinta pestaña "Supuestos" con: las dos gráficas, una tabla con Shapiro-Wilk y Levene, y una explicación de qué supuesto revisa cada una (normalidad, homogeneidad de varianzas, independencia por la aleatorización).
3. Ejecuta la app y comprueba que la pestaña funciona.
Commit: Agrega diagnóstico de supuestos al DCA
Antes de este prompt, crear a mano el archivo
data/dca_mi_variante.csv con sus datos (sume k al secador
D). Escribirlo usted mismo es parte de la verificación.
1. Crea verificacion/verificacion_dca.R que lea ../data/dca_mi_variante.csv, ajuste aov(humedad ~ factor(secador)), imprima summary(), las medias por secador, el CV y TukeyHSD(). Comenta cada línea en español para estudiantes. No lo ejecutes si R no está instalado.
2. Actualiza README.md con: título, descripción, módulos y su estado, estructura de carpetas, cómo instalar y ejecutar (local y Codespaces), autor y uso de IA declarado.
No modifiques el código de la app.
Commit: Agrega verificación en R y README. La ejecución
del script R se explica en la sección de verificación final.
Un chat web gratuito (Claude, ChatGPT, Gemini o Copilot web) genera el código; el estudiante crea cada archivo en el Codespace, lo pega, lo ejecuta y actualiza GitHub con la terminal o con el panel de control de código fuente. Se usan los mismos prompts 1 a 6 de la Ruta A con un bloque adicional al final.
Trabaje toda la actividad en una misma conversación, para que el agente recuerde los archivos que ya generó. Pegue primero esto:
Vas a ser mi asistente de programación para construir una App de Diseño Experimental en Python y Streamlit (curso de Diseño Experimental, Ingeniería Agrícola, Universidad de Sucre).
Tú NO puedes ver ni ejecutar mis archivos. Yo copio tu código en GitHub Codespaces, lo ejecuto y te devuelvo los errores.
Reglas para todas tus respuestas:
1. Entrega cada archivo COMPLETO (nunca fragmentos ni "...resto igual"), en su propio bloque de código, precedido de su ruta exacta, por ejemplo: Archivo: pages/01_DCA.py
2. Si un archivo ya existe y cambia, vuelve a entregarlo completo.
3. Después de los archivos, dame los comandos de terminal exactos (Linux/bash de Codespaces) para crear carpetas, instalar y ejecutar, en orden.
4. Termina con: cómo sé que funcionó (qué debo ver) y el mensaje de commit sugerido.
Reglas del proyecto:
- Estructura: app.py (portada), pages/ (un archivo por diseño), utils/ (con __init__.py), data/, verificacion/.
- Código, comentarios y mensajes en español, con comentarios paso a paso pensados para estudiantes de Ingeniería Agrícola. Type hints y docstrings estilo Google.
- Solo estas librerías: streamlit, pandas, numpy, scipy, statsmodels, plotly, openpyxl.
- ANOVA con statsmodels.formula.api.ols y anova_lm(typ=2); Tukey con pairwise_tukeyhsd.
- No inventes resultados numéricos.
Responde solo "Listo" y espera mi primera tarea.
Para cada prompt N (de 1 a 6): copie el texto del Prompt N de la Ruta A, péguelo en el chat y agréguele al final este bloque:
IMPORTANTE: tú no puedes ejecutar nada. Donde la tarea dice "ejecuta", "instala", "prueba" o "verifica", dame los comandos para que yo los ejecute en la terminal de Codespaces y dime qué salida debo esperar. Entrega cada archivo completo con su ruta.
Ajustes puntuales:
.venv; el
agente debe darle pip install -r requirements.txt.utils/anova_utils.py con: «Este es mi
archivo utils/anova_utils.py actual:».data/dca_mi_variante.csv antes de enviar el prompt.utils/anova_utils.py (las carpetas se crean solas).Ctrl+V y guardar con
Ctrl+S.Ctrl+A para seleccionar todo,
pegar encima y guardar.Ctrl+ñ o menú Terminal
→ New Terminal) los comandos que dio el agente. Para la app:
streamlit run app.py y abrir el puerto 8501 cuando aparezca
el aviso.Opción 1 — Terminal:
# 1. Ver qué archivos cambiaron (rojo = sin preparar)
git status
# 2. Preparar todos los cambios para el commit
git add .
# 3. Guardar una versión con un mensaje que diga qué cambió
git commit -m "Implementa módulo DCA"
# 4. Subir la versión a GitHub
git push
# 5. Comprobar el historial (un commit por línea)
git log --oneline
Opción 2 — Panel de control de código fuente
(Ctrl+Shift+G):
git add .).git commit).git push).En github.dev (plan liviano) el botón es Commit & Push y hace todo en un paso.
Copie el error completo de la terminal o de la app y envíelo en el mismo chat con este prompt:
Al ejecutar [comando] obtuve este error:
[pegar el error completo]
Este es el archivo donde ocurre: [ruta]
[pegar el contenido completo del archivo]
Explícame en 3 líneas la causa, desde Python y desde la estadística si aplica, y dame el archivo corregido completo.
Error frecuente:
ModuleNotFoundError: No module named 'utils'. Casi siempre
se debe a que falta utils/__init__.py o a que la app no se
ejecutó desde la carpeta raíz del repositorio.
La app y R deben reproducir la Fase 1 con su variante. Diferencias en el tercer decimal son de redondeo; diferencias mayores indican un error que hay que encontrar.
data/dca_mi_variante.csv en el módulo
DCA.verificacion/verificacion_dca.R. Codespaces no
trae R instalado; use una de estas opciones:
dca_mi_variante.csv).Agrega salida de la verificación en R.BITACORA_IA.md esta tabla y llenarla:| Valor | Fase 1 (a mano) | App (Python) | R | ¿Coincide? |
|---|---|---|---|---|
| SC Tratamientos | | | | |
| SC Error | | | | |
| CM Error | | | | |
| F calculada | | | | |
| p-valor | (no aplica) | | | |
| DMS Tukey | | | (no aplica) | |
| CV (%) | | | | |
| Grupos de Tukey | | | | |
| Síntoma | Causa probable | Solución |
|---|---|---|
ModuleNotFoundError: No module named 'utils' |
Falta utils/__init__.py o se ejecutó desde otra
carpeta |
Crear el archivo vacío y ejecutar streamlit run app.py
desde la raíz |
streamlit: command not found |
Librerías no instaladas (o .venv sin activar en
local) |
pip install -r requirements.txt; en local, activar
.venv primero |
| La app no abre en Codespaces | El puerto no se abrió | Pestaña Ports → puerto 8501 → ícono del globo |
git push rechazado |
Hay cambios en GitHub que no tiene localmente | git pull y luego git push |
| El Codespace tarda varios minutos | Se está creando uno nuevo | Reabrir el existente desde github.com/codespaces o usar github.dev para editar |
| Se agotó la cuota de Copilot | Límite mensual del plan gratuito | Continuar en la Ruta B con el mismo número de prompt |
| La tabla ANOVA no coincide con la Fase 1 | Datos mal digitados o typ distinto en
anova_lm |
Revisar el CSV fila por fila; pedir a la IA que use
typ=2 |
Clave de respuestas. En todas las variantes SC Error = 1,9300; gl Error = 12; CM Error = 0,1608; DMS Tukey = 0,842; CV ≈ 3,0 %. Solo cambia el secador D. Es también la respuesta a la pregunta de reserva cognitiva: sumar una constante a un tratamiento no altera la variabilidad dentro de él.
| Dígito (k) | Y.. | SC Total | SC Trat | F calc. | Media D | Grupos de Tukey (α = 0,05) |
|---|---|---|---|---|---|---|
| 0 (0,0) | 210,6 | 13,8575 | 11,9275 | 24,72 | 13,40 | B a · D b · A b · C c |
| 1 (0,1) | 211,0 | 14,0775 | 12,1475 | 25,18 | 13,50 | B a · D b · A b · C c (B–D = 0,85, límite) |
| 2 (0,2) | 211,4 | 14,3575 | 12,4275 | 25,76 | 13,60 | B a · D ab · A b · C c |
| 3 (0,3) | 211,8 | 14,6975 | 12,7675 | 26,46 | 13,70 | B a · D ab · A b · C c |
| 4 (0,4) | 212,2 | 15,0975 | 13,1675 | 27,29 | 13,80 | B a · D a · A b · C c (D–A = 0,85, límite) |
| 5 (0,5) | 212,6 | 15,5575 | 13,6275 | 28,24 | 13,90 | B a · D a · A b · C c |
| 6 (0,6) | 213,0 | 16,0775 | 14,1475 | 29,32 | 14,00 | B a · D a · A b · C c |
| 7 (0,7) | 213,4 | 16,6575 | 14,7275 | 30,52 | 14,10 | B a · D a · A b · C c |
| 8 (0,8) | 213,8 | 17,2975 | 15,3675 | 31,85 | 14,20 | B a · D a · A b · C c |
| 9 (0,9) | 214,2 | 17,9975 | 16,0675 | 33,30 | 14,30 | B a · D a · A b · C c |
Medias fijas: A = 12,95; B = 14,35; C = 11,95. En todas las variantes F > 3,49 y p < 0,0001, así que se rechaza H₀. La recomendación correcta es el secador C, con la menor humedad final, distinto de todos los demás. En las variantes 1 y 4 la diferencia queda a menos de 0,01 de la DMS: acepte cualquiera de las dos agrupaciones si el procedimiento es correcto.
Sobre las rutas. La cuenta de GitHub con correo personal resuelve el bloqueo de los estudiantes sin correo institucional; solo pierden Copilot Student, no el repositorio ni Codespaces. Conviene verificar en la sesión 2 que todos tengan cuenta y repositorio creado.
Defensas orales (C6). Con 3 minutos por estudiante,
un curso de 30 requiere unos 90 minutos de la sesión 4. Pregunta
sugerida: «muéstrame en anova_utils.py dónde se calcula el
CM Error y relaciónalo con tu hoja».