Lo siguiente estructura la aplicación paso a paso, asegurando que se entienda qué hace cada módulo, qué datos necesita, qué cálculos estadísticos se requieren y cómo organizar el código de forma profesional.

Vamos a dividir la respuesta en dos partes:

  1. Análisis conceptual de cada módulo (qué debe hacer, entradas, salidas, cálculos).
  2. Plan de desarrollo por etapas con recomendaciones de implementación en Streamlit.

1. Análisis conceptual de cada módulo

Módulo 0: Página de inicio

  • Propósito: Introducir la app, explicar los diseños disponibles y guiar al usuario.
  • Contenido: Texto descriptivo, enlaces a documentación, ejemplo de formato de datos (CSV).
  • No requiere cálculos.

Módulo 1: DCA (Diseño Completamente al Azar)

¿Qué hace? Compara k tratamientos con unidades experimentales homogéneas.
Entradas del usuario: - Opción 1: Subir archivo CSV con columnas Tratamiento (categórica) y Respuesta (numérica). - Opción 2: Ingresar manualmente número de tratamientos, réplicas (iguales o desiguales) y los datos.

Cálculos estadísticos: - ANOVA unifactorial (modelo: Respuesta ~ Tratamiento). - Prueba de comparaciones múltiples (Tukey HSD o LSD). - Estadísticos descriptivos por tratamiento (media, desviación, error estándar).

Tablas: - Resumen descriptivo por tratamiento. - Tabla ANOVA (Fuente, GL, SC, CM, F, p-valor). - Matriz de comparación de medias (grupos de Tukey).

Gráficas: - Diagrama de caja (boxplot) por tratamiento. - Gráfico de medias con barras de error (intervalo de confianza 95%).


Módulo 2: DBCA (Diseño en Bloques Completamente al Azar)

¿Qué hace? Controla una fuente de variabilidad (bloque) sin interacción con tratamientos.
Entradas: - CSV con columnas: Tratamiento, Bloque, Respuesta.

Cálculos: - ANOVA de dos vías sin interacción: Respuesta ~ Tratamiento + Bloque.

Tablas: - ANOVA con efectos de tratamiento y bloque. - Medias por tratamiento y por bloque. - Comparación de tratamientos ajustada por bloques (Tukey).

Gráficas: - Boxplot agrupado por tratamiento y bloque (opcional). - Perfil de medias por bloque (líneas).


Módulo 3: DCL (Diseño en Cuadro Latino)

¿Qué hace? Controla dos fuentes de variabilidad (filas y columnas) con un solo factor de tratamiento.
Entradas: - Tamaño k (ej. 4x4). - Datos en formato CSV con filas y columnas, más una columna de tratamiento (o matriz cuadrada). - Alternativa: subir matriz de respuestas y especificar la disposición del tratamiento.

Cálculos: - ANOVA de tres vías sin interacciones: Respuesta ~ Fila + Columna + Tratamiento.

Tablas: - ANOVA con tres efectos principales. - Medias por tratamiento.

Gráficas: - Mapa de calor de la matriz de respuestas (opcional).


Módulo 4: DPD (Diseño en Parcelas Divididas)

¿Qué hace? Evalúa dos factores (A y B) donde la aleatorización de A ocurre a nivel de parcela grande y B a nivel de subparcela.
Entradas: - CSV con columnas: ParcelaGrande (bloque o réplica para A), FactorA, FactorB, Respuesta. - Número de réplicas (bloques) y niveles de A y B.

Cálculos: - ANOVA de parcelas divididas con dos errores: - Error de parcela (para factor A). - Error de subparcela (para factor B e interacción A:B). - Usar statsmodels con estructura de error jerárquica.

Tablas: - ANOVA completo con GL, SC, CM, F y p-valores para: A, Error_A, B, A:B, Error_B.

Gráficas: - Interacción A:B (gráfico de líneas). - Boxplots separados por niveles de A.


Módulo 5: Diseños Factoriales (2^k y 3^k)

¿Qué hace? Estudia efectos principales e interacciones entre factores.
Entradas: - Número de factores (k), niveles por factor (2 o 3), réplicas. - CSV con columnas: Factor1, Factor2, …, Respuesta.

Cálculos: - ANOVA completo con efectos e interacciones hasta orden k. - Estimación de efectos (para diseño 2^k con signos). - Gráfico de Pareto de efectos estandarizados. - Prueba de falta de ajuste si hay réplicas.

Tablas: - Coeficientes, efectos, p-valores. - ANOVA.

Gráficas: - Gráfico de interacción (interaction plot). - Gráfico de efectos principales (main effects plot). - Pareto de efectos.


Módulo 6: Metodología de Superficie de Respuesta (RSM)

Este es el módulo más completo. Se trabajará con diseño experimental tipo CCD (Composite Central) o Box-Behnken, o con datos de usuario.

6.1 Modelo de primer orden

  • Entrada: Datos de diseño factorial 2^k más puntos estrella (o solo factorial) con respuesta.
  • Cálculo: Regresión lineal múltiple con interacciones: y = β0 + β1*x1 + ... + βk*xk + β12*x1*x2 + ...
  • Salida: Coeficientes, ANOVA del modelo, R², R² ajustado.

6.2 Trayectoria de máximo ascenso

  • Propósito: Encontrar dirección de mejora a partir de un punto base.
  • Cálculo: Gradiente del modelo de primer orden. La dirección es el vector de coeficientes (si se trabaja con variables codificadas). Se generan pasos en esa dirección hasta que la respuesta deje de aumentar.
  • Entrada adicional: Tamaño del paso (delta) o número de pasos.
  • Salida: Tabla con coordenadas y respuesta predicha.

