Skip to content

Latest commit

 

History

History

hereditary-spherocytosis

README.md

유전성 구상적혈구증 QSP 모델 (Hereditary Spherocytosis)

적혈구는 두 개의 숫자다. 막 면적 $S$ 와 부피 $V$. 이 모델의 전제는 그것뿐이다. 두 숫자가 최소 원통 직경 $D_c$ 를 정하고, 비장 정맥동 벽이 적혈구에 대해 측정할 수 있는 것은 $D_c$ 하나뿐이다. 이 저장소의 다른 모델들과 달리 이 모델은 정상 적혈구만 보정하고 질환은 예측한다.

산출물 파일
🗺️ 기계론적 지도 (148 노드 · 18 클러스터 · 224 엣지) hsph_qsp_model.dot · SVG · PNG
📐 기하학 커널 (닫힌 해, 자체 검증) hsph_geometry.py
⚙️ mrgsolve 모델 (72 ODE) hsph_mrgsolve_model.R
🐍 실행된 참조 구현 (모델 원본) hsph_python_reference.py
🎯 보정 대장 (calibration ledger) hsph_calibrate.py · hsph_calibration.json · calib.log
🔬 18개 분석 절 전체 실행 결과 hsph_analysis.py → hsph_reference_output.txt
📊 Shiny 대시보드 (14 탭) hsph_shiny_app.R
📚 참고문헌 (115편, PubMed 실시간 조회) hsph_references.md · mkrefs.py

1. 왜 이 질환이 기하학 문제인가

적혈구막은 면적 비압축성이다(3–4% 이상 늘어나면 터진다). 따라서 면적 $S$, 부피 $V$ 를 가진 세포를 반구로 마감된 원통으로 변형시킬 때

$$S = \pi D L,\qquad V = \frac{\pi D^2}{4}(L-D) + \frac{\pi D^3}{6} ;\Longrightarrow; V = \frac{SD}{4} - \frac{\pi D^3}{12}$$

이 3차식의 가장 작은 양의 근이 그 세포가 통과할 수 있는 가장 좁은 원통의 직경, 즉 최소 원통 직경 $D_c$ (Canham & Burton 1968) 이다. 삼각함수 해를 쓰면 닫힌 형태가 된다:

$$V_{\rm sph} = \frac{S^{3/2}}{6\sqrt{\pi}},\qquad s=\frac{V}{V_{\rm sph}},\qquad \boxed{,D_c = 2\sqrt{\frac{S}{\pi}},\cos!\left(\frac{\arccos(-s)}{3}-\frac{2\pi}{3}\right)}$$

$V_{\rm sph}$ 는 그 막이 담을 수 있는 최대 부피 — 곧 임계 용혈 부피다. 이것으로부터 적합(fitting) 없이 다음이 나온다.

유도되는 것 모델 문헌
정상 적혈구 $D_c$ 2.72 µm ($S{=}140,V{=}90$) — 2.72–3.06 µm 범위 ~2.8 µm
정상 50% 삼투 용혈 0.418 %NaCl 0.40–0.45 %NaCl
HS 50% 삼투 용혈 0.537 %NaCl ($S{=}118,V{=}86$) 0.55–0.65 %NaCl
EMA 결합 감소 막면적비 그 자체 진단 기준 16–21%

교과서에 없는 지점. Waugh(1992)는 50일 된 적혈구가 면적 10.5%, 부피 8.4%를 잃고 "구형도는 거의 변하지 않는다"고 보고했다. 같은 면적 손실을 부피 손실과 함께/없이 돌려보면 $s$ 변화가 $+0.047$ 대 $+0.105$ — 같은 막 손실이 부피가 따라 빠지지 않을 때 2.21배 더 구형화시킨다. HS 소포가 병을 만드는 이유는 개수가 아니라 적재물이다(HS 소포는 헤모글로빈이 없다).


2. 보정 대장 — 일곱 개의 숫자, 그리고 나머지 전부는 예측

