Communitygithub.com

gangchen/epiage-skill

24가지 후성유전적 노화 시계(GrimAge V1/V2, Horvath, Hannum, PhenoAge, Ying, DunedinPoAm, DNAmTL 등)를 오프라인에서 설치 가능한 에이전트 스킬로 제공합니다. pandas + numpy만 필요합니다.

epiage-skill란 무엇인가요?

이 스킬은 베타 값 파일로부터 DNA 메틸화 노화 시계를 계산하는 오프라인 에이전트 스킬입니다. 25개의 시계를 지원하며, GrimAge가 대표적입니다. pandas와 numpy만 필요하므로 biolearn, torch, seaborn, scipy, network 등의 무거운 라이브러리가 필요 없어 설치와 실행이 간편합니다. 시계 계수와 참조 데이터는 `data/` 디렉토리에 포함되어 있으며 (~1MB), `scripts/compute_clocks.py` 스크립트가 biolearn의 GrimAgeModel, LinearMethylationModel, DunedinPACE 분위수 정규화를 충실히 재구현하여 25개 시계 모두에 대해 biolearn 출력과 일치하는 결과를 제공합니다 (오차 <0.005, 반올림 수준). 주요 기능으로는 자동 입력 파일 감지 (Long/Matrix 형식), GrimAge에 필요한 나이와 성별 입력, 선택적 민감도 분석, 메틸화 입력 (methyLImp)을 통한 누락 CpG 보정 등이 포함됩니다. 이 스킬은 인간 전혈 데이터 전용으로 설계되었으며, 연구 및 교육 목적으로만 사용해야 합니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add gangchen/epiage-skill

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

후성유전 시계 계산기

베타 값 파일로부터 DNA 메틸화 노화 시계를 계산합니다. 25개 시계를 사용할 수 있습니다. GrimAge가 대표적입니다.

자체 포함. pandas + numpy만 필요합니다. biolearn, torch, seaborn, scipy, network가 필요하지 않습니다. 시계 계수와 참조는 data/ 아래에 포함되어 있습니다 (오픈소스 biolearn 라이브러리에서 추출, 시계가 사용하는 CpG로 축소, ~1MB). scripts/compute_clocks.py는 biolearn의 GrimageModel, LinearMethylationModel, DunedinPACE 분위수 정규화 (numpy 전용 rankdata 사용)를 충실히 재구현하여 25개 시계 모두에 대해 biolearn 출력과 일치하는 결과를 제공합니다 (오차 <0.005, 즉 반올림 수준에서 검증됨).

시계 (실행 --list-clocks로 현재 목록 확인)

계열시계단위
GrimAge (2세대, 사망률)grimagev1, grimagev2년 (나이+성별 필요)
1세대 연대기적horvath, horvath2, hannum, lin, vidalbralo, weidner, garagnani, bocklandt년
2세대 생물학적 나이phenoage, hrsinchphenoage년
Ying 2022 (인과성)yingcausage, yingdamage, yingadaptage년
확률적stoch, stocp, stocz년
조직 특이적pedbe (소아 협점막), cortical (뇌)년
3세대 노화 속도dunedinpace, dunedinpoam년/년
기타 마커dnamtl (텔로미어 kb), zhang (사망률), epitoc1 (유사분열)다양

--clocks용 그룹 별칭: all, grimage, core (기본값), firstgen, secondgen, thirdgen.

dunedinpace는 분위수 정규화를 위해 ~20k 배경 CpG가 필요합니다 (173개 모델 CpG만이 아님). 희소 입력에서는 누락된 배경을 금본위 참조로부터 자동 대치합니다. 보고된 적용 범위가 ~90%보다 훨씬 낮으면 결과가 참조에 의해 지배되어 신뢰할 수 없습니다. 이 점을 명시하세요. 전체 EPIC/450K 내보내기로 정상적으로 적용됩니다.

GrimAge에 대한 주요 사실 (정확한 해석을 위해)

GrimAge는 2세대, 사망률 훈련 시계입니다. 7개 혈장 단백질 + 흡연갑년의 DNAm 대리 마커를 추정한 후, 이를 연대기적 나이 및 성별과 함께 생존 모델에 결합합니다. 나이와 성별이 공식에 직접 입력되므로, grimage* 시계에는 둘 다 필요합니다. 다른 시계는 필요하지 않지만, --age를 전달하면 가속도를 보고할 수 있습니다.

워크플로

1. 입력 파일 검사

자동 감지 형식: Long (두 열: CpG id + 베타) 또는 Matrix (첫 열 CpG id, 나머지 열 = 샘플). 베타는 [0,1] 범위의 실수입니다. 행 수를 확인하세요. 각 시계의 CpG 적용 범위는 시계별로 보고됩니다.

2. 나이와 성별 얻기

GrimAge에 필요합니다. 나이 범위만 알려진 경우 중간값을 사용하고 --sensitivity를 실행하여 사용자가 정확한 나이에 따라 답이 얼마나 변하는지 확인할 수 있도록 합니다.

3. 종속성 확인 (pandas + numpy만)

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

venv, biolearn, torch, 네트워크가 필요하지 않습니다.

4. 실행

python3 <skill-dir>/scripts/compute_clocks.py \
  --input "<betas.csv>" --age <years> --sex <m|f> \
  --clocks all                 # 또는: core (기본값), grimage, firstgen, secondgen, 특정 키
  # --sensitivity 40 42 47 49  # 선택사항, 정확한 나이가 불확실한 경우
python3 <skill-dir>/scripts/compute_clocks.py --list-clocks   # 모든 키 확인

