Factores y codificación¶
Motivación¶
El experimentador piensa en unidades naturales (°C, mol/L, una marca de catalizador). El álgebra del DoE —ortogonalidad, eficiencias, matrices de modelo— solo se comporta bien en unidades codificadas, donde cada factor vive en la misma escala adimensional. La codificación es el puente entre ambas, y saltársela distorsiona en silencio toda eficiencia que calcules.
Teoría¶
Para un factor continuo en el intervalo natural \([\ell, h]\), la codificación lineal estándar mapea los extremos a \(\pm 1\):
de modo que \(\ell \mapsto -1\), el punto medio \(\mapsto 0\) y \(h \mapsto +1\). Dos consecuencias importan:
- Invariancia de escala. Las eficiencias (D/A/G) dependen de la matriz de información \(M = X^\top X\). En unidades codificadas las columnas comparten escala, así que \(M\) es comparable entre factores; en unidades naturales un factor medido en centenas dominaría \(M\) solo por su magnitud.
- Interpretabilidad. Un coeficiente codificado es el cambio en la respuesta sobre la mitad del rango del factor, y el efecto clásico del DoE es \(\text{media}(+1) - \text{media}(-1) = 2\beta\).
Los factores categóricos no se codifican a \(\pm 1\); se codifican como dummies en la matriz de modelo (primer nivel como referencia).
En doekit¶
import doekit as ed
temp = ed.ContinuousFactor("temp", low=20, high=80)
temp.encode([20, 50, 80]) # -> [-1, 0, 1]
temp.decode([-1, 0, 1]) # -> [20, 50, 80]
ed.DiscreteFactor("reps", levels=[1, 2, 3]) # numérico, ajusta al decodificar
ed.CategoricalFactor("catalyst", levels=["A", "B"]) # dummy en el modelo
ed.MixtureFactor("A", lower=0, upper=1) # componente de simplex (Σ xᵢ = 1)
Los constructores que reciben rangos de factores devuelven la matriz en unidades
naturales y conservan los objetos Factor en el diseño. La capa de
evaluación / análisis recodifica a ±1 (o la codificación correspondiente) a partir
de esos factores antes de armar la matriz de modelo o cualquier métrica — las
columnas codificadas no se guardan como matriz separada en metadatos.