Skip to content

Latest commit

 

History

History
344 lines (269 loc) · 18.9 KB

README.md

File metadata and controls

344 lines (269 loc) · 18.9 KB

구강점막염 (Oral Mucositis) — QSP 모델

Chemotherapy- and Radiotherapy-Induced Oral Mucositis · Quantitative Systems Pharmacology

Oral mucositis QSP mechanistic map


하나의 발상 (The one idea)

구강점막염은 약이 "가지고 있는" 독성이 아니다. 재생 상피의 수지 결산 실패다.

구강 점막은 컨베이어 벨트다.

S  →  P1 → P2 → P3  →  D  →  탈락(shed)
│      증폭 구획        분화된
클론원성 (transit-      장벽
기저세포  amplifying)   (post-mitotic)

궤양은 정확히 D가 장벽이 연속성을 유지하는 역치 아래로 떨어져 있는 동안에만 존재한다.

그리고 모든 세포독성 부하 — 알킬화제든, 대사길항제든, 광자든 — 는 이 벨트의 증식 쪽(S, P) 을 때리고 분화된 쪽(D) 은 건드리지 않는다. 이 하나의 비대칭이 질환 전체를 만든다.

  • 부하는 장벽 수명 한 번 동안 보이지 않는다. 그러고 나서 장벽이 무너지는데, 이유는 탈락한 것을 대체할 것이 도착하지 않았기 때문이다. 잠복기는 신호전달의 수수께끼가 아니라 1/k_shed의 문제다.
  • 궤양은 벨트가 다시 채워질 때까지 지속된다.

이 모델은 그 벨트를 50개의 미분방정식으로 쓰고, 실행하고, 자기 주장이 어디서 버티고 어디서 무너지는지를 계산으로 확인한다.


무엇이 버텼고 무엇이 무너졌는가 (Results, including the refutations)

모든 숫자는 om_python_reference.py를 실제로 실행해서 나온 것이며 전문은 om_reference_output.txt에 있다.

1. 중심 주장은 절반만 살아남았다

원래 주장은 "발병 시점은 손상 항이, 지속 기간은 재생 항이 소유한다"였다. 손상 항(sens)과 재생 항(lamS)을 각각 2배 폭으로 흔들어 2×2로 검정했다.

항암방사선 70 Gy + 시스플라틴 발병 시점 변동 지속 기간 변동
손상 항 2배 변화 193.7% 139.8%
재생 항 2배 변화 74.9% 148.2%
분리비 2.59 1.06

발병 시점은 손상 항이 2.6배 더 크게 움직인다 — 주장의 앞 절반은 산다. 지속 기간은 두 항이 거의 똑같이 움직인다 — 뒤 절반은 죽는다. 되돌아보면 당연하다. 지속 기간은 깊이에서 기어 올라오는 시간이고, 깊이를 정하는 것은 손상 항이다. 방어 가능한 진술은 더 약한 쪽이다.

발병 시점은 손상 항의 것이다. 지속 기간은 공유되며, 재생 항만이 세포독성 용량을 줄이지 않고 그것을 단축할 수 있다.

이 약한 진술이 값을 하는 곳이 8절이다. 항암 용량이 이미 고정된 환자에게 줄 수 있는 약과 없는 약을 가르는 것이 바로 이 구분이다.

2. 한랭요법은 전달의 문제가 아니다 — 온도의 문제다

가이드라인이 말하는 기전은 "얼음이 국소 혈류를 줄여 약물 전달을 낮춘다"이다. 모델에 점막을 생리학적 크기의 관류제한 구획(평형 시간상수 약 2분)으로 넣고 6시간 냉각을 두 갈래로 분해했다.

6시간 냉각 점막 AUC 중증 지속 기간
냉각 없음 0.5192 6.00 일
두 갈래 모두 0.5173 0.00 일
혈류 갈래만 (Q10 = 1) 0.5173 5.90 일
온도 갈래만 (fQ = 1) 0.5192 0.00 일

혈류를 78% 줄여도 점막 AUC는 0.4% 밖에 떨어지지 않고 임상 효과는 거의 없다(6.00 → 5.90일). 2분 만에 혈장과 평형에 도달하는 조직은 혈류를 잘라서 보호할 수 없다 — 혈류는 평형의 속도를 바꿀 뿐 노출량을 바꾸지 않는다. 효과 전부를 나르는 것은 알킬화 화학과 세포주기 진행에 걸리는 Q10이다.

