Codigo - Design of Experiments: Diseño en Bloques Completos al Azar (DBCA)

Modelo con interacciones para diseno factorial.

Scripts para diseno experimental

Factorial ANOVA en Python

Modelo con interacciones para diseno factorial.

# =============================================================
# DISEÑO 2: FACTORIAL SIMPLE EN BLOQUES COMPLETOS AL AZAR (DBCA)
# Efecto del CaCl2 sobre la firmeza poscosecha del tomate de árbol
# (Solanum betaceum Cav.) — día 20
# Factor de bloqueo: temperatura de almacenamiento
# =============================================================

import numpy as np
import pandas as pd
from scipy import stats
from scipy.stats import studentized_range
from itertools import combinations
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings('ignore')

# ── 1. DATOS ──────────────────────────────────────────────────
datos = {
    'Ambiente (~22°C)': {
        'Control (0 mM)' : [28.3875,25.9746,28.9612,32.2875,25.6102],
        '570 mM CaCl2'   : [44.9103,51.8010,48.7163,44.0160,47.8617],
        '862 mM CaCl2'   : [46.4390,46.4302,49.1195,40.9295,41.6453],
    },
    '6°C': {
        'Control (0 mM)' : [37.8633,36.1512,41.1941,36.5495,34.6332],
        '570 mM CaCl2'   : [64.8695,58.4421,59.5566,53.8860,57.2313],
        '862 mM CaCl2'   : [62.1215,57.3262,63.1277,59.4176,60.5916],
    },
    '9°C': {
        'Control (0 mM)' : [32.2135,41.5387,34.4487,30.4807,37.6257],
        '570 mM CaCl2'   : [49.1608,54.5937,46.3533,48.7529,54.5481],
        '862 mM CaCl2'   : [59.0062,56.8512,55.7605,55.0558,50.5816],
    }
}

bloques = list(datos.keys())
trts    = ['Control (0 mM)','570 mM CaCl2','862 mM CaCl2']

registros = []
for bloque, trt_dict in datos.items():
    for trt, valores in trt_dict.items():
        for i, v in enumerate(valores, 1):
            registros.append({'bloque': bloque,'tratamiento': trt,'fruto': i,'firmeza': v})
df = pd.DataFrame(registros)

print('='*68)
print('DISEÑO EN BLOQUES COMPLETOS AL AZAR (DBCA) — DATOS')
print('='*68)
print(df.to_string(index=False))

print('\n' + '='*68)
print('MEDIAS POR CELDA')
print('='*68)
pivot = df.groupby(['bloque','tratamiento'])['firmeza'].mean().unstack('tratamiento')
print(pivot.round(4).to_string())

print('\n' + '='*68)
print('ESTADÍSTICAS DESCRIPTIVAS')
print('='*68)
desc = df.groupby('tratamiento')['firmeza'].agg(n='count',media='mean').round(4)
print(desc.to_string())

grand_mean = df['firmeza'].mean()
means_trt = {t: df[df.tratamiento==t]['firmeza'].mean() for t in trts}
means_blq = {b: df[df.bloque==b]['firmeza'].mean() for b in bloques}

print(f'\nGran media: {grand_mean:.4f}')

print('\nEfectos de tratamiento:')
for t in trts:
    print(f'{t}: {means_trt[t]-grand_mean:+.4f}')

print('\nEfectos de bloque:')
for b in bloques:
    print(f'{b}: {means_blq[b]-grand_mean:+.4f}')

plt.figure(figsize=(6,4))
plt.boxplot([df[df.tratamiento==t]['firmeza'] for t in trts])
plt.xticks([1,2,3], trts)
plt.ylabel('Firmeza')
plt.title('Boxplot por tratamiento')
plt.grid(True)
plt.show()

print('\nGráfica generada correctamente')
Lenguaje: PythonDescargar script

Notebooks de experimentacion

Diseño en Bloques Completos al Azar (DBCA)

EFECTO DEL CLORURO DE CALCIO (CaCl2) SOBRE LA FIRMEZA POSCOSECHA DEL TOMATE DE ÁRBOL (Solanum betaceum Cav.)

Repositorios de DOE

Repositorio factorial

Scripts, datos y reportes de factoriales.

Plantillas de factoriales

Plantillas para disenos 2^k y 3^k.

    Diseño en Bloques Completos al Azar (DBCA) - Diseno de Experimentos