Skip to content

Latest commit

 

History

History

cmv-infection-transplant

README.md

이식 후 거대세포바이러스(CMV) 감염 — QSP 모델

Cytomegalovirus infection and disease in transplant recipients · Quantitative Systems Pharmacology model

CMV QSP mechanistic map

파일 내용
cmv_qsp_model.dot · .svg · .png 기계론적 지도 — 171 노드 · 19 클러스터 · 219 엣지
cmv_mrgsolve_model.R 48-ODE mrgsolve 모델 + 임상 결정 규칙 R 드라이버 + 19개 시나리오
cmv_python_reference.py 동일한 48개 ODE의 Python/scipy 독립 재구현 (검증용 원본)
cmv_reference_output.txt 위 파일을 실제로 실행한 출력 — 이 README의 모든 수치의 출처
cmv_shiny_app.R 12탭 Shiny 대시보드
cmv_references.md 116편 · 19섹션 · PubMed 실시간 조회
mkrefs.py 참고문헌 생성기 (PMID를 기억으로 쓰지 않기 위한 장치)

조직 논지 — 모든 항 CMV 약이 넘어야 하는 숫자는 단 하나이고, 그것은 EC50이 아니다

전신 바이러스를 표적세포 제한(target-cell-limited) 과정으로 쓰면, virion 풀에 대한 준정상상태에서 감염세포 풀의 순 지수(net exponent) 는 다음 한 줄이 된다.

r = KPROD·(1−e_pol)·(1−e_pack) − DELI − KE8·E8eff − KENK·NKA

임상에서 실제로 측정된 두 숫자가 KPROD를 완전히 고정한다.

측정값 유도되는 상수
미치료 DNAemia 배가시간 ≈ 1.2 일 r0 = ln2/1.2 = 0.5776 /d
치료 중 감소 반감기 ≈ 2.4 일 DELI = ln2/2.4 = 0.2888 /d
KPROD = r0 + DELI = 0.8664 /d

그러면 이 질환의 모든 논쟁이 두 개의 역치와 하나의 시계로 정리된다.

역치 1 (약물) — e* = r0/KPROD = 0.667

지수의 부호가 바뀌기 위해 처방이 제거해야 하는 virion 생산 비율. 효력·내성·신기능 용량조절·약물상호작용은 모두 이 하나의 숫자에 대한 같은 질문이다. (모두 실행으로 계산된 값 — cmv_reference_output.txt §B)

처방 / 균주 e e−e* 판정
valGCV 900 mg od (예방) 0.890 +0.223 조절
valGCV 900 mg BID (치료) 0.970 +0.303 조절
valGCV 450 mg q2d (CrCl 30) 0.770 +0.104 조절
valGCV 450 mg 주2회 (CrCl 20) 0.657 −0.010 돌파
letermovir 480 mg od 0.969 +0.303 조절
letermovir 240 mg od (+CsA) 0.940 +0.274 조절
maribavir 400 mg BID 0.792 +0.125 조절
foscarnet 90 mg/kg q12h 0.719 +0.053 조절
valGCV 900 od / UL97 돌연변이 0.112 −0.555 돌파
valGCV 900 BID / UL97 돌연변이 0.335 −0.332 돌파
letermovir / UL56 C325Y 0.010 −0.656 돌파

역치 2 (면역) — E8* = r0/KE8 = 4.81 CMV 특이 CD8/µL

약이 하나도 없이 지수가 음수가 되는 CD8 수. 이것이 질병의 실제 종점이며 어떤 약도 이 값을 옮기지 못한다. 약은 E8이 여기까지 올라오는 동안 전선을 유지해 줄 뿐이다.

시계 — PCR 간격은 용량이다: 2^(Δt/1.2 d)

선제치료(pre-emptive)는 e에 전혀 작용하지 않는다. 지수를 되돌리기 시작하는 높이를 정한다.

감시간격 Δt 채혈 사이 상승배수 명목 1000 IU/mL 역치의 실제값
3.5 일 7.6배 7,551 IU/mL
7 일 57.0배 57,018 IU/mL
14 일 3,251배 3,250,997 IU/mL

실행 결과가 이 산수를 그대로 따라간다 (§G2): q3.5d / q7d / q14d 최고 DNAemia = 3.44 / 3.94 / 4.62 log10, P(질환) = 0.12 / 0.17 / 0.34. 즉 감시 빈도와 약물 효력은 같은 단위로 환산 가능한 양이고, 모델은 그 둘을 서로에 대해 값으로 매긴다.

