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.