PK(藥代動力學(xué))分析主要研究藥物在體內(nèi)的吸收、分布、代謝和排泄過程,其涉及的相關(guān)圖表包括血藥濃度-時間曲線、PK參數(shù)計(jì)算、劑量線性分析等。
R 是一款開源免費(fèi)、擴(kuò)展性強(qiáng)、腳本化操作的統(tǒng)計(jì)編程語言和環(huán)境,專為數(shù)據(jù)分析和可視化設(shè)計(jì),適用于早期研究、探索性分析、內(nèi)部決策支持等非遞交階段。正式遞交仍需使用已驗(yàn)證的商業(yè)軟件(如Phoenix WinNonlin、SAS),以確保合規(guī)性。
本文演示使用R完成PK分析全流程,包含:
?
非房室模型(NCA):用于計(jì)算關(guān)鍵PK參數(shù)(如Cmax、AUC),無需假設(shè)房室結(jié)構(gòu),適用于早期藥物研發(fā)階段。
?
Power Model分析:探索劑量與暴露量的線性關(guān)系,支持劑量優(yōu)化決策。
?
可視化分析:通過專業(yè)圖表(如線性和半對數(shù)藥時曲線圖)直觀呈現(xiàn)藥物動力學(xué)特征。
?
自動化報告生成:利用r2rtf包實(shí)現(xiàn)從數(shù)據(jù)到Word報告的一鍵輸出,減少人工操作誤差。
流程結(jié)合了開源工具(如PKNCA、ggplot2)與傳統(tǒng)商業(yè)軟件(WinNonlin、SAS)的對比驗(yàn)證,確保分析結(jié)果的可靠性。
# 核心分析包
library(tidyverse)
library(readxl)
library(PKNCA) # 非房室分析
library(r2rtf) # RTF輸出
# 輔助工具
library(knitr) # 交互式表格
PART 01
數(shù)據(jù)模擬
原始數(shù)據(jù)模擬
pc <- read_xlsx(path=str_c(getwd(),"/outputs/pc.xlsx"))# 查看模擬數(shù)據(jù)knitr::kable(pc[1:10, 1:6])
PART 02
非房室分析(NCA)
關(guān)鍵PK參數(shù)計(jì)算
# 設(shè)置PK參數(shù)計(jì)算的單位轉(zhuǎn)換表
ppunits <- pknca_units_table(concu="ug/mL", doseu="mg/kg", amountu="mg", timeu="hr")
conc_raw <- arrange(pc, SUBJID,ATPTN)
# 設(shè)置濃度數(shù)據(jù)
conc_obj_multi <- PKNCAconc(data=conc_raw,formula=AVAL~ATPTN|SUBJID)
# 設(shè)置劑量數(shù)據(jù)
dose_raw <- select(conc_raw,ATPTN,DOSE,SUBJID) %>% distinct()
dose_obj_multi <- PKNCAdose(dose_raw,DOSE~ATPTN|SUBJID,route="intravascular",duration=1.5)
# 設(shè)置參數(shù)計(jì)算時間區(qū)間
intervals_manual <- data.frame(start=0,end=504,cmax=TRUE,auclast=TRUE,aucinf.obs=TRUE)
o_data <- PKNCAdata(conc_obj_multi, dose_obj_multi,intervals=intervals_manual,units=ppunits)
# 計(jì)算PK參數(shù)
o_results <- pk.nca(o_data)
# 結(jié)果呈現(xiàn)
ncasingle <- o_results[["result"]] %>%
select(SUBJID,start,end,PPTESTCD,PPORRES,PPORRESU) %>%
filter(PPTESTCD %in% c("cmax","auclast","aucinf.obs"))
# 輸出PK參數(shù)
kable(pivot_wider(ncasingle,id_cols=1,names_from = "PPTESTCD", values_from = "PPORRES"))
WinNonlin計(jì)算結(jié)果
PART 03
Power Model分析
劑量-暴露量關(guān)系建模
Power Model (原始形式):
線性化形式 (取自然對數(shù)后):
·
數(shù)據(jù)轉(zhuǎn)換:對劑量和PK參數(shù)取自然對數(shù),轉(zhuǎn)化為線性模型。
·
擬合與檢驗(yàn):使用lm函數(shù)進(jìn)行回歸分析,計(jì)算斜率置信區(qū)間和R2,評估模型擬合優(yōu)度。
· 可視化:展示不同參數(shù)的劑量效應(yīng)趨勢,圖中標(biāo)注斜率、R2及90%置信區(qū)間,直觀支持統(tǒng)計(jì)結(jié)論。
# 劑量與參數(shù)的自然對數(shù)
rst <- left_join(ncasingle,distinct(dose_raw,DOSE,SUBJID),by="SUBJID") %>%
mutate(
logx=log(DOSE),
logy=log(PPORRES),
PPTESTCD=factor(PPTESTCD,levels=c("cmax","auclast","aucinf.obs"))
)
# 模型擬合
split <- split(rst,~PPTESTCD,drop=TRUE)
lmci <- map(split,
\(x) data.frame(PPTESTCD=unique(x$PPTESTCD),logx=lm(logy~logx,x)[["coefficients"]][["logx"]],
Rsq=summary(lm(logy~logx,x))[["r.squared"]],
confint(lm(logy~logx,x), "logx", level= 0.90 ))) %>%
bind_rows() %>%
# 設(shè)置繪圖呈現(xiàn)格式
mutate(
.logx=formatC(`logx`,digits=4,format = "f"),
lwci=formatC(`X5..`,digits=4,format = "f"),
upci=formatC(`X95..`,digits=4,format = "f"),
Rsq=formatC(`Rsq`,digits=4,format = "f"),
ci=str_c("Rsq:",Rsq,";Slope:",.logx,";\n90%CI (",lwci,", ",upci,")"),
) %>%
select(PPTESTCD,ci)
# 劑量線性繪圖呈現(xiàn)
(base <- ggplot(rst,aes(x=logx,y=logy)) +
geom_point(shape=24) +
geom_smooth(method = "lm", se = TRUE) +
geom_text(aes(x=1.5,y=-Inf,label=ci),data=lmci,size=3,vjust=-0.5) +
scale_x_continuous(breaks=c(0.69,1.38,2.08),labels=c("Ln(2)","Ln(4)","Ln(8)")) +
labs(title = "Power Model",x="ln(Dose)(mg/kg)",y="ln(param)") +
facet_wrap(vars(PPTESTCD),scales = "free", axes="all" ,
labeller = as_labeller(
c("cmax"="C[max](ug/mL)",
"auclast"="AUC[last](h%.%ug/mL)",
"aucinf.obs"="AUC[0-inf](h%.%ug/mL)"),
,default = label_parsed)) +
theme_minimal())
SAS 結(jié)果
通過SAS代碼復(fù)現(xiàn)分析,結(jié)果一致性驗(yàn)證了R流程的可靠性。
PART 04
可視化分析
平均血藥濃度曲線
·
線性尺度:展示各劑量組濃度隨時間的變化趨勢,誤差條表示標(biāo)準(zhǔn)差,反映個體間變異。
· 對數(shù)尺度:通過scale_y_log10轉(zhuǎn)換,突出低濃度階段的細(xì)節(jié),適用于寬動態(tài)范圍的數(shù)據(jù)。
pcsas % mutate( aval=as.numeric(AVAL), DOSE=str_c(DOSE,DOSEU) ) # 分組時點(diǎn)血藥濃度定量統(tǒng)計(jì)stplot % group_by(DOSE,ATPTN) %>% summarise( Mean=mean(aval,na.rm = TRUE), SD=sd(aval,na.rm = TRUE), lower=ifelse(is.na(SD) | Mean-SD % ungroup()# 線性血藥濃度-時間曲線(normal % ggplot(aes(x = ATPTN, y = Mean ,colour=DOSE)) + geom_errorbar(mapping=aes(ymin=lower, ymax=upper),width = 0.5,alpha=0.5) + geom_line(linewidth = 0.5,alpha=0.5) + geom_point(alpha=0.5) + scale_x_continuous(breaks=c(24,72,168,336,504)) + labs(x="Time(h)",y="Concentration(mean)",colour="劑量組:",title = "藥時曲線") + theme_classic() )
圖 藥時曲線
# 半對數(shù)血藥濃度-時間曲線normal %+% subset(stplot, Mean>0) + scale_y_log10(n.breaks=4,labels = scales::trans_format("log10", scales::math_format(10^.x))) + annotation_logticks(sides = "l",outside = TRUE) + expand_limits(y = c(1,10,100)) + coord_cartesian(clip = "off")
圖 藥時曲線
PART 05
報告生成
Word文檔自動導(dǎo)出
工具鏈:r2rtf包支持從數(shù)據(jù)匯總到RTF格式報告的全流程自動化,功能類似SAS的Proc Report。
關(guān)鍵步驟:
·
數(shù)據(jù)匯總:按劑量組和時間點(diǎn)計(jì)算均值、標(biāo)準(zhǔn)差、幾何均值等統(tǒng)計(jì)量。
·
表格格式化:通過pivot_wider和arsenal包生成結(jié)構(gòu)化表格。
·
RTF輸出:定制頁面方向(橫向)、邊距和分欄布局,生成格式精美、便于審閱的標(biāo)準(zhǔn)化報告。
pcsas <- pc %>%
mutate(
aval=as.numeric(AVAL),
log=ifelse(aval>0,log(aval),NA),
order=1,
DOSE=str_c(DOSE,DOSEU),
PCSTRESC=str_trim(formatC(AVAL,digits = 3,format = "f")) ,
)
# 定量統(tǒng)計(jì),并調(diào)整樣式
st <- filter(pcsas,!is.na(aval)) %>%
group_by(DOSE,ATPTN) %>%
summarise(
N=paste(sum(!is.na(aval))),
Mean=str_trim(formatC(mean(aval,na.rm = TRUE),digits = 3,format = "f")),
SD=str_trim(formatC(sd(aval,na.rm = TRUE),digits = 3,format = "f")) ,
Min=formatC(min(aval,na.rm = TRUE),digits = 2,format = "f"),
Median=str_trim(formatC(median(aval,na.rm = TRUE),digits = 2,format = "f")),
Max=formatC(max(aval,na.rm = TRUE),digits = 2,format = "f"),
`CV%`=case_when(
mean(aval,na.rm = TRUE) > 0 ~ formatC(sd(aval,na.rm = TRUE)/mean(aval,na.rm = TRUE)*100,digits = 1,format = "f"),
.default = NA),
Geomean=case_when(
mean(aval,na.rm = TRUE) > 0 ~ str_trim(formatC(exp(mean(log,na.rm = TRUE)),digits = 3,format = "f")),
.default = NA),
) %>%
pivot_longer(cols = c("N","Mean","SD","Min","Median","Max","CV%","Geomean"),names_to = "SUBJID",values_to = "PCSTRESC") %>%
mutate(
order=case_when(
SUBJID=="N" ~ 2 ,
SUBJID=="Mean" ~ 3 ,
SUBJID=="SD" ~ 4 ,
SUBJID=="Min" ~ 5 ,
SUBJID=="Median" ~ 6 ,
SUBJID=="Max" ~ 7 ,
SUBJID=="CV%" ~ 8 ,
SUBJID=="Geomean" ~ 9
),
SUBJID=str_c("\\b1{",SUBJID,"}"),
PCSTRESC=str_c("\\b{",PCSTRESC,"}")
)
# 合并原始數(shù)據(jù)與統(tǒng)計(jì)結(jié)果
rst <- bind_rows(pcsas,st) %>%
select(DOSE,order,SUBJID,ATPTN,PCSTRESC) %>%
arrange(DOSE,order,SUBJID,ATPTN) %>%
pivot_wider(id_cols = c(1:3),names_from = c("ATPTN"),values_from = "PCSTRESC") %>%
ungroup() %>%
select(-order) %>%
group_by(DOSE) %>%
group_modify(~ add_row(.x))
# 設(shè)置輸出樣式
rtf <- rst %>%
rtf_page(
orientation = "landscape",
border_first = "single",
border_last = "single",
margin = c(0.75, 0.75, 0.75, 0.75, 0.5, 0.5),
nrow=100
) %>%
rtf_colheader("||Time",
border_left=NULL,
border_right = NULL,
border_top = "single",
border_bottom = c("","","single"),
col_rel_width = c(8,8,96)
) %>%
rtf_colheader(colheader = "劑量|受試者|Pre|EOI|0.5h|1h|2h|6h|D2|D3|D4|D8|D15|D22-Pre",
border_left=NULL,
border_right = NULL,
border_top = NULL,
border_bottom = "single",
,col_rel_width = rep(9,14)) %>%
rtf_body(border_left = NULL,
border_right = NULL,
pageby_row = "column",
group_by="DOSE",
subline_by=NULL) %>%
rtf_encode() %>%
str_replace('fcharset161','fcharset134') %>%
write_rtf(str_c("outputs/","table_pc_summary.rtf"))
表 模擬數(shù)據(jù)結(jié)果
PART 06
總結(jié)
本文通過R語言實(shí)現(xiàn)了藥代動力學(xué)的全流程分析,涵蓋數(shù)據(jù)預(yù)處理、參數(shù)計(jì)算、統(tǒng)計(jì)建模、可視化及報告生成,適用于非遞交的PK數(shù)據(jù)分析。熙寧生物憑借專業(yè)的PK編程團(tuán)隊(duì)和資深藥理專家,結(jié)合驗(yàn)證工具(如Winnonlin、SAS)與開源軟件(如R),能夠高效精準(zhǔn)地滿足客戶各類PK/PD統(tǒng)計(jì)分析需求,為藥物研發(fā)與臨床研究提供可靠支持。
PART 07
熙寧生物臨床藥理服務(wù)平臺
熙寧生物臨床藥理服務(wù)平臺,專注于創(chuàng)新藥(涵蓋生物大分子及小分子)的臨床藥理學(xué)研究,擁有豐富的項(xiàng)目經(jīng)驗(yàn)和專業(yè)的技術(shù)能力。我們提供全方位的臨床藥理學(xué)服務(wù),包括:
?
PK NCA分析:采用WinNonlin軟件非房室模型(NCA)計(jì)算PK參數(shù),結(jié)合SAS和R等專業(yè)軟件進(jìn)行數(shù)據(jù)編程,確保分析結(jié)果精準(zhǔn)可靠。
?
實(shí)時分析支持劑量爬坡:通過實(shí)時數(shù)據(jù)分析,為SMC會議提供科學(xué)依據(jù),優(yōu)化臨床試驗(yàn)設(shè)計(jì)。
?
臨床藥理學(xué)研究設(shè)計(jì)與方案撰寫:基于客戶需求,定制化設(shè)計(jì)研究方案,確??茖W(xué)性和合規(guī)性。
?
完整PK/PD統(tǒng)計(jì)分析及CSR撰寫:提供生物分析檢測到統(tǒng)計(jì)分析報告生成的一站式服務(wù),確保高效交付。
平臺配備資深的臨床藥理專家、專業(yè)統(tǒng)計(jì)師及統(tǒng)計(jì)編程團(tuán)隊(duì),能夠?qū)y(tǒng)計(jì)分析報告中的數(shù)據(jù)進(jìn)行深度解讀,提供專業(yè)的洞見和建議。我們嚴(yán)格按照CDISC標(biāo)準(zhǔn)進(jìn)行統(tǒng)計(jì)編程,確保交付成果符合NMPA、FDA等國際監(jiān)管機(jī)構(gòu)的要求,助力藥物快速通過審批。
PART 08
我們的優(yōu)勢
● 在生物大分子領(lǐng)域,我們擁有豐富的PK統(tǒng)計(jì)分析經(jīng)驗(yàn),涵蓋 CAR-T細(xì)胞療法、單抗、雙抗、ADC(抗體藥物偶聯(lián)物)等藥物類型,能夠精準(zhǔn)分析其非線性動力學(xué)特征、靶點(diǎn)介導(dǎo)的藥物處置(TMDD)等特殊機(jī)制。
● 對小分子藥物,我們深入分析其吸收、分布、代謝和排泄(ADME)特性,全面評估其藥代動力學(xué)行為。
熟練使用 SAS 和 R 進(jìn)行數(shù)據(jù)編程,生成高度定制化的高質(zhì)量圖表,相比 WinNonlin 的基礎(chǔ)功能,R 和 SAS 在靈活性和可視化效果上更具優(yōu)勢,確保數(shù)據(jù)呈現(xiàn)清晰直觀。
憑借高效的團(tuán)隊(duì)協(xié)作和先進(jìn)的技術(shù)工具,我們能夠快速響應(yīng)客戶需求,提供高效、精準(zhǔn)的交付成果,助力藥物研發(fā)加速推進(jìn)。
參考文獻(xiàn):
[1] The PKNCA R Package
[2] Introduction to r2rtf
[3] Phoenix WinNonlin User’s Guide