이 문서는 NONMEM 입문자를 위한 실습 답안지입니다. 각 문제에 대해 왜 그런지를 이해하는 것이 중요합니다.
목표: NONMEM에서 사용하는 데이터셋의 구조를 이해하고 직접 만들어봅니다.
답: 40명
Solution 파일을 확인하면 ID가 1부터 40까지 있습니다.
Tip: 엑셀에서 ID 열을 선택하고
중복 제거기능을 사용하면 쉽게 확인할 수 있어요!
답: 14회
각 대상자마다 아래 시점에서 혈액을 채취했습니다:
| 순서 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TIME (hr) | 0 | 0.25 | 0.5 | 0.75 | 1 | 1.5 | 2 | 3 | 4 | 6 | 8 | 12 | 18 | 24 |
해석: 투여 직후(0시간)부터 24시간까지 총 14번 채혈했습니다.
답: NONMEM이 이해할 수 있도록 다음 항목들이 필요합니다:
| Data Item | 설명 | 예시 |
|---|---|---|
| ID | 대상자 번호 (누구인지 구분) | 1, 2, 3, ... |
| TIME | 투여 후 경과 시간 | 0, 0.25, 0.5, ... |
| AMT | 투여량 (얼마나 줬는지) | 100000 (ug) |
| DV | 관측된 농도 (Dependent Variable) | 891.2, 1179.9, ... |
| MDV | 농도값 유무 (0=있음, 1=없음) | 0 또는 1 |
쉽게 말하면:
- ID = "몇 번 환자?"
- TIME = "언제 채혈했어?"
- AMT = "약 얼마나 줬어?"
- DV = "농도가 얼마야?"
- MDV = "농도 측정했어? (0=응, 1=아니)"
답: CONC.csv 구조 (처음 몇 행만 표시):
| ID | TIME | AMT | DV | MDV |
|---|---|---|---|---|
| 1 | 0 | 100000 | 0 | 0 |
| 1 | 0.25 | 100000 | 891.2 | 0 |
| 1 | 0.5 | 100000 | 1179.9 | 0 |
| 1 | 0.75 | 100000 | 1433.5 | 0 |
| ... | ... | ... | ... | ... |
주의: 이 형태는
$PRED블록 사용 시 적합합니다. 모든 행에 AMT가 반복되는 것이 특징입니다.
답: PREDPP.csv 구조:
| ID | TIME | AMT | DV | MDV | CMT |
|---|---|---|---|---|---|
| 1 | 0 | 100000 | . | 1 | 1 |
| 1 | 0 | . | 0 | 0 | 2 |
| 1 | 0.25 | . | 891.2 | 0 | 2 |
| 1 | 0.5 | . | 1179.9 | 0 | 2 |
| ... | ... | ... | ... | ... | ... |
핵심 차이점 (CONC.csv vs PREDPP.csv):
구분 CONC.csv ($PRED용) PREDPP.csv (PREDPP용) 투여/관측 한 행에 섞여있음 분리됨 AMT 모든 행에 있음 투여 행에만 있음 MDV 모두 0 투여 행은 1, 관측 행은 0 CMT 없음 있음 (구획 번호) 쉽게 말하면: PREDPP는 "약 주는 것"과 "피 뽑는 것"을 다른 줄에 씁니다!
답: PRED.csv 구조:
| ID | TIME | AMT | DV | MDV | SEX | AGE | WT | HT |
|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 100000 | 0 | 0 | 1 | 50 | 73.7 | 184.5 |
| 1 | 0.25 | 100000 | 891.2 | 0 | 1 | 50 | 73.7 | 184.5 |
| 1 | 0.5 | 100000 | 1179.9 | 0 | 1 | 50 | 73.7 | 184.5 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... |
특징:
- $PRED 사용 시에는 모든 행에 AMT 포함
- 투여/관측이 분리되지 않음
- CMT 불필요 (control file에서 직접 처리)
답: CMT (Compartment Number)
| 투여 경로 | CMT 값 | 의미 |
|---|---|---|
| 경구 투여 (PO) | 1 | 위장관(GI tract)으로 들어감 |
| 정맥 투여 (IV) | 2 | 혈액(Central)으로 바로 들어감 |
비유:
- 경구투여 = 현관(CMT=1)으로 들어와서 거실(CMT=2)로 이동
- 정맥투여 = 거실(CMT=2)로 바로 입장!
[경구투여] [정맥투여]
💊 💉
↓ ↓
┌──────┐ ┌──────┐
│CMT=1 │ │CMT=2 │
│ 위장 │ ──→ │ 혈액 │ ──→ 제거
└──────┘ └──────┘
답:
PO.csv (경구 투여) - 약을 먹는 경우:
| ID | TIME | AMT | DV | MDV | SEX | AGE | WT | HT | CMT |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 100000 | . | 1 | 1 | 50 | 73.7 | 184.5 | 1 |
| 1 | 0 | . | 0 | 0 | 1 | 50 | 73.7 | 184.5 | 2 |
| 1 | 0.25 | . | 891.2 | 0 | 1 | 50 | 73.7 | 184.5 | 2 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
투여 행의 CMT=1 (위장관으로 투여)
IV.csv (정맥 투여) - 주사 맞는 경우:
| ID | TIME | AMT | DV | MDV | SEX | AGE | WT | HT | CMT |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 100000 | . | 1 | 1 | 50 | 73.7 | 184.5 | 2 |
| 1 | 0.25 | . | 2587.9 | 0 | 1 | 50 | 73.7 | 184.5 | 2 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
투여 행의 CMT=2 (혈액으로 바로 투여)
답: RATE
| 항목 | 계산 | 값 |
|---|---|---|
| 투여량 (AMT) | - | 100,000 ug |
| 주입 시간 | - | 0.5 hr (30분) |
| RATE | AMT ÷ 시간 | 200,000 ug/hr |
쉽게 말하면:
- IV bolus = 한 번에 "팍!" 주입 (RATE 없음)
- IV infusion = 천천히 "쭈욱~" 주입 (RATE 필요)
RATE = "1시간에 얼마나 들어가?" 라는 뜻입니다.
답: INF.csv 구조:
| ID | TIME | AMT | RATE | DV | MDV | SEX | AGE | WT | HT | CMT |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 100000 | 200000 | . | 1 | 1 | 50 | 73.7 | 184.5 | 2 |
| 1 | 0.25 | . | 2587.9 | 0 | 1 | 50 | 73.7 | 184.5 | 2 | |
| 1 | 0.5 | . | 2310.5 | 0 | 1 | 50 | 73.7 | 184.5 | 2 | |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
주의: RATE는 투여 행에만 입력합니다. 관측 행은 비워둡니다.
답: ADDL (Additional Doses)과 II (Interdose Interval)
| Data Item | 값 | 의미 |
|---|---|---|
| ADDL | 5 | 추가로 5번 더 줌 (첫 투여 제외) |
| II | 8 | 8시간마다 반복 |
투여 스케줄:
투여 횟수 시간 (hr) 1회차 (데이터에 기록) 0 2회차 (ADDL로 처리) 8 3회차 (ADDL로 처리) 16 4회차 (ADDL로 처리) 24 5회차 (ADDL로 처리) 32 6회차 (ADDL로 처리) 40 쉽게 말하면: "처음 1번 주고, 8시간마다 5번 더 줘!" 를 ADDL=5, II=8로 표현합니다.
답: ADD.csv 구조:
| ID | TIME | AMT | RATE | ADDL | II | DV | MDV | SEX | AGE | WT | HT | CMT |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 100000 | 200000 | 5 | 8 | . | 1 | 1 | 50 | 73.7 | 184.5 | 2 |
| 1 | 0.25 | . | 2587.9 | 0 | 1 | 50 | 73.7 | 184.5 | 2 | |||
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
주의: ADDL, II도 투여 행에만 입력합니다.
답: 이미 ADD.csv에 아래 정보가 포함되어 있습니다:
| Column | 설명 | 범위 |
|---|---|---|
| SEX | 성별 | 0=여성, 1=남성 |
| AGE | 나이 (세) | 14 ~ 55 |
| WT | 체중 (kg) | 43.5 ~ 91.0 |
| HT | 키 (cm) | 146.1 ~ 210.4 |
공변량(Covariate)이란? 약물 반응에 영향을 줄 수 있는 환자 특성입니다. 예: 체중이 큰 사람은 분포용적(V)이 클 수 있어요!
답:
그래프 특징:
농도(DV)
│ ★ Cmax (최고농도)
│ /\
│ / \
│ / \____
│/ \_____
└──────────────────→ 시간(TIME)
0 Tmax
[흡수상] [제거상]
| 구간 | 시간 | 특징 |
|---|---|---|
| 흡수상 | 0 ~ 2시간 | 농도 상승 (약이 흡수되는 중) |
| Tmax | 약 1~2시간 | 최고 농도 도달 |
| 제거상 | 2시간 이후 | 농도 감소 (약이 제거되는 중) |
모델링 전략 제안:
| 항목 | 선택 | 이유 |
|---|---|---|
| 구획 모델 | 1-구획 | 단순한 지수적 감소 패턴 |
| 투여 경로 | 경구 (PO) | 흡수상이 존재함 |
| 추정 파라미터 | KA, CL, V | 흡수속도, 청소율, 분포용적 |
| 오차 모델 | Combined | 낮은 농도와 높은 농도 모두 고려 |
| BSV | CL, V | 개체간 변이 |
목표: NONMEM의 built-in 모델(ADVAN1~4)을 이해합니다.
답:
| 항목 | H0_IV_1comp.CTL | H0_IV_2comp.CTL |
|---|---|---|
| 투여 경로 | 정맥 (IV) | 정맥 (IV) |
| 구획 모델 | 1-구획 | 2-구획 |
| 사용 ADVAN | ADVAN1 | ADVAN3 |
1-구획 vs 2-구획:
[1-구획] [2-구획] ┌──────┐ 💉 │말초구획│ ↓ └───┬──┘ ┌──────┐ ↕ │중심구획│ → 제거 ┌──────┐ └──────┘ │중심구획│ → 제거 └──────┘ 💉
답: $SUBROUTINE 블록
$SUBROUTINE ADVAN1 TRANS2 ; IV 1-구획
$SUBROUTINE ADVAN3 TRANS4 ; IV 2-구획
ADVAN 번호의 의미:
| ADVAN | 투여경로 | 구획 수 | 설명 |
|---|---|---|---|
| ADVAN1 | IV | 1 | 가장 단순한 모델 |
| ADVAN2 | PO | 1 | 흡수 구획 추가 |
| ADVAN3 | IV | 2 | 말초 구획 추가 |
| ADVAN4 | PO | 2 | 흡수 + 말초 구획 |
TRANS의 의미:
| TRANS | 파라미터화 | 사용 파라미터 |
|---|---|---|
| TRANS2 | CL, V | 청소율, 분포용적 |
| TRANS4 | CL, V1, Q, V2 | 2-구획용 |
쉽게 외우기:
- 홀수 ADVAN (1, 3) = IV
- 짝수 ADVAN (2, 4) = PO
답:
| 항목 | H0_IV_1comp.CTL | H0_PO_1comp.CTL |
|---|---|---|
| 투여 경로 | 정맥 (IV) | 경구 (PO) |
| 구획 모델 | 1-구획 | 1-구획 + 흡수구획 |
| 사용 ADVAN | ADVAN1 | ADVAN2 |
답: $SUBROUTINE 블록
$SUBROUTINE ADVAN1 TRANS2 ; IV - KA 없음
$SUBROUTINE ADVAN2 TRANS2 ; PO - KA 있음
핵심 차이점:
| 비교 | ADVAN1 (IV) | ADVAN2 (PO) |
|---|---|---|
| 흡수 구획 | 없음 | 있음 (Depot) |
| KA 파라미터 | 없음 | 있음 |
| 구획 구조 | Central만 | Depot → Central |
PO 모델의 추가 코드:
TVKA = THETA(3) ; 흡수 속도 상수 KA = TVKA * EXP(ETA(3)) ; 개체별 KA
답:
| 데이터셋 | 적합한 CTL | 선택 이유 |
|---|---|---|
| H0data_IV.csv | H0_IV_1comp.CTL | TIME=0에서 농도 최고 → 흡수상 없음 (IV 특성) |
| H0data_PO.csv | H0_PO_1comp.CTL | TIME=0에서 농도 0, 이후 상승 → 흡수상 존재 (PO 특성) |
데이터로 투여경로 구분하는 법:
특징 IV PO TIME=0 농도 최고 0 또는 낮음 흡수상 없음 있음 그래프 \ 형태 /\ 형태
실행 명령어:
nmfe75 HO_PO_1comp.CTL HO_PO_1comp.res확인할 결과:
- ✅ MINIMIZATION SUCCESSFUL
- ✅ Parameter estimates (THETA, OMEGA, SIGMA)
- ✅ Objective Function Value (OFV)
목표: 유연한 모델 구현을 위한 ADVAN5, ADVAN6을 이해합니다.
답: ADVAN5
| 구분 | Specific ADVAN (1~4) | General ADVAN (5, 6) |
|---|---|---|
| 구조 | 정해진 구조만 가능 | 자유롭게 정의 가능 |
| 용도 | 표준 PK 모델 | 복잡한 모델 |
ADVAN5 특징:
- Rate constants (K12, K20 등)를 직접 정의
- 선형 모델에 적합 (미분 방정식 직접 안 씀)
답:
$SUBROUTINE ADVAN5
$MODEL ; ① 구획 정의
COMP(DEPOT, DEFDOSE) ; 흡수 구획 (1번)
COMP(CENT, DEFOBS) ; 중심 구획 (2번)
$PK ; ② Rate constant 정의
K12 = KA ; 1→2 이동 속도
K20 = CL/V ; 2→밖 제거 속도
S2 = V ; Scaling factor
Rate Constant 명명 규칙:
- K12 = 1번 구획 → 2번 구획
- K20 = 2번 구획 → 밖(0번 = 제거)
답:
$PROB HO_PO_1comp using ADVAN5 (General Linear Model)
$DATA ../HOdata_PO.csv IGNORE=@
$INPUT ID TIME AMT DV MDV SEX AGE WT HT
$SUBROUTINE ADVAN5
$MODEL
COMP(DEPOT, DEFDOSE) ; 구획1: 흡수 구획 (약 투여되는 곳)
COMP(CENT, DEFOBS) ; 구획2: 중심 구획 (농도 측정하는 곳)
$PK
;---- 고정 효과 (전체 평균) ----
TVCL = THETA(1) ; 평균 청소율
TVV = THETA(2) ; 평균 분포용적
TVKA = THETA(3) ; 평균 흡수속도상수
;---- 개체간 변이 적용 ----
CL = TVCL * EXP(ETA(1)) ; 개인별 청소율
V = TVV * EXP(ETA(2)) ; 개인별 분포용적
KA = TVKA * EXP(ETA(3)) ; 개인별 흡수속도
;---- ADVAN5용 설정 ----
S2 = V ; 구획2의 scaling factor
K12 = KA ; Depot → Central 속도
K20 = CL/V ; Central → 제거 속도
$ERROR
IPRED = F
W = SQRT(THETA(4)**2 + THETA(5)**2 * IPRED**2)
IRES = DV - IPRED
IWRES = IRES / W
Y = IPRED + W * EPS(1)
$THETA
(0, 10, 30) ; CL
(0, 30, 100) ; V
(0, 1.5, 5) ; KA
0.001 FIX ; Additive error
(0, 0.3, 1) ; Proportional error
$OMEGA
0.04 ; BSV on CL
0.04 ; BSV on V
0 FIX ; BSV on KA (고정)
$SIGMA
1 FIX
$ESTIMATION NOABORT MAXEVAL=9999 METHOD=1 INTER PRINT=10
$TABLE ID TIME DV IPRED CWRES ONEHEADER NOPRINT FILE=sdtab5
답: 예, 동일합니다!
| 비교 항목 | ADVAN2 | ADVAN5 |
|---|---|---|
| 수학적 모델 | 동일 | 동일 |
| OFV | 같음 | 같음 |
| Parameter | 같음 | 같음 |
왜 같을까? 둘 다 같은 1-구획 경구투여 모델을 표현하는 다른 방법일 뿐입니다. ADVAN2는 "미리 만들어진 템플릿", ADVAN5는 "직접 조립"한 것!
답: ADVAN6
| ADVAN | 유형 | 방정식 | 계산 방법 |
|---|---|---|---|
| ADVAN5 | 선형 | Rate constant | 해석적 (정확) |
| ADVAN6 | 비선형 | 미분 방정식 | 수치적 (근사) |
ADVAN6이 필요한 경우:
- Michaelis-Menten kinetics (포화 동력학)
- Target-mediated drug disposition (TMDD)
- 복잡한 비선형 모델
답:
$SUBROUTINE ADVAN6 TOL=4 ; TOL = 계산 정밀도
$MODEL ; ① 구획 정의
COMP(DEPOT, DEFDOSE)
COMP(CENT, DEFOBS)
$PK ; ② 파라미터 정의
S2 = V
K20 = CL/V
$DES ; ③ 미분 방정식 (핵심!)
DADT(1) = -KA*A(1) ; dA1/dt (흡수구획 변화)
DADT(2) = KA*A(1) - K20*A(2) ; dA2/dt (중심구획 변화)
$DES 블록 이해하기:
A(1)= 1번 구획의 약물량DADT(1)= 1번 구획 약물량의 시간에 따른 변화율-KA*A(1)= 흡수되어 나가는 양 (음수 = 감소)KA*A(1) - K20*A(2)= 들어오는 양 - 나가는 양
답:
$PROB HO_PO_1comp using ADVAN6 (General Non-Linear Model)
$DATA ../HOdata_PO.csv IGNORE=@
$INPUT ID TIME AMT DV MDV SEX AGE WT HT
$SUBROUTINE ADVAN6 TOL=4 ; TOL=4는 10^-4 정밀도
$MODEL
COMP(DEPOT, DEFDOSE)
COMP(CENT, DEFOBS)
$PK
;---- 고정 효과 ----
TVCL = THETA(1)
TVV = THETA(2)
TVKA = THETA(3)
;---- 개체간 변이 ----
CL = TVCL * EXP(ETA(1))
V = TVV * EXP(ETA(2))
KA = TVKA * EXP(ETA(3))
;---- ADVAN6용 설정 ----
S2 = V
K20 = CL/V
$DES
;---- 미분 방정식 ----
; dA1/dt = -KA × A1 (흡수구획: 약이 빠져나감)
DADT(1) = -KA*A(1)
; dA2/dt = KA × A1 - K20 × A2 (중심구획: 들어오고 나감)
DADT(2) = KA*A(1) - K20*A(2)
$ERROR
IPRED = F
W = SQRT(THETA(4)**2 + THETA(5)**2 * IPRED**2)
IRES = DV - IPRED
IWRES = IRES / W
Y = IPRED + W * EPS(1)
$THETA
(0, 10, 30)
(0, 30, 100)
(0, 1.5, 5)
0.001 FIX
(0, 0.3, 1)
$OMEGA
0.04
0.04
0 FIX
$SIGMA
1 FIX
$ESTIMATION NOABORT MAXEVAL=9999 METHOD=1 INTER PRINT=10
$TABLE ID TIME DV IPRED CWRES ONEHEADER NOPRINT FILE=sdtab6
답: 실질적으로 동일합니다!
| 비교 | ADVAN5 (GLM) | ADVAN6 (GNLM) |
|---|---|---|
| 계산 방법 | 해석적 (정확) | 수치적 (근사) |
| 속도 | 빠름 | 느림 |
| 결과 | 정확 | TOL에 따라 약간 차이 |
| OFV | 기준값 | 거의 동일 |
언제 ADVAN6을 써야 하나?
- 선형 모델 → ADVAN5 (더 빠르고 정확)
- 비선형 모델 → ADVAN6 (어쩔 수 없이 필요)
목표: Output 파일을 읽고 결과의 적절성을 평가합니다.
차이점:
| 항목 | PO.csv | dataset1.csv |
|---|---|---|
| AMT 단위 | 100000 (ug) | 100 (mg) |
| TIME=0 DV | 0 | . (missing) |
처리 방법:
-
단위 차이 해결: $PK에서 Scaling factor 조정
S2 = V/1000 ; mg 단위 보정 -
Missing 값 처리: MDV=1로 설정하여 likelihood에서 제외
중요: 단위 불일치는 잘못된 파라미터 추정의 원인이 됩니다!
진행 과정:
| 단계 | 추가한 ETA | OFV 변화 | 채택? |
|---|---|---|---|
| 0 | 없음 (모두 FIX) | 기준값 | - |
| 1 | ETA on CL | 큰 감소 | ✅ |
| 2 | ETA on V2 | 유의한 감소 | ✅ |
| 3 | ETA on KA | 작은 감소 | ❌ 또는 ✅ |
선택 기준:
| 기준 | 값 | 의미 |
|---|---|---|
| ΔOFV | > 3.84 | p < 0.05로 유의 |
| OMEGA 값 | > 0 | 0에 가깝지 않아야 함 |
| Shrinkage | < 30% | 너무 높으면 신뢰 어려움 |
쉽게 말하면: "이 파라미터에 개인차가 있나?" → ETA 추가 후 OFV가 많이 줄면 "있다!"
수정된 $TABLE:
; 유의미한 ETA만 포함
$TABLE ID ETA1 ETA2 ONEHEADER NOPRINT NOAPPEND FILE=patab1
Control file 블록별 설명:
| 블록 | 역할 | 비유 |
|---|---|---|
| $PROB | 문제 이름 | 제목 |
| $DATA | 데이터 파일 | 재료 |
| $INPUT | 컬럼 이름 | 재료 라벨 |
| $SUBROUTINE | 모델 구조 | 레시피 종류 |
| $PK | 파라미터 정의 | 조리법 |
| $ERROR | 오차 모델 | 완성도 평가 |
| $THETA | 고정효과 초기값 | 기본 양념량 |
| $OMEGA | BSV 분산 | 개인 입맛 차이 |
| $SIGMA | 잔차 분산 | 측정 오차 |
| $TABLE | 출력 내용 | 결과물 |
확인 체크리스트:
| 항목 | 좋은 결과 | 나쁜 결과 |
|---|---|---|
| 수렴 | MINIMIZATION SUCCESSFUL | TERMINATED 또는 WARNING |
| RSE | < 50% | > 50% |
| Shrinkage | < 30% | > 30% |
| Condition Number | < 1000 | > 1000 |
| 경계값 도달 | 없음 | THETA가 경계에 있음 |
RSE (Relative Standard Error)란? 추정값의 불확실성을 나타냅니다. RSE = (SE / 추정값) × 100% → 낮을수록 추정이 정확합니다!
R 코드:
library(xpose4)
# 데이터 로드
xpdb <- xpose.data(runno = 1)
# 기본 진단 플롯
dv.vs.pred(xpdb) # DV vs PRED
dv.vs.ipred(xpdb) # DV vs IPRED
res.vs.pred(xpdb) # CWRES vs PRED
res.vs.idv(xpdb) # CWRES vs TIME
# 개인별 플롯
ind.plots(xpdb)좋은 fitting의 특징:
| 플롯 | 좋은 결과 |
|---|---|
| DV vs PRED | 점들이 대각선(y=x) 주변에 분포 |
| DV vs IPRED | 위와 유사, 더 tight함 |
| CWRES vs PRED | 0 주변에 랜덤 분포, 패턴 없음 |
| CWRES vs TIME | 위와 유사 |
[좋은 예] [나쁜 예]
CWRES CWRES
2│ · · · 2│ · · ·
0│ · · · · · 0│ · ·
-2│· · · -2│· ·
└─────────→ TIME └─────────→ TIME
(랜덤 분포) (패턴 있음!)
목표: 약물 반응에 영향을 주는 환자 특성(공변량)을 찾아 모델에 반영합니다.
분포 평가:
| 변수 | 유형 | 분포 특성 | 적절성 |
|---|---|---|---|
| AGE | 연속형 | 넓게 분포 | ✅ 적절 |
| WT | 연속형 | 정규 분포 | ✅ 적절 |
| CLCR | 연속형 | 약간 치우침 | ✅ 적절 |
| SEX | 범주형 | 0/1 | ✅ 적절 |
| CRRT | 범주형 | 0/1 | ✅ 적절 |
| TBSA | 연속형 | 우측 치우침 |
부적절한 분포의 예:
- 모든 값이 거의 같음 (변이 없음)
- 극단적으로 한쪽에 치우침
상관관계 확인 필요 쌍:
| 변수 1 | 변수 2 | 예상 관계 | 이유 |
|---|---|---|---|
| WT | CLCR | 양의 상관 | Cockcroft-Gault 공식에 WT 포함 |
| AGE | CLCR | 음의 상관 | 나이 들면 신기능 감소 |
공선성이 문제인 이유: 두 변수가 너무 비슷한 정보를 담고 있으면, 둘 다 모델에 넣을 때 어떤 게 진짜 영향인지 구분이 안 됩니다.
기준: |상관계수| > 0.7 이면 함께 사용 주의!
ETA 간 상관관계:
ETA1 (CL)과 ETA2 (V)가 상관관계가 있다면:
- Full OMEGA block 사용 고려
- 또는 allometric scaling 적용
R 코드:
ranpar.vs.cov(xpdb)해석 방법:
| 패턴 | 의미 | 조치 |
|---|---|---|
| 기울기 있음 | 공변량 효과 있을 수 있음 | 모델에 포함 고려 |
| 수평 | 효과 없음 | 제외 |
| 곡선 | 비선형 관계 | 변환 고려 |
[효과 있음] [효과 없음]
ETA ETA
│ · · │ · · · ·
│ · │ · ·
│· │ · · ·
└────→ WT └────→ WT
R 코드:
gam(xpdb)결과 해석:
- AIC가 감소하는 공변량 = 유의미한 효과
권장 전략:
| 단계 | 내용 | 기준 |
|---|---|---|
| 1 | Base model 확립 | CL, V에 BSV |
| 2 | 명백한 공변량 우선 | 생리학적 타당성 |
| 3 | Forward inclusion | ΔOFV > 3.84 (p<0.05) |
| 4 | Backward elimination | ΔOFV > 6.63 (p<0.01) |
Forward vs Backward:
- Forward: 하나씩 추가하면서 좋아지나 확인
- Backward: 다 넣고 하나씩 빼면서 나빠지나 확인
- 둘 다 해서 최종 모델 선정!
수정된 $PK (PK110):
$PK
IF(CRRT.EQ.0) THEN
CL = THETA(1) * EXP(ETA(1)) ; 정상 환자
ELSE
CL = THETA(2) ; CRRT 환자 (다른 CL, ETA 없음)
ENDIF
V = THETA(3) * EXP(ETA(2))
왜 CRRT 환자는 ETA가 없나? CRRT(지속적 신대체요법)를 받는 환자는 기계가 청소를 대신하므로 개인차가 적습니다.
대안 방법:
CLCRRT = 1
IF(CRRT.EQ.1) CLCRRT = THETA(4) ; 비율로 표현
CL = THETA(1) * CLCRRT * EXP(ETA(1))
장점: THETA(4)가 "CRRT 환자의 CL이 몇 배인가"를 직접 알려줍니다.
IF(CRRT.EQ.0) THEN
CL = THETA(1) * EXP(ETA(1))
ELSE
CL = THETA(2) * EXP(ETA(2)) ; 별도 ETA
ENDIF
문제점:
- CRRT=1 그룹이 적으면 추정 불안정
- OMEGA가 0으로 가는 boundary 문제
CRRT 적용 후 다시:
- ETA vs Covariate plots 확인
- 남은 효과 있는지 확인
- 추가 공변량 탐색
세 가지 구조 비교:
| Run | 구조 | 코드 | 해석 |
|---|---|---|---|
| 121 | V = WT × θ | V = WT * THETA(3) |
θ = V per kg |
| 122 | V = (WT/평균WT) × θ | V = (WT/62) * THETA(3) |
θ = 평균 체중에서의 V |
| 123 | V = (WT/평균WT) × θ + θ₄ | V = (WT/62)*THETA(3) + THETA(4) |
절편 추가 |
추천: Run 122
이유:
- THETA(3)가 "평균 체중(62kg)인 사람의 V"로 해석 가능
- 임상적으로 의미 있는 값
- Centering으로 추정 안정성 향상
확인 방법:
- WT 포함 후 ETA(V) vs 다른 공변량 플롯
- 아직 기울기가 있다면 → 추가 공변량 후보
가능한 추가 공변량:
- AGE
- TBSA (화상 면적)
방법:
| 단계 | 제거한 공변량 | ΔOFV | 결과 |
|---|---|---|---|
| 1 | WT on V | +8.5 | 유지 (> 6.63) |
| 2 | AGE on V | +2.1 | 제거 (< 6.63) |
Backward elimination 기준: 제거했을 때 OFV 증가 < 6.63 → 그 공변량은 빼도 됨
후보 공변량:
- CLCR (신장 청소율) - 가장 유력!
- AGE
- WT
- CRRT (이미 포함)
예시 코드:
CL = THETA(1) * (CLCR/100)**THETA(5) * EXP(ETA(1))
해석: CLCR이 100일 때 기준, CLCR이 변하면 CL이 THETA(5) 승으로 변함
| Item | 설명 | 필수? | 예시 |
|---|---|---|---|
| ID | 대상자 번호 | ✅ | 1, 2, 3 |
| TIME | 시간 | ✅ | 0, 1, 2 |
| AMT | 투여량 | ✅ | 100, 200 |
| DV | 농도 (관측값) | ✅ | 50.3, 42.1 |
| MDV | Missing DV (0/1) | ✅ | 0, 1 |
| CMT | 구획 번호 | PREDPP | 1, 2 |
| RATE | 주입 속도 | Infusion | 100 |
| ADDL | 추가 투여 횟수 | 반복투여 | 5 |
| II | 투여 간격 | 반복투여 | 24 |
| 상황 | ADVAN | 이유 |
|---|---|---|
| IV + 1구획 | ADVAN1 | 가장 단순 |
| PO + 1구획 | ADVAN2 | 흡수 포함 |
| IV + 2구획 | ADVAN3 | 분포상 포함 |
| PO + 2구획 | ADVAN4 | 흡수+분포 |
| 선형 복잡 모델 | ADVAN5 | 유연한 선형 |
| 비선형 모델 | ADVAN6 | ODE 필요 |
- 공변량 분포 확인
- 공변량 간 공선성 확인
- ETA vs Covariate plots
- GAM screening
- Forward inclusion (p < 0.05)
- Backward elimination (p < 0.01)
- 최종 모델 진단
문의: 질문이 있으시면 강의 중 또는 이메일로 연락주세요!