단계 소비한 숫자 얻은 파라미터
1. 정상 적혈구만 (HS 관련 없음) 평균 수명 120일 · 면적 −10.5% · 부피 −8.4% (Waugh) · 정상에서 비장 기하학적 청소는 전체의 1% tau50 kv_base kd_base k_ph
2. 기준 중등증 환자 Hb 10.5 g/dL 하나 fdef_mod
3. 옵소닌 팔 (Reliene 2002) 비장절제 band 3 환자의 IgG 140분자/세포 · 미절제 시 옵소닌 청소가 파괴의 50% K_cl k_ops

적합하지 않고 구조적으로 고정한 것 (근거를 명시): kv_def = 3.33·kv_base · kd_def = 6.67·kd_base · kd_cord = 41·kd_base · a_ent_def = 1.0 · visc_k = ln2/3 = 0.231 (Chien의 세포질 점도–MCHC 기울기) · 혈관내 용혈은 부수 경로로 제한(HS 용혈은 95% 이상 혈관외).

단계 2에서 얻은 값은 fdef_mod = 0.420, 즉 스펙트린 함량 58%. 문헌의 중등증 HS 값은 약 70%이므로 이 모델은 교과서적 중등증을 만들기 위해 문헌보다 12 퍼센트포인트 큰 결손을 필요로 한다. 이 편차를 경증·중증 구간에도 동일하게 적용했으므로 나머지 세 유전자형은 적합이 아니라 예측이다.

그 한 숫자에서 따라 나오는 것 (전부 예측)

지표 모델 문헌/기준
망상적혈구 8.75 % 중등증 >6% ✓
총빌리루빈 3.30 mg/dL 중등증 >2 ✓
적혈구 수명 17.5 일 HS 10–30일 ✓
MCV 85.1 fL ✓
MCHC 35.26 g/dL 선별 기준 ≥35.4 (거의 일치)
50% 삼투 용혈 0.571 %NaCl HS 0.55–0.65 ✓
EMA 감소 20.9 % (정상 집단 평균 대비) 기준 16–21 ✓
비장 부피 385 mL HS 300–800 ✓
RDW 11.7 % 선별 기준 ≥14 ✗ (아래 한계 참조)

3. 세 가지 결과, 그리고 두 가지 실패

(1) 정상 적혈구와 HS 적혈구는 같은 장기에서 다른 이유로 죽는다

청소 경로 분해(실행 결과 §4):

기하학적(비장 삭) 옵소닌(IgG) 노화 표지 간
정상 0.010 0.000 0.763 0.147
보인자 0.373 0.000 0.252 0.349
경증 HS 0.672 0.000 0.044 0.280
중등증 HS (ANK1) 0.806 0.000 0.003 0.191
중증 HS 0.943 0.000 0.000 0.057
중등증 HS (SLC4A1) 0.599 0.266 0.001 0.134

스펙트린/안키린 유전자형에서 옵소닌 청소가 정확히 0인 것은 구조적 귀결이다: band 3가 소포에 실려 나가면 표면 밀도가 보존되어 클러스터가 생기지 않고, IgG는 대조군 수준(45분자/세포)에 머문다. 옵소닌 팔은 band 3 유전자형에서만 켜진다.

정상 적혈구는 표지되어 죽고(노화 76%), HS 적혈구는 모양 때문에 죽는다. 그리고 그 이유는 기하학에서 바로 나온다: 정상 노화는 면적과 부피를 거의 같은 비율로 잃으므로 $D_c$ 가 거의 움직이지 않는다(2.72 → 2.82 µm). 정상 적혈구는 기하학적으로 실패할 수 없다 — 그래서 분자적 표지가 필요하다.

(2) 비장절제는 빈혈을 고치고 세포는 고치지 못한다 — 그리고 검사는 더 나빠진다

중등증 HS, 절제 전 → 후: Hb 10.50 → 12.45, 망상 8.75% → 3.83%, 수명 17.5 → 31.7일, 빌리루빈 3.30 → 2.23, 빌리루빈 생성 932 → 642 mg/일. 그러나 막면적 110.7 → 108.4 µm², $D_c$ 3.316 → 3.756 µm, 50% 용혈 0.571 → 0.655 %NaCl, MCHC 35.26 → 33.77. 삼투취약성은 개선되지 않고 악화된다. 이유는 구조적이다: 용혈은 $p_{\rm slow}(D_c)\times\pi_{\rm dest}$ 라는 비장 소유 항에 달려 있고 EMA·삼투취약성은 $(S,V)$ 에 달려 있다. 절제 후 세포는 100일 이상 살면서 막을 계속 잃으므로 오히려 더 구형이 된다 — 이는 절제 후 도말에서 구상적혈구가 남는다는 관찰과 일치한다.

