Communitygithub.com

gangchen/epiage-skill

24 relógios epigenéticos de envelhecimento (GrimAge V1/V2, Horvath, Hannum, PhenoAge, Ying, DunedinPoAm, DNAmTL…) como uma skill instalável e offline para agentes — apenas pandas+numpy.

O que é epiage-skill?

Esta skill oferece 25 relógios de envelhecimento baseados em metilação do DNA (DNAm), calculados a partir de um arquivo de valores beta, e é completamente autossuficiente — exigindo apenas pandas e numpy, sem dependências pesadas como biolearn, torch ou scipy. Os coeficientes e referências dos relógios são fornecidos localmente (extraídos da biblioteca biolearn de código aberto, otimizados para os CpGs relevantes, totalizando ~1 MB). O script `compute_clocks.py` replica fielmente os modelos GrimAge, LinearMethylationModel e a normalização quantil do DunedinPACE, com saída verificada em relação ao biolearn (diferença <0.005, apenas arredondamento). A skill suporta leitura automática de arquivos longos (duas colunas) ou matriz (CpG + amostras), imputa CpGs ausentes usando o método methyLImp (regressão PCA) por padrão para maior precisão, e fornece métricas de cobertura e confiança por relógio. Ideal para agentes que precisam analisar dados de envelhecimento epigenético de forma offline, rápida e precisa, sem infraestrutura adicional.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add gangchen/epiage-skill

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Calculadora de Relógios Epigenéticos

Calcula relógios de envelhecimento por metilação do DNA a partir de um arquivo de valores beta. 25 relógios estão disponíveis; GrimAge é o principal.

Autossuficiente. Requer apenas pandas + numpy — sem biolearn, torch, seaborn, scipy ou network. Os coeficientes e referências dos relógios estão incluídos em data/ (extraídos da biblioteca biolearn de código aberto, reduzidos aos CpGs que os relógios usam, ~1 MB no total). scripts/compute_clocks.py reimplementa fielmente os GrimageModel, LinearMethylationModel e a normalização quantil do DunedinPACE (com um rankdata apenas em numpy), reproduzindo as saídas do biolearn para todos os 25 relógios (verificado com diferença <0,005, ou seja, apenas arredondamento).

Os relógios (execute --list-clocks para a lista completa)

famíliarelógiosunidade
GrimAge (2ª geração, mortalidade)grimagev1, grimagev2anos (precisa idade+sexo)
1ª geração cronológicahorvath, horvath2, hannum, lin, vidalbralo, weidner, garagnani, bocklandtanos
2ª geração idade biológicaphenoage, hrsinchphenoageanos
Ying 2022 (causalidade)yingcausage, yingdamage, yingadaptageanos
estocásticosstoch, stocp, stoczanos
tecido-específicospedbe (bucal pediátrico), cortical (cérebro)anos
3ª geração ritmo de envelhecimentodunedinpace, dunedinpoamanos/ano
outros marcadoresdnamtl (telômero kb), zhang (mortalidade), epitoc1 (mitótico)variável

Apelidos de grupo para --clocks: all, grimage, core (padrão), firstgen, secondgen, thirdgen.

dunedinpace precisa de ~20 mil CpGs de fundo para sua normalização quantil (não apenas seus 173 CpGs do modelo). Em uma entrada esparsa, ele auto-imputa o fundo ausente a partir da referência padrão-ouro; se sua cobertura relatada estiver bem abaixo de ~90%, o resultado é dominado pela referência e não confiável — informe isso. Uma exportação completa de EPIC/450K cobre isso bem.

Fatos importantes sobre GrimAge (para interpretá-lo corretamente)

GrimAge é de segunda geração, treinado para mortalidade: ele estima substitutos de DNAm para 7 proteínas plasmáticas + anos de tabagismo (V2 adiciona DNAm A1C e CRP), e então os combina com idade cronológica e sexo em um modelo de sobrevivência. Idade e sexo alimentam a fórmula diretamente, então ambos são obrigatórios para qualquer relógio grimage*. Os outros relógios não precisam deles, mas passar --age permite que a ferramenta informe a aceleração.

Fluxo de trabalho

1. Inspecionar o arquivo de entrada

Formatos detectados automaticamente: Longo (duas colunas: ID do CpG + beta) ou Matriz (primeira coluna ID do CpG, colunas restantes = amostras). Betas são floats em [0,1]. Observe a contagem de linhas; a cobertura dos CpGs de cada relógio é relatada por relógio.

2. Obter idade e sexo

Obrigatório para GrimAge. Se apenas uma faixa de idade for conhecida, use o ponto médio e execute --sensitivity para que o usuário veja o quanto a resposta depende da idade exata.

3. Verificar dependências (apenas pandas + numpy)

python3 -c "import pandas, numpy" 2>/dev/null && echo OK || pip install pandas numpy

Sem necessidade de venv, biolearn, torch ou network.

4. Executar

python3 <skill-dir>/scripts/compute_clocks.py \
  --input "<betas.csv>" --age <anos> --sex <m|f> \
  --clocks all                 # ou: core (padrão), grimage, firstgen, secondgen, ou chaves específicas
  # --sensitivity 40 42 47 49  # opcional, quando a idade exata é incerta
python3 <skill-dir>/scripts/compute_clocks.py --list-clocks   # ver todas as chaves

O script imputa quaisquer CpGs ausentes dos relógios a partir da referência populacional incluída (reduzida) data/sesame_450k_median.csv, executa cada modelo e imprime uma tabela com valor, aceleração (para relógios em anos) e cobertura, além de uma linha JSON para uso posterior.

5. Relatar e interpretar

Comece com GrimAge, depois a comparação. Sempre transmita estas ressalvas:

  • Reimplementação de código aberto, não a calculadora oficial. Os valores acompanham o servidor oficial de Horvath / Clock Foundation de perto, mas não são um número certificado. Para um valor citável, aponte para o Horvath DNAm Age calculator ou um provedor comercial.
  • **

Habilidades Relacionadas