3. 어느 요법에 얼음이 듣는가는 유도된다

얼음은 입 안에 있는 동안에만 작용한다. 그러므로

이득 = (1 − f_cryo) × (얼음 창 안에 들어오는 손상 AUC 비율)
     = (1 − f_cryo) × (1 − 2^(−T_ice / t½))

동일한 30분 냉각을 노출 길이만 다른 세 요법에 걸었다.

요법 점막 AUC 감소 최대 궤양 면적 (냉각 / 무냉각)
5-FU 볼루스 425 mg/m² d1-5 (t½ 12분) 18.4% 0.000 / 0.164
멜팔란 200 mg/m² (t½ 1.2시간) 4.4% 0.538 / 0.677
5-FU 96시간 지속주입 0.1% 0.961 / 0.962

MASCC/ISOO가 볼루스 5-FU와 고용량 멜팔란에는 한랭요법을 권고하고 지속주입 플루오로피리미딘에는 권고하지 않는 패턴이, 반감기와 냉각 창의 겹침만으로 재현된다. 어떤 파라미터도 한랭요법 시험에 맞춰 조정하지 않았다.

4. 팔리페르민 — 예측은 방향이 맞고 크기가 작다, 그리고 부호가 뒤집혔다

2단계에서 쓴 숫자는 딱 하나, Spielberger 2004 위약군의 3/4등급 지속 기간 9일이다. 팔리페르민군은 예측이다.

위약 팔리페르민 관찰값
WHO≥3 지속 기간 9.00 일 6.50 일 9 → 3 일
최대 WHO 등급 4 3 4 → 3/4
마약성 진통제 사용일 11.11 8.81 11 → 7
발병 시점 11.10 11.40 —

방향은 맞고 발병 시점은 거의 움직이지 않는다(재생 축 약이 마땅히 그래야 하는 모양이다). 그러나 크기는 과소예측이다(−28% 대 관찰 −67%). eKGF는 구조 파라미터로 두고 팔리페르민군에 맞추지 않았기 때문이며, 맞췄다면 이것은 더 이상 예측이 아니다. 미스로 보고한다.

그리고 저자의 사전 기대가 부호까지 뒤집힌 채로 반박되었다. 지도와 모델 헤더는 모두 라벨의 24시간 분리 요구를 "KGF가 증식 풀을 키워 세포독성에 더 큰 표적을 준다"로 설명했다. 알킬화제/광자 요법에서는 구조적으로 불가능하다 — 둘 다 세포주기 특이 항을 갖지 않고 살상은 풀에 1차이므로, 풀이 커지면 죽는 절대수만 비례해서 커질 뿐 죽는 분율은 변하지 않는다. 페널티가 사라지고 나면 남는 것은 KGF 효과 풀의 2일 반감기뿐이고, 따라서 세포독성에 가까이 줄수록 단조롭게 더 좋다.

마지막 사전투여 ↔ 알킬화제 간격 −1일 0일 +1일 +3일
중증 지속 기간 3.60 일 3.80 4.50 5.70
위약 대비 −60.0% −57.8% −50.0% −36.7%

모델은 라벨의 분리 요구를 점막 동역학만으로 재현하지 못한다. 그 요구를 지지하는 근거로 읽어서는 안 된다.

페널티가 실재하는 곳은 세포주기 활성 약제다. 볼루스 5-FU에서 결합 파라미터 하나(fcyc_KGF)를 0으로 끄면 팔리페르민은 궤양을 완전히 없앤다 (지속 기간 4.7일 → 0.00일). 결합이 이득의 거의 전부를 먹는다. 그리고 5일짜리 투여 코스는 효과 풀 반감기가 2일인 성장인자와 분리할 수 없다 — 이것이 팔리페르민이 이식 전처치에는 쓰이고 통상 항암요법에는 쓰이지 않는 것에 대한 모델의 설명이다. 전처치는 임펄스라 스케줄을 짤 수 있고, 다일 코스는 아니다.

5. 분할조사: 점막의 대가와 종양의 이득이 같은 시간축에서 경쟁한다