결합항 — 두 역치가 서로 싸우는 이유

d(E8)/dt는 항원에 비례하고, 항원은 약이 방금 제거한 감염세포 풀이다. 따라서 역치 1을 넘기는 일이 역치 2에 도달하는 것을 늦춘다. 후기발현 CMV(late-onset CMV)는 별도로 붙인 장치가 아니라 이 결합항이 약을 끊을 때 하는 일 그 자체다. 실행 결과: 200일 발간시클로버 예방이 끝나는 순간 E8eff = 0.094 /µL (E8* = 4.81의 1/51), 그리고 19일 뒤 DNAemia가 다시 1000 IU/mL을 넘는다.


네 가지 구조적 결정 (각각 무엇이 유도되는지와 함께)

[1] 측정되는 혈장 DNA는 두 종류다 — 그리고 약은 서로 다른 쪽을 때린다

  • Vv = 캡시드에 포장된 virion DNA. 유일한 감염성 종이고, BETA가 곱하는 대상.
  • Vl = 죽는 감염세포에서 나오는 유리 DNA. 미치료 준정상상태에서 Vl:Vv = 2:1, 즉 PCR이 보고하는 값의 약 67%는 virion이 아니다.
  • 중합효소 억제제(GCV-TP·foscarnet·CDV-PP)는 둘 다 줄인다.
  • terminase / kinase 억제제(letermovir·maribavir)는 Vv만 줄이고, 단위길이 유전체가 concatemer에서 절단되지 않으므로 죽는 세포당 DNA를 오히려 늘린다(AMPPK).

감염세포 풀을 고정한 채 계산한 즉각적 측정 DNAemia 변화 (§E):

처방 e_pol e_pack 상대 Vmeas log10 감소
무약물 0 0 1.000 0.00
ganciclovir 900 BID 0.970 0 0.030 1.52
foscarnet 90 q12h 0.719 0 0.281 0.55
letermovir 480 od 0 0.969 1.000 0.00
maribavir 400 BID 0 0.792 1.000 0.00

AMPPK를 0→1 전 구간에서 흔들어도 letermovir의 즉각 감소는 0.17 ~ −0.12 log10을 넘지 않는다. 결론은 유도된 것이고 가정된 것이 아니다: letermovir가 완벽하게 작동해도 혈장 CMV DNA는 거의 떨어지지 않는다. 그래서 letermovir 사용 중 DNAemia는 조기 효능 지표가 될 수 없고, letermovir는 예방약이지 치료약이 아니다.

[2] 간시클로버의 활성화 단계는 바이러스 유전자 산물이다 — 그래서 한 약이 다른 약을 끈다

pUL97이 GCV를 GCV-MP로 인산화한다. maribavir는 pUL97을 억제한다. 따라서 maribavir는 ganciclovir의 효과항이 아니라 활성화항에 들어가고, 두 약은 구조적으로 길항한다. 치료용량에서 실행값:

e
ganciclovir 900 mg BID 단독 0.970
maribavir 400 mg BID 단독 0.792
두 약 병용 0.913

병용이 ganciclovir 단독보다 e에서 0.057 낮다. 둘 다 e*는 넘으므로 파국은 아니지만, 실패하는 ganciclovir 코스에 maribavir를 얹는 것은 이 산수로 정당화되지 않는다.

한편 UL97 내성은 키나아제 효율의 상실(FK_A = 0.125)로 모델링했고 중합효소 EC50 이동이 아니다. 그래서 그 돌연변이는 maribavir를 건드리지 않는다 (maribavir 내성은 T409M·H411Y·C480F 등 다른 잔기에 있다). UL97 활성화 돌연변이에서: GCV 단독 e = 0.335 (e* 미달) · MBV 단독 e = 0.792 (e* 통과).

[3] 호중구감소 고리는 신장을 통해 닫힌다

GCV 청소율의 90%가 신성이므로 CrCl 하나가 항바이러스 효과와 골수독성을 동시에 정한다. 그리고 두 가지 반대 방향의 오류가 존재한다 (§D, §G3).

CrCl 라벨 용량 GCV Cavg e(WT) ANC 정상상태 판정
100 900 od 4.88 µM 0.880 1.99 OK
60 900 od 7.63 0.947 1.49 OK
40 450 od 5.31 0.897 1.84 OK
30 450 q2d 3.30 0.770 2.27 OK (여유 +0.10)
20 450 주2회 2.49 0.657 2.49 돌파

