circust.top_genes¶
circust/top_genes.py¶
Etapa 3: Determinacion de genes TOP ritmicos especificos del tejido.
Implementa la seleccion de genes TOP segun la Seccion 3 de CIRCUST:
Ajuste ORI: para cada gen, ajustar regresion isotonica circular unimodal (PAVA) y calcular R2_ORI = 1 - MSE_unimodal / MSE_plano.
Filtro ORI: descartar genes con R2_ORI < 0.5 (ritmicidad no parametrica insuficiente).
Filtro FMM: ajustar el modelo FMM a los supervivientes y seleccionar aquellos que sean (i) no puntiagudos (omega > 0.1), (ii) altamente ritmicos (R2_FMM > 0.5), (iii) picos (t_U) distribuidos en los 4 cuadrantes de [0, 2pi).
Genes semilla forzados: los 12 genes reloj centrales se incluyen siempre; si alguno no paso los filtros, se fuerza su inclusion.
Posicion en el pipeline¶
- CircularSynchronizer -> TopGeneSelector -> RandomSelector
-> RobustEstimator
- circust.top_genes.circular_median(angles)[source]¶
Mediana circular: el angulo theta que minimiza sum d(theta, theta_i) donde d es la distancia geodesica en el circulo unitario.
- Parameters:
angles (
ndarray)- Return type:
float
- circust.top_genes.assign_sectors(peaks, reference, n_sectors=8)[source]¶
Asigna cada angulo de pico a uno de n_sectors sectores equiespaciados centrados en reference.
Los sectores se numeran 1 … n_sectors.
- Parameters:
peaks (
ndarray)reference (
float)n_sectors (
int)
- Return type:
ndarray
- circust.top_genes.sector_boundaries(reference, n_sectors=8)[source]¶
Devuelve los n_sectors puntos centrales de sector.
- Parameters:
reference (
float)n_sectors (
int)
- Return type:
ndarray
- class circust.top_genes.TopGeneResult(gene_names=<factory>, fmm_peaks=<factory>, r2_par=<factory>, sector_labels=<factory>, sector_centres=<factory>, candidate_matrix=<factory>, cosinor_peaks=<factory>, circular_scale=<factory>, added_genes=<factory>, sample_order=<factory>, omega=<factory>, r2_ori=<factory>, n_total_genes=0, n_after_ori=0, n_after_fmm=0)[source]¶
Bases:
objectSalida de
TopGeneSelector.Los campos principales son compatibles por duck-typing con
ReferenceSetResult, de modo queRandomSelectorpuede consumir este resultado directamente.Atributos — pipeline¶
- gene_nameslist[str]
Simbolos de los genes TOP seleccionados.
- fmm_peaksnp.ndarray (n_top,)
Tiempos de pico FMM (t_U) por gen.
- r2_parnp.ndarray (n_top,)
R2 parametrico (FMM) por gen.
- sector_labelsnp.ndarray int (n_top,)
Cuadrante asignado (1–4) por gen.
- sector_centresnp.ndarray (n_sectors,)
Centros de los cuadrantes en [0, 2pi).
- candidate_matrixpd.DataFrame (n_top, n_muestras)
Matriz de expresion de los genes TOP (en el orden circular preliminar). Equivale a [X_TOP] del paper.
- cosinor_peaksnp.ndarray (n_top,)
Acrofases Cosinor de cada gen TOP.
- circular_scalenp.ndarray (n_muestras,)
Eje temporal circular del ordenamiento preliminar.
- added_geneslist[str]
Genes semilla que fueron forzados (no pasaron los filtros por si solos). Se excluyen del pool de muestreo aleatorio en
RandomSelector.- sample_ordernp.ndarray int (n_muestras,)
Orden de muestras del sincronizado preliminar.
Atributos — diagnostico¶
- omeganp.ndarray (n_top,)
Parametro omega de FMM por gen.
- r2_orinp.ndarray (n_top,)
R2 ORI (no parametrico) de cada gen TOP.
- n_total_genesint
Numero total de genes antes de cualquier filtro.
- n_after_oriint
Genes que superaron el filtro R2_ORI >= umbral.
- n_after_fmmint
Genes que superaron los filtros FMM (omega + R2_FMM) antes de forzar genes semilla.
- gene_names: list¶
- fmm_peaks: ndarray¶
- r2_par: ndarray¶
- sector_labels: ndarray¶
- sector_centres: ndarray¶
- candidate_matrix: DataFrame¶
- cosinor_peaks: ndarray¶
- circular_scale: ndarray¶
- added_genes: list¶
- sample_order: ndarray¶
- omega: ndarray¶
- r2_ori: ndarray¶
- n_total_genes: int = 0¶
- n_after_ori: int = 0¶
- n_after_fmm: int = 0¶
- Parameters:
gene_names (list)
fmm_peaks (ndarray)
r2_par (ndarray)
sector_labels (ndarray)
sector_centres (ndarray)
candidate_matrix (DataFrame)
cosinor_peaks (ndarray)
circular_scale (ndarray)
added_genes (list)
sample_order (ndarray)
omega (ndarray)
r2_ori (ndarray)
n_total_genes (int)
n_after_ori (int)
n_after_fmm (int)
- class circust.top_genes.TopGeneSelector(r2_ori_threshold=0.5, r2_fmm_threshold=0.5, omega_min=0.1, n_sectors=4, fmm_length_alpha_grid=48, fmm_length_omega_grid=24, fmm_num_reps=3, n_jobs=-1, verbose=True)[source]¶
Bases:
objectSelecciona los genes TOP ritmicos especificos del tejido.
Algoritmo (Seccion 3 del paper CIRCUST)¶
Ajustar ORI a cada gen y calcular R2_ORI.
Descartar genes con R2_ORI <
r2_ori_threshold(0.5).Ajustar FMM a los supervivientes.
Filtrar: omega >
omega_min(0.1) Y R2_FMM >r2_fmm_threshold(0.5).Asignar picos FMM a
n_sectorscuadrantes y verificar cobertura.Forzar inclusion de los genes core si no estan presentes.
Construir la matriz TOP ([X_TOP] en el paper).
- param r2_ori_threshold:
Umbral minimo de R2 ORI para el pre-filtro no parametrico. Paper: 0.5.
- type r2_ori_threshold:
float- param r2_fmm_threshold:
Umbral minimo de R2 FMM para la ritmicidad parametrica. Paper: 0.5.
- type r2_fmm_threshold:
float- param omega_min:
omega minimo de FMM; rechaza ajustes puntiagudos. Paper: 0.1.
- type omega_min:
float- param n_sectors:
Numero de sectores circulares para verificar cobertura de picos. Paper: 4 (cuadrantes).
- type n_sectors:
int- param fmm_length_alpha_grid:
Parametros de la rejilla de ajuste FMM.
- type fmm_length_alpha_grid:
int- param fmm_length_omega_grid:
Parametros de la rejilla de ajuste FMM.
- type fmm_length_omega_grid:
int- param fmm_num_reps:
Parametros de la rejilla de ajuste FMM.
- type fmm_num_reps:
int- param n_jobs:
Numero de procesos para el ajuste en paralelo (ORI y FMM).
-1usa todos los nucleos disponibles.- type n_jobs:
int- param verbose:
Imprimir mensajes de progreso.
- type verbose:
bool
- run(expr_norm, circular_scale, seed_genes, sample_order=None)[source]¶
Selecciona los genes TOP.
Internamente ajusta ORI (regresion isotonica circular unimodal) a cada gen para calcular R2_ORI, aplica los filtros y construye el conjunto TOP.
- Parameters:
expr_norm (
DataFrame) – Matriz de expresion normalizada completa, ya ordenada por el tiempo circular preliminar.circular_scale (
ndarray) – Eje temporal circular del ordenamiento preliminar.seed_genes (
list[str]) – Genes core del pipeline (los mismos seleccionados porCoreGeneSelector). Se fuerzan en el conjunto TOP si no superan los filtros.sample_order (
ndarray|None) – Indices de muestra del ordenamiento preliminar. Si es None se asume identidad.
- Return type:
- Parameters:
r2_ori_threshold (float)
r2_fmm_threshold (float)
omega_min (float)
n_sectors (int)
fmm_length_alpha_grid (int)
fmm_length_omega_grid (int)
fmm_num_reps (int)
n_jobs (int)
verbose (bool)