(3) 파르보바이러스 위기는 산수다

생산이 $D$ 일 멈추면 적혈구 질량의 $D/\text{수명}$ 이 사라진다. 그것만으로 같은 바이러스가 정상 아동에서 무해하고 HS에서 치명적인 이유가 설명된다.

기저 Hb 수명 산수 예측 $Hb\times 8/수명$ 72-ODE 모델
정상 15.10 120일 1.01 0.72
경증 HS 13.16 42일 2.51 1.37
중등증 HS 10.50 17.5일 4.81 2.01

실패 1 — 증폭기 가설은 반증되지 않고 불필요했다

모델은 "비장 삭이 구상적혈구를 잡아먹기만 하지 않고 만든다"는 아이디어로 설계되었다(면적 손실 → $D_c$ 상승 → 삭 체류 연장 → 면적 손실). 그 이득 cordamp 를 켜 보면 표현형이 매끄럽게 중증화된다 — 그런데 그것은 fdef 를 키우는 것과 모델 안에서 구별되지 않는다. 그리고 필요하지도 않았다: cordamp = 1(증폭 없음)에서 이미 §2의 표현형이 나온다. 그래서 기준 모델은 증폭기를 끈다.

이 절에서 실제 결함 하나가 드러났고 기록해 둔다. 동일한 파라미터 집합이 ODE 적분기의 최대 스텝에 따라 평균 수명 15.5일·18.6일·30.8일을 내놓았다. 원인은 cordamp 가 아니라 비장 비대였다. 비장 혈류를 비장 질량에 비례하게 쓴 탓에 위험도 → 적혈구포식 부하 → 비장 질량 → 혈류 → 위험도 라는 두 번째 고리의 이득이 1을 넘어, 비장이 상한까지 달려가고 정상상태가 유일하지 않게 되었다. 큰 비장에서는 그램당 혈류가 떨어진다 — 혈류 $\propto$ 질량$^{0.35}$(상한 1.6배)로 쓰면 이득이 1 아래로 내려가고, 모델은 max_step 4·6·8에서 동일한 답을 준다(§18).

실패 2 — 유전자형 × 비장절제: 기전은 재현되고 방향은 재현되지 않는다

Reliene 2002는 두 가지를 보고했다. ① band 3 결핍 적혈구는 세포당 최대 140개의 IgG를 지니고 스펙트린/안키린 결핍 적혈구와 대조군은 60개 이하다. ② 비장절제는 스펙트린/안키린 결핍에 더 도움이 된다. 모델에서 두 유전자형을 가르는 파라미터는 하나다 — 방출되는 소포가 band 3를 싣고 나가는가.

①은 재현된다: 스펙트린/안키린 45개(대조군 수준), band 3 151개(절제 후 161개). 기전은 회계 규칙 하나다. band 3가 소포와 함께 떠나면 band 3 표면 밀도가 면적과 함께 떨어지므로, 저친화도 자연항체가 2가 결합에 필요한 클러스터가 아예 만들어지지 않는다.

②는 재현되지 않는다. 모델은 band 3 팔이 절제로 더 이득을 본다(+3.48 대 +1.95 g/dL). 원인은 측정되지 않고 가정된 숫자 하나 — 옵소닌 청소의 비장:간 분배 72:28 — 이며, 스펙트린/안키린 팔에는 옵소닌 청소가 아예 없으므로 이 숫자는 band 3 팔에만 작용한다. 따라서 역산할 수 있다: 간이 옵소닌 청소의 97% 이상을 담당해야 Hb 이득의 순서가 뒤집히고, 수명 이득의 순서는 65%에서 뒤집힌다. 이것이 모델이 읽어낸 Reliene의 정량적 함의다 — 그들의 결과는 구상적혈구에 대한 증거가 아니라 IgG로 무겁게 덮인 적혈구의 청소가 대부분 간에서 일어난다는 증거다. 기준 모델은 28%를 그대로 두고 실패를 보고한다.