스케줄 발병 지속 종양 BED (Gy10)
70 Gy / 35 fx / 7주 (표준) 17.5 44.0 71.5
81.6 Gy / 68 fx b.i.d. / 7주 12.9 52.4 79.3
70 Gy / 35 fx / 6주 (주 6회) 12.7 46.9 76.1
54 Gy / 36 fx t.i.d. / 12일 (CHART형) 6.7 28.0 62.1

7일 무계획 중단은 점막을 6일 회복시키고(44.0 → 38.0일, d21-28 중단) 종양 BED를 4.7 Gy10 깎는다.

6. WHO 척도는 저해상도 궤양 면적계가 아니다 — 다른 계측기다

동일한 개입(6시간 냉각)을 기저 중증도만 바꿔가며 두 척도로 측정했다.

sens 면적 기준 효과 WHO 기준 효과
0.70 −97.8% 0.0%
1.00 −97.0% −100.0%
1.30 −93.9% −100.0%
1.70 −84.9% −97.9%

이 절은 천장 효과를 찾으러 쓰였는데 찾은 것은 바닥 효과였다. 순서형 평가변수는 "중증"과 "중증 아님" 사이의 어떤 것도 표현하지 못하므로, 환자를 역치 바로 아래로 내리는 개입과 질환을 없애는 개입이 똑같이 −100%로 기록된다. 연속 평가변수는 둘을 갈라내고, 효과가 중증도에 따라 감쇠한다는 임상적으로 의미 있는 사실(−97.8% → −84.9%)을 보존한다. WHO 등급으로 검정력을 계산한 시험은 자기가 재고 있는 효과의 크기에 대해 눈이 멀어 있다.


실행이 잡아낸 결함 (Defects the calculation exposed)

이 모델은 여섯 개의 실제 결함을 드러냈고, 전부 고쳐졌으며 코드 주석에 남아 있다.

  1. 70 Gy 처방이 20 Gy만 전달되었다. 2 Gy 분할은 10분 창으로 전달되는데 적응형 적분기가 60일 구간을 받으면 그 창을 그냥 넘어가 버린다. 전달 선량이 처방이 아니라 적분기의 스텝 배치에 좌우되었다(점막 BED 24 vs 정답 84). → 모든 사건 경계를 명시적 적분 구간 경계로 만드는 breakpoints() 도입.
  2. 구간 사이에 상태가 전달되지 않았다. t_eval을 주면 sol.y[:,-1]은 구간의 끝이 아니라 마지막 요청 시점이다. 짧은 창마다 상태가 시작값에 얼어붙어 70 Gy 코스가 0 Gy를 전달했다. → 항상 구간 끝을 함께 요청.
  3. 조직이 영구 불임이 되었다. dS/dt가 S에 비례하므로 S = 0은 흡수 상태다. 발병 시점 목표를 맞추려던 첫 보정이 클론원성 풀을 절멸시켰고, 중증 점막염이 39일간 지속되며 끝내 낫지 않았다. → 빠져 있던 생물학은 정지기(label-retaining) 줄기세포 저장고였다. 추가하니 흡수 상태가 사라지고 재생 축에 두 번째 시상수(kact)가 생겼다.
  4. 보정의 중첩 방향이 틀렸다. 발병 시점으로 효력을 고정하려 했는데, 임펄스 부하에서 발병 시점은 효력에 거의 평평하다(효력 33% 변화에 6.70 → 6.45일). 지속 기간이 용량-반응 전부를 진다(5.55 → 8.60일). → 측정된 민감도가 지시하는 대로 배정을 뒤집었다. 이 실수가 3번 결함을 드러냈다.
  5. 과분할이 과분할이 아니었다. fx_per_week = 10을 하루 한 분할로 표현하면 68분할이 34일이 아니라 68일에 걸쳐 퍼진다. 전체 치료 기간이야말로 변경 분할 비교의 핵심이므로, 그 arm은 라벨과 다른 질문에 답하고 있었다(과분할 arm의 종양 BED가 표준보다 낮게 나왔다). → 진짜 b.i.d./t.i.d. 지원 추가.
  6. 집단 시뮬레이션이 조용히 0을 보고했다. 시뮬레이션 지평 인자가 스케줄 생성기로 새어 들어가 모든 워커가 TypeError로 죽었고, 발생률이 예외가 아니라 0.000으로 보고되었다. → 인자를 먼저 꺼내고, 실패를 세어 보고.