용량을 줄이지 않았을 때 (고전적인 간시클로버 골수 재앙):

CrCl 용량 GCV Cavg e(WT) ANC 정상상태 판정
30 900 od 13.20 µM 0.982 0.97 Grade 3
20 900 od 17.44 0.989 0.72 Grade 3

시뮬레이션에서 신기능 조절을 뺀 팔(S11)은 ANC < 1.0 이 53일, ANC 최저 0.26이고, 용량이 2주 주기로 반복해서 반감/재개된다 — 실제 임상에서 보이는 그 패턴이다. 반대로 올바르게 감량한 팔(S10)은 골수는 지키지만 e* 위 여유가 +0.10으로 얇아진다.

[4] 내성은 세기가 아니라 모양이고, 그 위험은 기간이다

같은 "한 번의 돌연변이"가 두 약에서 전혀 다른 모양으로 작동한다.

배수 이동 e 변화 효과 잔존
letermovir · UL56 C325Y 3000배 0.969 → 0.010 1.1% (완전 소실)
ganciclovir · UL97 M460V 8배 0.890 → 0.112 12.6% (무력화, 그러나 0은 아님)

그런데 증량으로 만회할 여지가 있는 후자조차: UL97 돌연변이에서 e*를 넘으려면 GCV-TP 264.7 µM-eq, 즉 혈장 Cavg 20.4 µM = 허가 치료용량의 2.0배가 필요하다. 증량은 답이 아니고 약을 바꿔야 한다 — 그것이 이 표의 결론이다.

그리고 결정론적 돌연변이 플럭스는 쓰지 않았다 (아래 "실행으로 드러난 결함" 3번). 대신 선택압 창에 머문 일수를 적분한다: 야생형이 억제되어 있고(e_W > e*) 동시에 돌연변이의 자체 R_eff가 1을 넘는 상태 — 소수변이가 우세종으로 바뀌는 유일한 상태다.

팔 UL97 선택압 창 UL56 선택압 창
선제치료 q3.5d 46 일 0
선제치료 q7d 61 일 0
선제치료 q14d 83 일 0
valGCV 예방 200일 200 일 0
letermovir 예방 200일 0 202 일

예방은 선제치료보다 환자를 3~4배 오래 선택압 아래에 둔다. 감시간격만으로도 2배가 움직인다.


시나리오 (19개 팔, 이식 후 365일)

전체 표는 cmv_reference_output.txt §F. 발췌:

팔 최고 VL (log10) 첫 cs-CMVi P(질환) E8@200 ANC 최저 선택압 창 비용($k)
S1 D+/R− 무치료 (자연사) 4.83 (d38) — 0.60 4.31 3.19 0 0
S2 선제치료 q7d 3.94 d21 0.17 1.32 0.65 61 49.8
S3 선제치료 q3.5d 3.44 d18 0.12 3.21 1.07 46 21.0
S4 선제치료 q14d 4.62 d28 0.34 2.09 0.74 83 39.7
S5 valGCV 100일, 감시 없음 4.73 (d138) — 0.42 3.72 1.24 100 4.2
S6 valGCV 200일, 감시 없음 4.67 (d238) — 0.36 0.09 1.24 200 8.4
S7 valGCV 200일 + 감시 4.22 d228 0.15 0.09 0.77 245 29.3
S8 letermovir 200일 + 감시 4.06 d228 0.12 0.09 0.75 202 65.9
S10 CrCl 30, 정상 감량 4.37 d228 0.22 0.09 1.11 214 12.6
S11 CrCl 30, 감량 누락 4.10 d228 0.17 0.09 0.26 204 67.4
S12 D+/R+ 선제치료 q7d 2.97 미도달 0.06 4.83 3.19 0 8.2
S13 D−/R+ basiliximab 1.78 — 0.00 8.22 3.19 0 8.2
S15 valGCV 200일 + mTORi 전환 3.99 d228 0.10 0.09 1.05 205 15.0

주목할 두 가지. (a) S3가 S2를 모든 축에서 지배한다 — PCR을 2배로 늘리면 최고 DNAemia가 0.5 log10 낮고, 선택압 창이 15일 짧고, ANC<1.0인 날이 25일→0일이 되며, 총비용은 오히려 절반이다(치료 일수와 G-CSF가 줄기 때문). (b) letermovir는 발간시클로버와 질환율에서 대등하고(0.12 vs 0.15) 골수는 확실히 지키지만 (ANC 최저 0.75 vs 0.77 — 둘 다 치료용량 구간에서 발생) 비용이 2.2배다.