실패 3 — 빌리루빈과 길버트 증후군은 곱셈으로 합쳐지지 않는다

ugt_f = 0.287 은 자유 파라미터가 아니다. 정상 용혈 부하에서 단독 길버트 빌리루빈 2.2 mg/dL를 재현하는 UGT1A1*28 동형접합 활성이다. 그러면 중등증 HS + 길버트는 11.2 mg/dL로 예측된다 — 보고된 4–7 mg/dL의 두 배다. 모델이 두 손상을 곱셈으로 합치는 것은 접합(conjugation)이 유일한 처리 단계이기 때문이며, 데이터는 곱셈 이하로 합쳐진다고 말한다. 이는 조정 오류가 아니라 구조적 진술이다: 빌리루빈 처리에는 UGT1A1 동역학만으로는 없는 부하 유도성 성분(흡수, MRP2 배출, 대체 접합체)이 있어야 한다.


4. 발견되어 고친 결함 (모델을 실행했기 때문에 드러난 것들)

  1. 삭 내 대식세포 포식률의 자릿수 오류. k_ph 를 하루 단위 위험도로 쓴 탓에 정상인의 적혈구 수명이 0.44일이 되었다. 세포는 하루 72회 비장을 통과하므로 통과당 파괴 확률은 $\sim7\times10^{-4}$ 여야 한다.
  2. 정상 세포가 되먹임 고리에 들어가 있었다. 초기 cordamp = 42 에서 고리 이득이 1을 넘어 정상 적혈구의 막이 수개월에 걸쳐 붕괴했다.
  3. 부피 손실이 너무 느렸다. kd_base 가 작아 정상 노화 세포가 면적만 잃고 $D_c$ 가 필터 안으로 들어갔다. Waugh의 −8.4%를 명시적 보정 표적으로 만들어 고침.
  4. 옵소닌 팔에 문턱이 없었다. 배경 IgG 45분자/세포가 정상인의 74% 청소를 담당했다. Reliene의 대조군 수준(≤60)을 문턱으로 도입.
  5. 탈수가 세포를 보호했다. $S/V$ 기하학만으로는 부피를 잃으면 $D_c$ 가 내려간다 — 즉 탈수가 세포를 구한다. 임상은 정반대다. 세포질 점도항을 추가하되, 체류 시간이 아니라 추출 단계에 걸어야 했다(체류에 걸면 탈수가 막 손실을 키워 정상 세포까지 초임계가 된다).
  6. 비장 내 양이온 누출은 자기 소거적이다. 탈수를 삭에만 두면 순환 MCHC를 어떤 값으로도 올릴 수 없다. 탈수된 세포는 곧 잡아먹히는 세포이고, 혈액검사가 보는 것은 그 일이 일어나지 않은 생존자다. HS의 높은 MCHC는 누출이 구성적(막의 성질)이라는 증거다.
  7. 비장 질량–혈류 고리가 정상상태를 유일하지 않게 했다 (§3 실패 1).
  8. 다변수 최소제곱이 퇴화 해로 반복 수렴했다. kv_def → 0 에 모든 청소를 k_ph 에 실은 해, 점도 계수가 문헌값의 56배인 해 등. 각 표적이 자기 파라미터에 대해 단조이므로 1차원 이분법으로 교체.
  9. 혈관내 용혈이 탈출 밸브가 되었다. 비장이 세포를 제거하지 않으면 세포가 구형까지 가서 터졌고, 그 결과 HS 용혈의 73%가 혈관내가 되었다(실제는 <5%).
  10. release 시점의 band 3 개수가 면적 결손을 따라가지 않았다. 모든 유전자형이 이미 결손된 막에 정상 band 3 개수를 얹고 태어나 표면 밀도가 높아졌고, 대조군 수준이어야 할 스펙트린/안키린 팔이 IgG 107개/세포로 나와 유전자형 × 비장절제 예측의 방향이 뒤집혔다.
  11. 적분기가 수혈 창을 뛰어넘었다. max_step = 2일 때 0.5일 주입 창이 한 번도 평가되지 않아 수혈군이 조용히 "효과 없음"을 보고했다(Hb 4.80 → 4.81).
  12. 보고된 비장 부피가 수술을 반영하지 않았다. 전절제 후에도 절제 전 질량이 표시되었다.

