DepMap — Mapa de Dependencia del Cáncer
Resumen
El proyecto Cancer Dependency Map (DepMap), dirigido por el Broad Institute, caracteriza sistemáticamente las dependencias genéticas en cientos de líneas celulares cancerosas mediante cribados CRISPR genómicos (DepMap CRISPR), ARN interferente (RNAi) y ensayos de sensibilidad a compuestos (PRISM). Los datos de DepMap son esenciales para:
- Identificar qué genes son esenciales para tipos específicos de cáncer
- Encontrar dependencias selectivas de cáncer (dianas terapéuticas)
- Validar dianas de fármacos oncológicos
- Descubrir interacciones letales sintéticas
Recursos clave:
- Portal DepMap: https://depmap.org/portal/
- Descargas de datos DepMap: https://depmap.org/portal/download/all/
- Paquete Python:
depmap(o acceso mediante API/descargas) - API: https://depmap.org/portal/api/
Cuándo usar esta habilidad
Usa DepMap cuando:
- Validación de dianas: ¿Un gen es esencial para la supervivencia en líneas celulares cancerosas con una mutación específica (ej., KRAS mutante)?
- Descubrimiento de biomarcadores: ¿Qué características genómicas predicen la sensibilidad al knockout de un gen?
- Letalidad sintética: Encuentra genes que son selectivamente esenciales cuando otro gen está mutado/eliminado
- Sensibilidad a fármacos: ¿Qué características de la línea celular predicen la respuesta a un compuesto?
- Esencialidad pancáncer: ¿Un gen es ampliamente esencial en todos los tipos de cáncer (mala diana) o selectivamente esencial?
- Análisis de correlación: ¿Qué pares de genes tienen perfiles de dependencia correlacionados (co-esencialidad)?
Conceptos clave
Puntuaciones de dependencia
| Puntuación | Rango | Significado |
|---|---|---|
| Chronos (CRISPR) | ~ -3 a 0+ | Más negativo = más esencial. Umbral de esencial común: −1. Genes pan-esenciales ~−1 a −2 |
| RNAi DEMETER2 | ~ -3 a 0+ | Escala similar a Chronos |
| Efecto genético | normalizado | Chronos normalizado; −1 = efecto mediano de los genes esenciales comunes |
Umbrales clave:
- Chronos ≤ −0.5: probablemente dependiente
- Chronos ≤ −1: fuertemente dependiente (rango de esencial común)
Anotaciones de líneas celulares
Cada línea celular tiene:
DepMap_ID: identificador único (ej.,ACH-000001)cell_line_name: nombre legibleprimary_disease: tipo de cáncerlineage: linaje tisular ampliolineage_subtype: subtipo específico
Capacidades principales
1. API de DepMap
import requests
import pandas as pd
BASE_URL = "https://depmap.org/portal/api"
def depmap_get(endpoint, params=None):
url = f"{BASE_URL}/{endpoint}"
response = requests.get(url, params=params)
response.raise_for_status()
return response.json()
2. Puntuaciones de dependencia genética
def get_gene_dependency(gene_symbol, dataset="Chronos_Combined"):
"""Obtiene las puntuaciones de dependencia CRISPR para un gen en todas las líneas celulares."""
url = f"{BASE_URL}/gene"
params = {
"gene_id": gene_symbol,
"dataset": dataset
}
response = requests.get(url, params=params)
return response.json()
# Alternativamente, usa el endpoint /data:
def get_dependencies_slice(gene_symbol, dataset_name="CRISPRGeneEffect"):
"""Obtiene una porción de dependencia de un gen a partir de un conjunto de datos."""
url = f"{BASE_URL}/data/gene_dependency"
params = {"gene_name": gene_symbol, "dataset_name": dataset_name}
response = requests.get(url, params=params)
data = response.json()
return data
3. Análisis basado en descarga (recomendado para consultas grandes)
Para análisis a gran escala, descarga los archivos de datos de DepMap y analízalos localmente:
import pandas as pd
import requests, os
def download_depmap_data(url, output_path):
"""Descarga un archivo de datos de DepMap."""
response = requests.get(url, stream=True)
with open(output_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
# Archivos de datos DepMap 24Q4 (actualiza la versión según sea necesario)
FILES = {
"crispr_gene_effect": "https://figshare.com/ndownloader/files/...",
# O descargar desde: https://depmap.org/portal/download/all/
# Archivos disponibles:
# CRISPRGeneEffect.csv - Puntuaciones de efecto genético Chronos
# OmicsExpressionProteinCodingGenesTPMLogp1.csv - Expresión de ARNm
# OmicsSomaticMutationsMatrixDamaging.csv - Matriz binaria de mutaciones
# OmicsCNGene.csv - Número de copias
# sample_info.csv - Metadatos de líneas celulares
}
def load_depmap_gene_effect(filepath="CRISPRGeneEffect.csv"):
"""
Carga la matriz de efecto genético CRISPR de DepMap.
Filas = líneas celulares (DepMap_ID), Columnas = genes (Símbolo (EntrezID))
"""
df = pd.read_csv(filepath, index_col=0)
# Renombrar columnas solo al símbolo del gen
df.columns = [col.split(" ")[0] for col in df.columns]
return df
def load_cell_line_info(filepath="sample_info.csv"):
"""Carga metadatos de líneas celulares."""
return pd.read_csv(filepath)
4. Identificación de dependencias selectivas
import numpy as np
import pandas as pd
def find_selective_dependencies(gene_effect_df, cell_line_info, target_gene,
cancer_type=None, threshold=-0.5):
"""Encuentra líneas celulares selectivamente dependientes de un gen."""
# Obtén puntuaciones para el gen objetivo
if target_gene not in gene_effect_df.columns:
return None
scores = gene_effect_df[target_gene].dropna()
dependent = scores[scores <= threshold]
# Agrega información de la línea celular
result = pd.DataFrame({
"DepMap_ID": dependent.index,
"gene_effect": dependent.values
}).merge(cell_line_info[["DepMap_ID", "cell_line_name", "primary_disease", "lineage"]])
if cancer_type:
result = result[result["primary_disease"].str.contains(cancer_type, case=False, na=False)]
return result.sort_values("gene_effect")
# Ejemplo de uso (después de cargar datos)
# df_effect = load_depmap_gene_effect("CRISPRGeneEffect.csv")
# cell_info = load_cell_line_info("sample_info.csv")
# deps = find_selective_dependencies(df_effect, cell_info, "KRAS", cancer_type="Lung")
5. Análisis de biomarcadores (Efecto genético vs. Mutación)
import pandas as pd
from scipy import stats
def biomarker_analysis(gene_effect_df, mutation_df, target_gene, biomarker_gene):
"""
Prueba si la mutación en biomarker_gene predice dependencia de target_gene.
Args:
gene_effect_df: DataFrame de efecto genético CRISPR
mutation_df: DataFrame binario de mutaciones (1 = mutado)
target_gene: Gen cuya dependencia se evalúa
biomarker_gene: Gen cuya mutación puede predecir dependencia
"""
if target_gene not in gene_effect_df.columns or biomarker_gene not in mutation_df.columns:
return None
# Alinear líneas celulares
common_lines = gene_effect_df.index.intersection(mutation_df.index)
scores = gene_effect_df.loc[common_lines, target_gene].dropna()
mutations = mutation_df.loc[scores.index, biomarker_gene]
mutated = scores[mutations == 1]
wt = scores[mutations == 0]
stat, pval = stats.mannwhitneyu(mutated, wt, alternative='less')
return {
"target_gene": target_gene,
"biomarker_gene": biomarker_gene,
"n_mutated": len(mutated),
"n_wt": len(wt),
"mean_effect_mutated": mutated.mean(),
"mean_effect_wt": wt.mean(),
"pval": pval,
"significant": pval < 0.05
}
6. Análisis de co-esencialidad
import pandas as pd
def co_essentiality(gene_effect_df, target_gene, top_n=20):
"""Encuentra genes con perfiles de dependencia más correlacionados (parejas co-esenciales)."""
if target_gene not in gene_effect_df.columns:
return None
target_scores = gene_effect_df[target_gene].dropna()
correlations = {}
for gene in gene_effect_df.columns:
if gene == target_gene:
continue
other_scores = gene_effect_df[gene].dropna()
common = target_scores.index.intersection(other_scores.index)
if len(common) < 50:
continue
r = target_scores[common].corr(other_scores[common])
if not pd.isna(r):
correlations[gene] = r
corr_series = pd.Series(correlations).sort_values(ascending=False)
return corr_series.head(top_n)
# Los genes co-esenciales a menudo comparten complejos o vías biológicas
Flujos de trabajo de consulta
Flujo de trabajo 1: Validación de dianas para un tipo de cáncer
- Descarga
CRISPRGeneEffect.csvysample_info.csv - Filtra líneas celulares por tipo de cáncer
- Calcula el efecto genético medio para el gen objetivo en el cáncer frente a todos los demás
- Calcula la selectividad: ¿qué tan específica es la dependencia a tu tipo de cáncer?
- Cruza referencias con datos de mutación, expresión o CNA como biomarcadores
Flujo de trabajo 2: Cribado de letalidad sintética
- Identifica líneas celulares con mutación/eliminación en el gen de interés (ej., BRCA1 mutante)
- Calcula las puntuaciones de efecto genético para todos los genes en líneas mutantes vs. WT
- Identifica genes significativamente más esenciales en líneas mutantes (parejas letales sintéticas)
- Filtra por selectividad y tamaño del efecto
Flujo de trabajo 3: Análisis de sensibilidad a compuestos
- Descarga los datos de sensibilidad a compuestos PRISM (
primary-screen-replicate-treatment-info.csv) - Correlaciona el AUC/log2(cambio de pliegue) del compuesto con características genómicas
- Identifica biomarcadores predictivos de sensibilidad a compuestos
Referencia de archivos de datos de DepMap
| Archivo | Descripción |
|---|---|
CRISPRGeneEffect.csv | Efecto genético CRISPR Chronos (datos de dependencia principales) |
CRISPRGeneEffectUnscaled.csv | Puntuaciones CRISPR sin escalar |
RNAi_merged.csv | Dependencia RNAi DEMETER2 |
sample_info.csv | Metadatos de líneas celulares (linaje, enfermedad, etc.) |
OmicsExpressionProteinCodingGenesTPMLogp1.csv | Expresión de ARNm |
OmicsSomaticMutationsMatrixDamaging.csv | Mutaciones somáticas dañinas (binarias) |
OmicsCNGene.csv | Número de copias por gen |
PRISM_Repurposing_Primary_Screens_Data.csv | Sensibilidad a fármacos (biblioteca de reposicionamiento) |
Descarga todos los archivos desde: https://depmap.org/portal/download/all/
Mejores prácticas
- Usa puntuaciones Chronos (no DEMETER2) para análisis CRISPR actuales — mejor controladas por eficiencia de corte
- Distingue pan-esencial de selectivo para cáncer: Los genes diana con baja varianza (esenciales en todas las líneas) son malas dianas farmacológicas
- Valida con datos de expresión: Un gen no expresado en una línea celular se puntuará como no esencial independientemente de su función real
- Usa el DepMap ID para la identificación de líneas celulares — cell_line_name puede ser ambiguo
- Considera el número de copias: Los genes amplificados pueden parecer esenciales debido al efecto del número de copias (hipótesis del ADN basura)
- Corrección de pruebas múltiples: Al calcular asociaciones de biomarcadores a nivel genómico, aplica corrección FDR
Recursos adicionales
- Portal DepMap: https://depmap.org/portal/
- Descargas de datos: https://depmap.org/portal/download/all/
- Artículo DepMap: Behan FM et al. (2019) Nature. PMID: 30971826
- Artículo Chronos: Dempster JM et al. (2021) Nature Methods. PMID: 34349281
- GitHub: https://github.com/broadinstitute/depmap-portal
- Figshare: https://figshare.com/articles/dataset/DepMap_24Q4_Public/27993966