추가로 개념적 오류 하나: 1단계는 결정론적 환자를 중증 점막염 지속 기간 38일에 맞췄는데, 그 숫자는 중증 점막염이 실제로 생긴 환자에게만 정의된다. 따라서 1단계 환자는 중앙값 등록 환자가 아니라 중앙값 이환 환자이고, 그 환자를 중심으로 놓은 집단의 발생률은 34–43%가 아니라 100%에 가깝다. → 집단에 위치 파라미터(sens_med = 0.628)를 두고 방사선 단독 발생률에 맞췄다.


구조 검정 (Structural checks — all pass)

검정 결과
TNF → NF-κB 양성 되먹임 루프 이득 0.067 – 0.292, 모두 < 1 (발산 없음)
처방 선량 전달의 정확성 70 Gy/35 fx → 점막 BED 84.0000 (이론값 84.0000)
적분기 수렴 (rtol 1e-7 vs 1e-9) 최대 궤양 면적 차이 4.0e-06
무약물 정상상태가 진짜 끌개인가 60일 장벽 표류 1.3e-06, 궤양 면적 6.1e-06

무엇을 얼마에 샀는가 (What was fitted)

여덟 개의 발표된 숫자를 여덟 개의 파라미터에 썼다. 정확히 결정된 적합이므로 1절의 일치는 증거가 아니라 산수다. 증거는 2절 이후다.

단계 파라미터 쓴 숫자 값
1 greg HDM 중증 발병 6.5일 5.849
1 pot_mel HDM 중증 지속 6.0일 23.22
1 rad_pot 항암방사선 발병 19.0일 0.5051
1 lamS 항암방사선 지속 38.0일 0.06047
2 cy_equiv Spielberger 위약군 지속 9일 50.14 mg/m²
3 sens_med Trotti 방사선 단독 발생률 34% 0.6283
3 pot_cis Trotti 항암방사선 발생률 43% 15.63
4 pot_5fu 볼루스 5-FU 궤양성 구내염 5일 1.839

적합이 닫히지 않는 곳도 그대로 보고한다: HDM 발병 시점은 목표 6.5일에 대해 모델 7.50일이다. 나머지 세 개는 6.00 / 18.90 / 38.20으로 목표에 든다.

pot_mtx는 어떤 것에도 구속되지 않는다. 메토트렉세이트는 완결성을 위해 (동종이식 GVHD 예방) 실려 있지만 17개 시나리오 중 어디에도 등장하지 않으므로 그 효력은 자리표시자이며, 그렇게 표시해 두었다.

pot_cis의 식별성 주의: 발생률이 좁은 구간에서 0.33 → 1.00으로 오르므로 이 파라미터는 그 띠 안으로만 고정된다. 시스플라틴 기여의 크기에 의존하는 주장은 그만큼 약하다.


파일 (Files)

파일 내용
om_qsp_model.dot 기계론적 지도 소스 — 165 노드 · 18 클러스터 · 237 엣지
om_qsp_model.svg / .png 렌더링 (dot -Tsvg / dot -Tpng -Gdpi=150)
om_python_reference.py 실행되는 참조 구현 — 50 ODE, 구간별 적분기
om_calibrate.py 4단계 보정 (중첩 이분법 + 병렬 가상 집단)
om_analysis.py 12개 절의 실험 — 위의 모든 숫자를 생산
om_reference_output.txt 그 실행 결과 전문
calib.log 보정 로그 (실패한 시도 포함)
om_calibration.json 적합된 8개 값 — R/Python 양쪽이 여기서 읽는다
om_mrgsolve_model.R mrgsolve 모델 — 50 ODE, 17 시나리오
om_mrgsolve_template.R · mkmrgsolve.py 생성 템플릿과 생성기 (R/Python 파라미터 드리프트 방지)
om_shiny_app.R Shiny 대시보드 — 15개 탭
om_references.md 115편, 전부 PubMed에서 실시간 해석
mkrefs.py 그 문헌 목록의 생성기

실행