5. 정직한 한계

  • R 툴체인이 환경에 없었다. hsph_mrgsolve_model.R 과 hsph_shiny_app.R 은 실행되지 않았다. 모델 원본은 실행·보정된 hsph_python_reference.py 이며, R 파일은 그것을 식 대 식으로 옮긴 것이다. 파라미터 값은 sync_r_params.py 로 Python에서 기계적으로 주입한다.
  • RDW는 크게 미달한다 (11.7% 대 선별 기준 ≥14%). 9개 연령 코호트 각각이 단일 면적·부피 값을 갖는 구조에서는 코호트 내부 변이가 없으므로 실제 집단 폭을 만들 수 없다. 구조적 한계이며 파라미터로 고칠 수 없다.
  • 순환 집단은 항상 파괴 집단보다 경증으로 보인다. EMA 결손을 순환 평균에 대해 16%로 맞추려는 초기 표적은 20일 수명과 구조적으로 양립 불가능이었다. 이는 버그가 아니라 결과다 — 그만큼 결손된 세포는 이미 필터 깊숙이 있다. 모델은 파괴 시점의 기하학(A_end)을 따로 보고한다.
  • 중증도 매핑이 한 구간 밀려 있다. 스펙트린 함량 70%에서 이 모델은 경증–중등증을 낸다. 그래서 기준 환자의 유전자형을 하나 적합했고(58%), 그 편차를 모든 구간에 동일하게 적용했다.
  • 3단계는 fdef = 0.30 에서 보정되었으나 기준 환자는 0.42다. 그 결과 band 3 팔의 예측 IgG가 표적 140을 약 15% 초과한다(151/161).
  • 신생아 절은 성인 방정식을 신생아 UGT1A1·EPO 설정점으로 돌린 것이다. 태아–성인 헤모글로빈 전환도, 신생아 혈액량 확장도 없다. 예시적이며 신생아 모델이 아니다.
  • 미타피밧의 HS 효능은 문헌에 고정되지 않았다. EC50_m 은 공개된 PK에서, Emax_atp/Emax_dpg 는 PK 결핍증 데이터에서 가져온 자리표시자다.
  • 담석·철 절은 반정량적이다. 담석 지수는 무차원 핵형성 적분이며, 미치료 중등증 HS가 30년에 50%에 이르도록 상수 하나만 맞췄다. 그 결과 정상 7.6%(40년), 6세 비장절제 29.8%(40년)는 예측이고 그럴듯하지만, HS+길버트는 92%(30년)로 보고된 약 5배 초과 위험보다 크게 과대예측한다 — §3 실패 3과 같은 뿌리다.
  • 신생아 절의 HS+길버트 조합은 물리적으로 무의미한 값을 낸다(최고 빌리루빈 82 mg/dL). 미성숙 UGT1A1과 길버트를 곱으로 겹치면 처리 용량이 붕괴하는데, 실제 신생아에는 광선치료·교환수혈·대체 배출 경로가 있다. 이 칸은 "모델의 빌리루빈 처리가 곱셈적이다"는 사실을 극단에서 보여주는 것으로만 읽어야 한다.
  • 가상 환자군(§17)은 경증으로 치우쳐 있다. 분포를 문헌의 스펙트린 함량 ($fdef \sim N(0.28,0.09)$)에서 뽑고 §2에서 찾은 12 퍼센트포인트 편차를 적용하지 않았기 때문이다. 그 결과 90%가 Hb>11로 나온다. 편차를 적용하면 중증도 분포가 오른쪽으로 옮겨간다.

5b. 감수성 — 이것은 기하학 모델이다