이 모델이 스스로 만든 결과 — 그리고 스스로 틀린 것

(i) 예방 기간을 늘리는 것은 사건을 막지 않고 미룬다

발간시클로버 예방기간을 0→365일로 훑으면서 예방 종료 후 감시를 하지 않은 팔 (§I):

예방 일수 ISI@중단 E8@중단 재발일 P(질환)
0 2.07 0.00 15 0.600
60 1.91 0.05 78 0.473
100 1.59 0.07 119 0.422
200 1.35 0.09 219 0.359
300 1.19 0.12 320 0.319

재발일이 중단일을 정확히 따라간다 (항상 18~20일 뒤). P(질환)이 그래도 내려가는 이유는 오직 하나 — 같은 재발이 덜 면역억제된 숙주를 만나기 때문이다 (ISI 1.91 → 1.19). 중단 시점의 E8은 0.05 → 0.12로 거의 움직이지 않는다. 약이 그것을 만들 항원을 치웠기 때문이다.

정직한 불일치 (honest miss). IMPACT 시험은 CMV 질환을 100일 36.8% vs 200일 16.1%로 보고했다. 이 모델은 42.2% vs 35.9% 를 낸다 — 방향은 맞고 크기는 관측된 효과의 약 1/3이다. 즉 이 모델에는 장기 예방을 작동시키는 무언가가 빠져 있다. 다음 절은 모델이 스스로 검사할 수 있는 가장 유력한 후보다.

(ii) 훈련용량 U-곡선 — 완전 억제가 최적이 아닐 수 있다

E8 증식이 항원 의존적이라면, 완전히 억제하는 예방은 지속적인 것을 아무것도 남기지 않고, 전혀 억제하지 않으면 질환이 생긴다. 200일 예방에서 순응도(= e에 단조 대응)를 훑으면 곡선은 단조가 아니다 (§J):

순응도 e(WT) e* 대비 E8@200 P(질환)@200일
1.00 0.890 위 0.09 0.359
0.50 0.668 위 0.10 0.347
0.45 0.620 아래 0.17 0.242
0.40 0.563 아래 0.38 0.163 ← 최소
0.35 0.497 아래 0.65 0.190
0.25 0.335 아래 1.96 0.432
0.00 0 — 4.31 0.600

최소값이 e* 아래(e = 0.563)에 있다. 기전은 결합항 하나뿐 — 부분적 억제가 부하를 질환 역치 아래로 유지하면서 E8을 훈련시킬 만큼의 항원을 남긴다.

이것을 처방 권고로 읽지 말 것. 세 가지 이유를 그대로 적어 둔다. (1) 선택압 창 컬럼이 최소값에서 2일로 붕괴하지만 그건 정의상의 인공물이고 안심할 근거가 아니다 — 선택은 야생형이 억제되어야 성립하고 e* 아래에서는 억제되지 않으므로, 부분 억제가 실제로 사는 것은 지속적인 야생형 복제, 즉 돌연변이가 생겨나는 기질이다. (2) 단일 결정론적 환자다. 실제 코호트는 이 곡선 위에 퍼지고 일부는 완전 억제보다 나쁜 상승부에 떨어진다. (3) 최소값의 위치는 KAG(CD8 증식의 항원 반포화 상수)가 정하는데, 이것이 모델에서 가장 측정이 부실한 파라미터다. 민감도:

KAG 최소 위치(순응도) 최소에서 P(질환) 순응도 1에서 P(질환)
0.02 0.40 0.054 0.307
0.05 0.40 0.163 0.359
0.12 0.40 0.326 0.420
0.30 0.40 0.524 0.526

U자 형태는 전 구간에서 살아남지만 최소값의 깊이는 살아남지 않는다 — 정성적 예측이며 정량적 예측이 아니다.

(iii) 반박된 기대 — 지우지 않고 보고한다

S16~S19는 "간시클로버 내성 돌파에서 약을 바꾸는 것이 계속하는 것보다 낫다"를 보이려고 만든 팔이다. P(CMV 질환)에서는 그렇지 않았고, 계속 쓰는 팔이 가장 낮았다 (§G4):