python3 om_calibrate.py 120     # 보정 (수십 분)
python3 om_analysis.py          # 12개 절 전부 → om_reference_output.txt
python3 mkmrgsolve.py           # om_mrgsolve_model.R 생성
python3 mkrefs.py               # 문헌 목록 재해석 (네트워크 필요)
dot -Tsvg om_qsp_model.dot -o om_qsp_model.svg
dot -Tpng -Gdpi=150 om_qsp_model.dot -o om_qsp_model.png
library(mrgsolve); library(dplyr)
mod <- mread("om_mrgsolve_model.R")
out <- mod %>% data_set(scen_hdm_cryo(6)) %>% mrgsim(end = 45, delta = 0.05)
plot(out, ULC + WHO + VAS + ANC ~ time)
shiny::runApp("om_shiny_app.R")

17개 시나리오 (Scenarios)

# 시나리오 발병 지속 최대 면적 통증 AUC
1 HDM 200 mg/m², 예방 없음 7.50 6.00 0.677 50.9
2 HDM 140 mg/m² (감량) — 0.00 0.163 24.5
3 HDM 200 + 한랭요법 30분 7.90 4.40 0.538 43.6
4 HDM 200 + 한랭요법 6시간 — 0.00 0.020 4.4
5 HDM 200 + 팔리페르민 (분리) 8.90 1.80 0.385 36.3
6 HDM 200 + 팔리페르민 (동시) — 0.00 0.295 30.2
7 HDM 200 + 광생체조절 (매일) — 0.00 0.090 10.8
8 HDM 200 + 글루타민 — 0.00 0.323 28.6
9 HDM 200 + 한랭 + 팔리페르민 — 0.00 0.017 2.1
10 TBI-VP16-Cy 전처치 (위약) 11.10 9.00 0.836 59.5
11 TBI-VP16-Cy + 팔리페르민 11.40 6.50 0.675 46.3
12 두경부 70 Gy/35 fx + 시스플라틴 17.50 44.00 0.996 267.2
13 두경부 70 Gy/35 fx, 방사선 단독 18.90 38.10 0.987 226.7
14 두경부 과분할 81.6 Gy/68 fx b.i.d. 12.90 52.40 0.997 303.6
15 두경부 항암방사선 + 벤지다민 19.20 38.90 0.992 235.7
16 5-FU 볼루스 425 mg/m² d1-5 — 0.00 0.164 23.8
17 5-FU 96시간 지속주입 4000 mg/m² 5.80 13.40 0.962 83.3

("—" = 중증(WHO≥3) 점막염에 도달하지 않음. 2·4·6·7·8·9·16번의 0.00은 계측기의 바닥 효과이며 100% 예방이라는 주장이 아니다. 6절과 8절 참조.)


한계 (Limitations)

  • R 툴체인이 없는 환경에서 작성되었다. om_mrgsolve_model.R과 om_shiny_app.R은 실행된 Python 참조 구현을 방정식 단위로 반영하지만 그 자체로는 실행되지 않았다. 첫 mread()를 구문 검사로 취급할 것.
  • 팔리페르민 효과 크기는 과소예측된다(−28% 대 관찰 −67%). eKGF를 팔리페르민군에 맞추면 사라지지만, 그러면 예측이 아니게 된다.
  • 결정론적 환자가 WHO≥3 역치 바로 위에 앉아 있어서(최대 면적 0.68, 역치 0.35) 순서형 평가변수에서 바닥 효과가 만연하다. 발생률형 주장은 표가 아니라 가상 집단에서 해야 한다.
  • 한랭요법의 온도 갈래는 Q10 = 2.5, ΔT = 13 °C를 구조적으로 가정한다. 어떤 한랭요법 시험에도 맞추지 않았으므로 3절의 패턴은 예측이지만, 효과의 절대 크기는 이 두 수에 직접 비례한다.
  • 점막 미생물총, 통증, 골수억제 축은 각각 최소 구조로만 들어 있다. om_references.md의 해당 절이 그 단순화의 대가를 가늠할 근거를 준다.
  • 방사선의 세포주기 의존성은 LQ 형식 안에 넣지 않았다(살상이 풀에 1차). 이것이 4절에서 알킬화제/광자 요법에 표적확대 페널티가 없다는 결론의 구조적 전제다.

면책 (Disclaimer)

교육 및 연구 목적의 정성적·반정량적 QSP 모델입니다. 공개 문헌과 임상시험 데이터를 바탕으로 구성되었으나 독립적으로 검증·인증되지 않았으며, 실제 임상 의사결정, 처방, 또는 규제 제출에 직접 사용해서는 안 됩니다.