Hb에 대한 국소 감수성(각 파라미터 ±20%, 실행 결과 §17) 상위:

파라미터 −20% +20% 폭
A0 (방출 시 막 면적) 1.89 14.89 13.01
V0 (방출 시 부피) 13.58 2.12 11.46
D50 (필터 위치) 9.08 12.53 3.45
w_esc (체류 시간 법칙) 9.33 11.01 1.68
k_ph (삭 내 포식) 11.18 9.84 1.34
cordamp (증폭기) 10.68 10.32 0.36
tau50, k_sen, k_ops 10.50 10.50 ~0

지배하는 것은 기하학($A_0$, $V_0$)과 필터의 위치($D_{50}$)다. 정상 노화 상수(tau50, k_sen)는 중등증 HS의 Hb에 사실상 아무 영향이 없다 — 세포가 노화할 만큼 오래 살지 않기 때문이다. 증폭기(cordamp)는 거의 최하위이며, 이는 §3 실패 1의 결론과 일치한다.

수혈은 정상 기하학의 공혈 적혈구를 넣는 것이므로 헤모글로빈 보충이면서 동시에 기질 희석이다(중증 HS: Hb 3.06 → 8.73 g/dL, 2년 후 간철 3.8 → 16.8 mg/g).


6. 재현 방법

python3 hsph_geometry.py            # 기하학 커널 자체 검증
python3 hsph_calibrate.py           # 3단계 보정 → hsph_calibration.json
python3 hsph_analysis.py            # 18개 절 전체 → hsph_reference_output.txt
python3 sync_r_params.py            # Python 파라미터를 R $PARAM에 주입
python3 mkrefs.py --refresh         # PubMed에서 참고문헌 재조회
dot -Tsvg hsph_qsp_model.dot -o hsph_qsp_model.svg
dot -Tpng -Gdpi=150 hsph_qsp_model.dot -o hsph_qsp_model.png

R 쪽:

library(mrgsolve); library(dplyr)
mod <- mread("hsph_mrgsolve_model", ".")
mod %>% param(fdef = 0.42) %>% mrgsim(end = 1400, delta = 1) %>%
  plot(Hb + RETpct + MCHC + TBIL ~ time)
shiny::runApp("hsph_shiny_app.R")

7. 모델 구조 (72 ODE)

블록 상태 수 내용
적혈구 연령 코호트 9개 × 5 45 세포수 N, 그리고 N×면적, N×부피, N×헤모글로빈, N×band 3 (외연량을 상류 이송으로 정확히 보존)
적혈구 조혈 5 EPO PROG ERB RETM RETB
수혈 공혈 적혈구 1 NDON (정상 기하학 — 수혈은 기질 희석이기도 하다)
비장 3 SPLV CORD MAC
헴 대사·간담도 7 HPT FHB BILU BILC BILE STONE LDH
철 4 HEPC FERR FELIV FESPL
미타피밧 PK/PD 5 MGUT MCEN MPER ATP DPG
위기·보조인자 2 PARVO FOL

연령 격자 경계: 0 / 4 / 9 / 16 / 26 / 42 / 64 / 92 / 130 / 200 일.

주요 위험도 항:

$$h = \underbrace{f_{\rm pass},p_{\rm slow}(D_c),\bigl[1-e^{-k_{\rm ph}M\tau_c\eta}\bigr]}_{\text{기하학적, 비장 전용}}

  • \underbrace{k_{\rm ops}\bigl(w_{\rm spl}\sigma M + w_{\rm liv}\bigr)\frac{x^m}{1+x^m}}_{\text{옵소닌, 비장 72% + 간 28%}}
  • h_{\rm liv} + h_{\rm lys} + \underbrace{k_{\rm sen}(\tau/\tau_{50})^{m}}_{\text{노화 표지}}$$

여기서 $\eta = e^{0.231(\mathrm{MCHC}-33)}$ 는 세포질 점도이며 추출 단계에만 작용한다(§4의 결함 5).


⚠️ 면책

교육·연구 목적의 반정량적 QSP 모델입니다. 독립 검증되지 않았으며 임상 의사결정, 처방, 규제 제출에 사용해서는 안 됩니다.