팔 불응 판정일 최고 VL P(질환) 돌연변이 최고치 eGFR 최저 Mg 최저
S16 → maribavir d42 4.06 0.17 1785 82.9 2.00
S17 → foscarnet d42 4.01 0.17 1785 74.6 0.69
S18 → GCV+MBV d42 4.06 0.15 1785 82.7 2.00
S19 계속 GCV d42 4.11 0.13 2487 83.3 2.00

이유는 표 안에 보인다. 불응성 CMV의 진료지침 정의가 충족되는 시점(d42)에는 이미 CD8 반응이 올라오고 있고, 이 단일 결정론적 환자에서는 약이 아니라 면역이 사건을 끝낸다. 팔을 실제로 갈라놓는 것은 전환이 겨냥한 바로 그 양이다 — 내성 균주의 최고 virion DNA가 maribavir 1785 vs 계속 GCV 2487 (1.4배) — 그리고 foscarnet 경로의 대가 (eGFR 최저 74.6 vs 82.9, 마그네슘 0.69 vs 2.00 mg/dL). 따라서 이 모델이 방어할 수 있는 주장은 원래 세우려던 것보다 좁다: 전환은 내성 균주 부하와 선택압 창을 줄이며, T세포가 어차피 회복 중인 숙주에서 질환율 이득은 입증되지 않는다.

(iv) letermovir의 tacrolimus 상호작용은 자기 이득을 일부 잡아먹는다

letermovir는 CYP3A/OATP1B1 억제로 tacrolimus AUC를 2.4배 올린다. 이를 예상해 용량을 절반으로 줄인 팔(S8)과 그대로 둔 팔(S9)의 비교 (§G5):

팔 TAC@d100 ISI@d100 P(질환) P(거부)
S8 tacrolimus 감량 5.90 1.58 0.118 0.074
S9 감량 안 함 14.13 2.15 0.127 0.066

효과는 작지만 부호가 분명하고, 임상의가 실제로 하는 거래를 그대로 보여 준다 — 면역억제가 올라가 CMV 위험이 +0.9%p 늘고 거부반응 위험이 −0.8%p 줄어든다.


실행으로 드러난 결함 8개 (검사가 아니라 적분이 찾아낸 것)

이 모델의 48개 ODE는 Python/scipy로 독립 재구현되어 실제로 적분되었다. 그 과정에서 드러나 수정된 결함을 지우지 않고 남긴다.

  1. tacrolimus 상호작용이 불리언이었다. if (letermovir 존재) 청소율 /= 2.4로 쓰면 letermovir 상태변수의 1e-12 수준 solver 반올림이 스위치를 영구히 걸어 버린다. letermovir를 한 번도 받지 않은 팔에서 tacrolimus가 9 → 32 ng/mL로 올라가 있었다. 농도 의존 Emax 항으로 교체.
  2. 내성 균주 구획의 0은 불안정 평형이었다. 균주의 지수가 양수인 동안 1e-16의 solver 반올림이 0.4~0.5/d로 자라 약 70일이면 거시적 크기가 된다. 모든 팔이 부동소수점 잡음에서 내성을 "발견"하고 있었다. 전신 감염세포 1개(=1e-8)에 소멸 하한을 넣어 수정.
  3. 결정론적 돌연변이 플럭스는 내성을 필연으로 만든다. MU·NCELL ≈ 3e3이므로 어떤 유의미한 복제도 다수의 돌연변이 계통을 만들고, 확률은 모든 팔에서 1로 포화한다 (valGCV 예방에서 관측되는 약 5%와 정면으로 어긋난다). 선택압 창 체류일수 적분으로 교체 — 팔을 실제로 구분하는 것은 확률이 아니라 기간이기 때문이다.
  4. Friberg γ = 0.17은 일과성 항암제 노출에 맞춘 값이다. 만성 투여에서는 정상상태가 ANC = CIRC0·(1−Edrug)^(1/γ)가 되어, mycophenolate 단독 환자를 ANC 0.83으로 떨어뜨리고 모든 팔에서 호중구감소 규칙을 발화시켰다. γ·EMAX·E_MPA를 만성 노출 ANC에 재적합 (valGCV 900 od + MMF → 1.99, letermovir + MMF → 3.61).
  5. GFR0이 55로 고정된 채 초기값은 CrCl/1.1이었다. 모든 실행이 86 → 55로 조용히 감소하고 그것을 CMV 신병증으로 보고하고 있었다.
  6. Sanctuary 구획이 모든 팔에서 무한히 자랐다 — 미치료 팔까지 포함해서. 청소율이 증식률을 넘는 조건이 존재하지 않았다.
  7. 감시·질환 비용이 청구되지 않았다. 그래서 PCR을 두 배로 주문하는 팔이 더 싼 것처럼 보였다.
  8. 불응성 전환이 고정 날짜에 발화했다 — 즉 내성 균주가 아무것도 하기 전에. 그래서 네 개의 구제 팔이 수치적으로 완전히 동일했다. 진료지침 기준(치료 14일 이상, 0.5 log10 미만 감소)으로 교체하자 팔이 갈라졌고, 그 결과가 위 (iii)의 반박이다.

