PK/PD 시뮬레이션 학습: R에서 mrgsolve를 이용한 초보자용 몬테카를로 분석

R-Blogger · 블로그·해설 · 2026-03-10

R-Blogger블로그·해설한국어2026-03-10

PK/PD 시뮬레이션 학습: R에서 mrgsolve를 이용한 초보자용 몬테카를로 분석

처음으로 PK/PD 탐구 – R의 mrgsolve로 세프트리아손 시뮬레이션 Free drug levels이… 놀랍게도 높은가? 궁금증으로 q48h 주사를 시도해 본 결과, 답보다 더 많은 질문이 남아 있습니다 🤔📈 Motivations Pharmacokinetics (PK)와 Pharmacodynamics (PD)를 배우는 것은 오랫동안 제 관심사였습니다. 인구 PK 논문을 읽으며 수많은 숫자와 수식을 보는 것은 항상 도전이었는데, 최소억제농도(mic)의 probability target attainment (PTA)을 계산하기 위한 시뮬레이션 코드를 어떻게 짜는지 학습해 보는 것이 더 나은 접근이라고 생각합니다. 함께 시작해 봅시다! Disclaimer 저는 약사도 아니며 PK/PD 전문가도 아닙니다. 이 문서는 제 개인 학습 및 교육용으로만 작성되었습니다. 의료 조언이 아닙니다. 오류가 있을 경우 알려 주십시오. Objectives 인구 PK가 무엇인지 이해하기 논문에서 관심 있는 파라미터 확인하기 CrCl, 알부민이 낮은 상황에서 q48h 주사를 통한 PTA 시뮬레이션 개선점을 찾아보기 What Is Population PK Population pharmacokinetics (popPK)는 여러 사람의 데이터를 활용해 약물이 어떻게 움직이는지 통계적으로 설명하는 접근법입니다. 개개인 차이를 고려하면서, 대다수 환자에게서 보편적인 약물 동태를 파악합니다. Garot D et al.의 Population pharmacokinetics of ceftriaxone in critically ill septic patients: a reappraisal 논문을 예시로 사용합니다. What Are The Parameters of Interest On a Paper? 논문에서 우리는 다음 파라미터에 집중합니다. (Table 3 참조) CL = θ₁ + θ₂ . (CL_cr/4.26) – θ₁: 비신장성(기본) clearance, θ₂: 신장 clearance scaling coefficient V1: 중앙 compartment의 분포 체적 V2: 주변 compartment의 분포 체적 Q: 중앙–주변 compartment 간 bidirectional clearance ω²(CL), ω²(V1), ω²(V2): 각각 clearance와 분포 체적의 between-subject variability 이 파라미터들을 mrgsolve 모델에 반영합니다. 모델은 fixed effect (theta)와 random effect (eta)로 구성되며, eta는 평균 0, 분산 ω²를 갖는 정규분포를 따른다고 가정합니다. Let’s Get On With the Code! library(mrgsolve) library(tidyverse) mod %% as_tibble() ETA는 random effect이며, mean이 0이고 variance가 omega squared인 정규분포를 가정합니다. ETA는 그리스 문자 (eh-ta)입니다. EPS는 Epsilon입니다. ev, amount은 mg 단위의 투여량; rate는 시/시간당 투여량; ii는 빈도; addl은 추가 투여량; cmt는 투여가 이루어지는 compartment입니다. 이 경우, 30분간 2000 mg 세프트리아손을 중앙 compartment에 24시간마다 3회 (초기 1회 + 2회 추가) 투여합니다. set.seed(123) sim = mod %% ev(dosing) %% mrgsim(nid = 1000, end = 72, delta = 0.25) %% as_tibble() ## PTA 계산 sims %% filter(time = 48) %% group_by(ID) %% summarise(fT = mean(Cp_free MIC)) %% summarise(PTA = mean(fT = 0.50)) %% pull() ## [1] "Probability of Target Attainment: 0.996" ggplot(sims, aes(x=time, y=Cp_free, group=ID)) + geom_line(alpha=0.01) + geom_hline(yintercept = MIC, color = "red") + theme_bw() 위 예시에서는 mic을 1로 설정하고 48시간 이후(steady state) 데이터를 필터링해, 자유 세프트리아손 농도가 mic보다 높은 시간 비율을 계산하고, 그 평균을 구해 PTA를 얻었습니다. PTA는 약 99.6%였습니다. CrCl과 알부민이 다른 상황에서의 시뮬레이션 CrCl이 낮거나 알부민이 부족한 상황을 모델에 반영했습니다. (코드 생략) CrCl 증가 시 clearance가 증가해 PTA가 감소합니다. 알부민 감소 시 free fraction (fu)이 증가해 PTA가 개선될 수 있습니다. Hypoalbuminemia 시 모델링 초기 모델에서는 고정된 fu = 0.1을 사용했습니다. 하지만 중증 환자에서는 hypoalbuminemia가 흔히 발생하며, 이는 free fraction를 증가시켜 PK/PD에 영향을 미칩니다. 논문에서 제시한 공식으로 총농도에서 자유농도를 추정합니다. mod %% mrgsim(nid = 1000, end = 72, delta = 0.25) %% as_tibble() ## ... (same PTA 계산 코드) ... np를 295로 조정(알부민 ~25g/L)하여 모델에 반영하면 PTA가 약간
원문 URL
전체 글은 원문 페이지에서 이어서 읽을 수 있습니다.
원문에서 전체 글 읽기
작성자
R-Blogger
출처
R-Blogger
플랫폼
R-Blogger
분류
블로그·해설
언어
한국어
발행일
2026-03-10