스크립트는 누락된 시계 CpG를 포함된 (축소된) data/sesame_450k_median.csv 모집단 참조에서 대치하고, 각 모델을 실행한 후 값, 가속도 (년 단위 시계의 경우), 적용 범위 테이블과 다운스트림 사용을 위한 JSON 줄을 출력합니다.

5. 보고 및 해석

GrimAge를 먼저 제시한 후 비교를 보여줍니다. 항상 다음 주의 사항을 전달하세요:

  • 오픈소스 재구현, 공식 계산기가 아닙니다. 값은 Horvath 공식 서버 / Clock Foundation과 밀접하게 일치하지만 인증된 숫자는 아닙니다. 인용 가능한 값은 Horvath DNAm Age 계산기나 상업적 제공업체를 이용하세요.
  • "가속도" = 시계 − 연대기적 나이, 단순 차이입니다. 학술적 AgeAccel (동일 연령 코호트 대비 잔차)는 모집단 표본이 필요하며 한 사람에 대해 계산할 수 없습니다. 따라서 +8은 "후성유전적 예측 나이가 연대기적 나이보다 8년 높음"을 의미하며, "동료보다 8년 더 나이가 많음"이 아닙니다.
  • 세대가 다릅니다. 1세대 (Horvath/Hannum/Lin/…)는 연대기적 나이를 목표로 하며 실제 나이에 가깝게 나타나는 경향이 있습니다. 2세대 (GrimAge/PhenoAge)는 건강 결과를 목표로 하며 사망률/노화를 더 잘 예측합니다. 설계상 실제 나이와 다를 수 있습니다. GrimAge를 "N세처럼 보인다"로 해석하지 마세요. 이는 년 단위의 위험 점수입니다.
  • 년 단위가 아닌 시계 (dunedinpoam 속도, dnamtl 텔로미어 kb, zhang/stocz 사망률 위험, epitoc1 유사분열)는 나이가 아닙니다. 가속도가 표시되지 않습니다.
  • 적용 범위 / 대치: 모집단 중간값으로 채워진 소수의 누락 시계 CpG는 정상입니다. 적용 범위가 ~90% 미만으로 떨어지는 시계에 플래그를 지정하세요. 출력의 n_lowconf 열은 혈액 참조 SD > 0.08인 대치 CpG 수를 계산합니다 (신뢰할 수 없는 채움) — 적용 범위보다 더 세밀한 CpG별 신호입니다. n_lowconf 채움이 많은 시계는 "실행"되었더라도 이 샘플에서 신뢰할 수 없습니다.
  • 혈액 전용 설계. 이 스킬은 인간 전혈을 가정합니다. 시계는 혈액에 적용되며 대치 참조도 혈액입니다. 다른 조직에 사용하지 마세요.
  • 누락 CpG 대치 — 기본적으로 methyLImp. 누락된 시계 CpG (예: MSA/WeGene 내보내기에 없는 EPIC 훈련 CpG)는 methyLImp로 대치됩니다: 전혈 패널의 CpG 간 상관 구조를 사용하여 샘플의 관찰된 CpG로부터 각 누락 CpG를 예측하는 축소 랭크 (PCA) 회귀 — 평균 중간값보다 더 정확합니다 (조직이 일치할 때 RMSE가 약 30% 낮음). 패널에 없는 CpG는 혈액 중간값으로 대체됩니다. n_lowconf (혈액 SD>0.08)는 신뢰할 수 없는 채움을 표시합니다. 활성 모드는 실행 시작 시 출력됩니다.
    • 패널은 data/blood_panel.npz에 있으며 포함되어 있습니다 (~5 MB; GSE40279 = 656개 전혈 450K 샘플에서 사전 구축, 시계 CpG + 50개 혈액 PC + CpG별 중간값/SD로 축소). 따라서 methyLImp는 기본적으로 활성화됩니다. 보유 CpG 벤치마크에서 평균 중간값 대비 대치 RMSE를 약 10% 줄입니다. 재구축/사용자 정의하려면 scripts/build_blood_panel.py를 실행하세요. 파일이 없으면 도구는 전역 중간값으로 정상적으로 저하되며 이를 명시합니다.
    • 현실 확인: methyLImp는 주로 대치가 많은 시계를 개선합니다. 적용 범위가 높은 시계 (GrimAge/Horvath/PhenoAge)는 CpG를 거의 대치하지 않으므로 값이 <0.2년만 변합니다. 신뢰도 플래그가 실질적으로 더 중요한 이점입니다.
  • 의학적 조언이 아닙니다 — 연구/교육 목적으로만 사용하세요.

참고

  • Matrix 입력 → 시계당 샘플당 하나의 결과 행.
  • 의도적으로 제외됨 (더 무거운 도구 없이 충실히 재현할 수 없거나, 노화 시계가 아닌 경우):
    • PC-시계 (PCHorvath…), AltumAge, GPAge — PCA 회전 / 신경망 필요.
    • 임신 시계 (Knight, Lee, Mayne, Bohlin) — 제대혈 / 신생아용.
    • 형질 및 질병 예측 변수 (BMI, 콜레스테롤, 흡연, 알코올, 알츠하이머, CVD, …) — 이들은 노화 시계가 아닌 바이오마커 모델입니다. 사용자가 특별히 이 중 하나를 필요로 하는 경우, 전체 biolearn 설치가 필요하다고 알리세요.
  • 출처. 계수는 biolearn의 것 (MIT 라이선스)이며, 이는 발표된 시계를 재구현합니다. GrimAge에는 상업적 사용 제한 (UCLA TDG / Clock Foundation)이 있습니다 (화장품 및 생명 보험 사용).

관련 스킬