보정 원장 (무엇을 무엇에 맞췄는가)

양 정한 방식
KPROD, DELI 배가시간 1.2일 · 치료 중 감소 반감기 2.4일 (측정값 2개)
LAMT = 2.00 한 개의 수를 미치료 원발 D+/R− 감염의 관측 최고 DNAemia(10^4.83)에 적합
KDIS = 0.0300 한 개의 수를 미치료 D+/R−의 1년 P(CMV 질환) = 0.60에 적합
GAM·EMAXMYE·EMPA 만성 노출 ANC에 재적합 (위 결함 4번)
EC50 값 전부 발표된 in-vitro EC50, 단백결합이 높은 약은 자유약물 농도로 보정
PK 파라미터 전부 발표된 집단 PK (F·V·CL·t½·신성 분율)
AMPPK = 0.50 가정값 — 사람에서 직접 측정된 바 없음. 0~1 전 구간 sweep 제시
KAG = 0.05 모델에서 가장 취약한 파라미터. 훈련용량 U-곡선 최소값 깊이를 지배
비용 예시용 정가 수준, 자릿수만 의미 있음

의도적으로 넣지 않은 것

  • UL54 중합효소 돌연변이는 지도와 교차내성 표에만 있고 별도 ODE 균주가 아니다.
  • 개인간 변이가 없다. 위의 모든 확률은 단일 결정론적 가상환자의 위험함수 값이며 시험의 발생률로 인용될 수 없다.
  • 거부반응과 eGFR은 축약형 위험함수 대리변수이고 기전적 동종면역 모델이 아니다. 호중구감소 때문에 용량을 줄이는 것이 실제로 거부반응의 동인이기 때문에 넣었을 뿐, 보정되었기 때문에 넣은 것이 아니다.
  • 입양 T세포 치료는 입력항(ACT)만 있고 투여 스케줄이 없다. 백신은 지도에만 있다.
  • 전혈 vs 혈장 환산과 검사실 간 1~2 log10 편차는 모델에 없다.
  • HSCT 특이 생착 동역학과 GVHD는 없다. HSCT에서 위험이 역전되는 것(수여자 혈청양성이 고위험군이 되는 것)은 초기 기억 T세포 풀을 통해서만 표현된다.

재현

# 기계론적 지도
dot -Tsvg cmv_qsp_model.dot -o cmv_qsp_model.svg
dot -Tpng -Gdpi=150 cmv_qsp_model.dot -o cmv_qsp_model.png

# 검증 실행 (이 README의 모든 수치의 출처)
python3 cmv_python_reference.py > cmv_reference_output.txt

# 참고문헌 재조회
python3 mkrefs.py --refresh

# mrgsolve / Shiny  (이 환경에는 R 툴체인이 없어 실행되지 않았음 — 아래 주의)
Rscript -e 'library(mrgsolve); mod <- mread("cmv_mrgsolve_model.R")'
Rscript -e 'shiny::runApp("cmv_shiny_app.R")'

주의를 명시한다. 48개 ODE는 적분되고 검증되었지만, 그것을 한 것은 cmv_python_reference.py이다. 이 환경에는 R/mrgsolve 툴체인이 없었으므로 cmv_mrgsolve_model.R과 cmv_shiny_app.R은 Python 참조 구현을 방정식 단위로 그대로 옮긴 것이지만 그 자체로 실행되지는 않았다.


면책 (Disclaimer)

이 모델은 교육 및 연구 목적의 기계론적 탐색 도구다. 임상 진료, 처방, 진단에 사용해서는 안 된다. 특히 위 (ii)의 훈련용량 U-곡선은 처방 권고가 아니며, 부분적으로 억제하는 항바이러스 요법은 실제 환자에서 내성과 질환의 위험을 높인다. 모든 확률값은 단일 가상환자의 위험함수이며 임상시험 발생률이 아니다.