Etapa 4 — Orden robusto¶
Que problema resuelve¶
El orden circular depende de que genes se usen. Si cambias ligeramente el conjunto, el orden puede cambiar. Esta etapa obtiene un orden robusto repitiendo el proceso K veces con subconjuntos aleatorios y combinando los resultados.
Como funciona¶
Seleccion aleatoria controlada: generar K subconjuntos de 2/3 de los genes TOP, verificando cobertura de cuadrantes y calidad.
CPCA + sincronizacion por repeticion: para cada subconjunto, ejecutar CPCA, sincronizar, y re-ajustar FMM/Cosinor/NP.
Calcular mediana R² por repeticion sobre genes de evaluacion.
Seleccionar el orden final mediante uno de dos metodos:
best_k: elegir la repeticion con mayor mediana R².aggregate: agregar los K ordenes en un consenso circular.
Metodo aggregate (Barragan et al. 2021)¶
Combina dos aproximaciones:
TSP (alpha3): construir una matriz de distancias asimetricas (CORAM) y resolver un problema del viajante con multiples heuristicas.
Hodge: calcular la precedencia neta entre pares usando la teoria de Hodge sobre grafos.
El mejor candidato se refina con CLM (Circular Local Minimization).
Ejemplo de uso¶
from circust.robust_order import RobustOrderEstimator
robust = RobustOrderEstimator(
n_reps=5,
method="best_k", # o "aggregate"
anchor_gene="ARNTL",
seed=42,
)
result = robust.run(
top_result=top_result,
expr_full_norm=expr_norm,
core_genes=core_genes,
)
result.sample_order # orden final
result.circular_scale # escala circular final
result.median_r2_per_rep # R² de cada repeticion
Referencia API¶
Ver circust.robust_order.