6.3 Modelo de segundo orden

  • Entrada: Datos con diseño que permita estimar términos cuadráticos (CCD o Box-Behnken).
  • Cálculo: Regresión con términos lineales, interacciones y cuadráticos: y = β0 + Σβi xi + Σβii xi² + Σβij xi xj.
  • Salida: Coeficientes, ANOVA, R², R² ajustado, significancia de términos.

6.4 Punto estacionario

  • Cálculo: Derivar el modelo de segundo orden, igualar a cero y resolver sistema lineal: 2 * [βii] * x + [βi] = 0.
  • Clasificación: Calcular valores propios de la matriz Hessiana (segundas derivadas). Si todos positivos → mínimo; todos negativos → máximo; signos mixtos → punto silla.
  • Salida: Coordenadas del punto estacionario, valor predicho, clasificación.

6.5 Superficie 3D y curvas de nivel

  • Para 2 factores: Gráfico 3D interactivo (Plotly) y contorno (matplotlib/Plotly).
  • Para más de 2 factores: Seleccionar dos factores y mantener los demás fijos (por ej. en su nivel central).
  • Exportación: Botones para guardar como PNG y PDF (usando matplotlib y pdfkit o directamente plt.savefig).

2. Plan de desarrollo por etapas (enfoque modular)

Usaremos Streamlit con navegación de páginas (biblioteca st_pages o la nativa pages/). Cada módulo será una función o un script separado.

Estructura de proyecto sugerida

app.py                  # Página principal (inicio)
pages/
   1_DCA.py
   2_DBCA.py
   3_DCL.py
   4_DPD.py
   5_Factoriales.py
   6_RSM.py
utils/
   anova.py             # funciones ANOVA reutilizables
   plots.py             # gráficos comunes (boxplot, interacción)
   rsm_utils.py         # modelos de primer/segundo orden, gradiente, punto estacionario
   export.py            # exportar figuras a PNG/PDF
data/
   ejemplos/            # archivos CSV de ejemplo
requirements.txt

Etapa 0: Preparación (día 1-2)

  • Instalar Streamlit, pandas, numpy, scipy, statsmodels, matplotlib, seaborn, plotly.
  • Crear estructura de carpetas.
  • Implementar app.py con descripción y sidebar.

Etapa 1: DCA (día 3-4)

  • Implementar carga de CSV o ingreso manual.
  • Calcular ANOVA con statsmodels.formula.api.ols y anova_lm.
  • Realizar Tukey HSD con statsmodels.stats.multicomp.pairwise_tukeyhsd.
  • Mostrar tablas (usar st.dataframe con formato).
  • Graficar boxplot (seaborn) y medias con barras (matplotlib).
  • Manejar errores (datos no numéricos, falta de réplicas).

Etapa 2: DBCA (día 5)

  • Similar a DCA, pero modelo con dos factores.
  • Verificar que no haya interacción (no se modela).
  • Mostrar tablas de medias por bloque.

Etapa 3: DCL (día 6)

  • Requiere validar que los datos formen un cuadrado latino.
  • Construir variables Filas y Columnas a partir de la matriz.
  • Usar pd.melt para reordenar.

Etapa 4: DPD (día 7-8)

  • Modelo de efectos mixtos con statsmodels.formula.api.mixedlm o construir manualmente con ols y usar Error() en fórmula? Más fácil: usar ols('Respuesta ~ A + B + A:B + Error(bloco/A)') pero statsmodels no soporta Error(). Alternativa: calcular manualmente los cuadrados medios usando partición de la suma de cuadrados. Recomiendo usar pymer4 o rpy2? No, mejor implementar la lógica de parcelas divididas manualmente siguiendo las fórmulas de Montgomery. Para simplificar, puedes usar statsmodels con dos modelos separados: primero analizar totales de parcelas para A, luego residuales para B. Pero puede ser complejo. Alternativa práctica: usar pingouin que tiene mixed_anova. Instala pingouin. Hará más fácil DPD.

Etapa 5: Factoriales (día 9-10)

  • Detectar automáticamente niveles por factor.
  • Calcular efectos usando codificación (-1,1) para 2^k.
  • Gráficos de interacción con plotly para que sean dinámicos.

Etapa 6: RSM (día 11-15) - la más larga

  • Submodulo 1: ajuste de modelo de primer orden.
  • Submodulo 2: trayectoria de ascenso (mostrar tabla de pasos).
  • Submodulo 3: modelo de segundo orden (requiere que el usuario suba diseño con puntos axiales o centrales).
  • Submodulo 4: punto estacionario (resolver sistema, eigenvalores).
  • Submodulo 5: gráficos 3D y contorno con Plotly (interactivos) y opción de exportar a PNG/PDF usando plotly.io.write_image (necesita kaleido). O usar matplotlib para exportación más fiable.
  • Añadir selector de dos factores fijos.

Etapa 7: Integración, pruebas y pulido (día 16-18)

  • Validar con conjuntos de datos conocidos (ejemplos de libros como Montgomery).
  • Mejorar mensajes de error.
  • Añadir descarga de reporte (opcional: exportar resultados a HTML/PDF).

Recomendaciones técnicas clave

  • Carga de datos unificada: Ofrece siempre la opción de subir CSV y también un área de texto/editor para ingresar datos pequeños.
  • Uso de session_state: Para mantener datos entre diferentes análisis dentro de un mismo módulo.
  • Caching: Usa @st.cache_data para cargar archivos CSV y para cálculos pesados (ANOVA).
  • Estilo: Utiliza st.markdown con CSS para centrar tablas o mejorar apariencia.
  • Documentación dentro de la app: Agrega tooltips (st.help) o íconos de info en cada entrada.