후성유전 시계 계산기
베타 값 파일로부터 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 설치가 필요하다고 알리세요.
- PC-시계 (
- 출처. 계수는 biolearn의 것 (MIT 라이선스)이며, 이는 발표된 시계를 재구현합니다. GrimAge에는 상업적 사용 제한 (UCLA TDG / Clock Foundation)이 있습니다 (화장품 및 생명 보험 사용).