贝叶斯剂量反应分析:模型与实例解析
1. 贝叶斯双曲模型概述
贝叶斯双曲模型在剂量反应分析中具有重要应用。在进行剂量反应分析时,我们重点关注该模型。对于连续响应变量,贝叶斯双曲模型可表示为:模型中的参数具有明确含义:
- (i) 是受试者 ID。
- (y_i) 是第 (i) 个患者观察到的连续响应变量。
- (e_0) 是基础效应,即剂量为 0mg 时的响应。
- (e_{max}) 是药物可产生的最大效应。
- (e_{d50}) 是产生 (e_{max}) 一半效应的剂量。
- (d_i) 是第 (i) 个患者的剂量水平。
- (\epsilon_i) 是第 (i) 个患者的随机误差,通常假设 (\epsilon_i) 相互独立且同分布,均值为 0,方差为 (\sigma^2),且服从正态分布。
对于二元结果,可使用 logit 链接将模型修改为广义双曲模型:
[ \text{logit}(p_i) = e_0 + \frac{e_{max} \cdot d_i}{e_{d50} + d_i} ]
其中 (p_i) 是观察到的响应率。
2. 连续终点分析实例
2.1 每组 75 名患者的哮喘试验
2.1.1 试验背景
在一项哮喘的 IIb 期研究中,主要关注的终点是 FEV1(1 秒用力呼气量)。该终点具有连续性且可假设服从正态分布,并且观察其变化所需的随访时间比典型的 III 期恶化终点短。此前,申办方进行了两项 IIa 期研究,一项测试了最大耐受剂量(MTD)的效果,另一项测试了接近 MTD 的剂量和低剂量,这些研究让我们对模型参数有了一定了解。
2.1.2 先验假设
基于之前的研究,我们对参数设定了先验分布:
prior e0: ~normal(mean=0, precision=10);
prior emax: ~normal(mean=0.20, precision=10);
prior tau: ~gamma(shape=0.001, scale=0.001);
prior lned50: ~normal(mean=0.69, precision=0.4);
由于对最大效应和 (e_{d50}) 有一定了解,我们对 (e_{max}) 采用了信息丰富的先验,对 (e_{d50}) 采用了模糊信息先验。在贝叶斯分析中,我们对精度 (\tau) 进行建模,而不是方差。
2.1.3 模拟数据代码
以下是模拟数据的代码:
%macro conemaxsim(ntrt=,r0=,r1=,r2=,r3=,r4=,r5=,r6=,r7=,r8=,
npergrp=,pdrop=,seed=);
data sims (keep = subject treatment dose response);
format treatment $8.;
subject = 0;
%do trt = 0 %to &ntrt;
do i = 1 to &npergrp;
subject = subject + 1;
if &trt = 0 then do;
treatment = "Placebo";
dose = 0;
end;
else do;
treatment = "Active";
dose = 3**(&trt -1);
end;
response = 0.35*rannor(floor(&seed)) + &&r&trt;
dropout = ranbin(floor(&seed), 1, &pdrop);
if dropout = 0 then output;
end;
%end;
run;
proc sort data = sims;
by dose;
run;
proc means data = sims;
var response;
output out=sumstat mean=mean sum = sum n=n std=sd;
by dose;
run;
data sumstat(keep = mean dose n sd);
set sumstat;
run;
%mend;
%conemaxsim(ntrt=5, r0=0.02, r1=0.075, r2=.10, r3=.16, r4=.20, r5=.25,
npergrp=75, pdrop=.10, seed=35123);
2.1.4 剂量总结
模拟得到的剂量总结数据如下:
| 剂量 | N | 均值 | 标准差 |
| — | — | — | — |
| 0 | 62 | 0.011 | 0.38 |
| 1 | 74 | 0.091 | 0.36 |
| 3 | 69 | 0.093 | 0.35 |
| 9 | 70 | 0.122 | 0.34 |
| 27 | 67 | 0.215 | 0.35 |
| 81 | 67 | 0.246 | 0.39 |
2.1.5 贝叶斯分析代码
使用
proc mcmc
进行贝叶斯分析的代码如下:
/** Proc MCMC syntax sets the data set to output posterior summaries, sets
number of monte carlo iterations along with the seed, parameters to monitor,
plots to monitor autocorrelation and thining ***/
proc mcmc data = sims outpost = emax_out nmc = 50000 nbi = 1000 seed = 3746
monitor = (_parms_ var_subj std_subj ed50 lned50)
nthin = 3 stats(percent=2.5 5 10 15 50 75 95 97.5) dic;
ods output PostSummaries=summaries PostIntervals=intervals;
parm e0 emax tau lned50; /** sets parameters **/
/** Setting prior for each parameter ***/
prior e0~normal(mean=0, precision=10);
prior emax~normal(mean=0.20, precision=10);
prior tau ~gamma(shape=0.001, scale=0.001);
prior lned50 ~normal(mean=0.69, precision=0.4);
beginnodata;
/** Setting residual variance ***/
var_subj = 1/tau;
std_subj = sqrt(var_subj);
/** Ed50 ***/
ed50 = exp(lned50);
/** Calculating the posterior predictive distribution ***/
Preddist outpred=predout nsim=5000 covariates=Sumstat;
endnodata;
mu = e0 + (emax*dose)/(ed50 + dose);
model response ~ normal(mean=mu, precision=tau );
title;
run;
2.1.6 结果分析
通过分析,(e_{max}) 的后验均值(标准差)估计为 0.21(0.22),表明药物的最大效应约为 0.21。(e_{d50}) 的后验均值(标准差)约为 22.04(0.12),但该估计的变异性较大。由于 (e_{d50}) 分布呈偏态,中位数 2.29 似乎是更现实的估计值。
2.2 每组 100 名患者的哮喘试验
2.2.1 试验背景
假设申办方未进行该实验药物的 IIa 期研究,仅依据临床前数据来设定先验分布。由于缺乏临床数据,临床前数据在考虑一定不确定性后被用作扩散先验。
2.2.2 模拟数据及先验设定
模拟数据代码与上例类似,只是每组计划样本量变为 100,种子改变。新的先验设定如下:
prior e0 ~normal(mean=0, precision=.01);
prior emax ~normal(mean=0.15, precision=1);
prior tau ~ gamma(shape=0.001, scale=0.001);
prior ed50 ~ uniform(0, 20);
2.2.3 剂量总结
模拟得到的剂量总结数据如下:
| 剂量 | N | 均值 | 标准差 |
| — | — | — | — |
| 0 | 87 | 0.008 | 0.29 |
| 1 | 93 | 0.080 | 0.34 |
| 3 | 89 | 0.064 | 0.33 |
| 9 | 96 | 0.138 | 0.38 |
| 27 | 95 | 0.234 | 0.35 |
| 81 | 90 | 0.236 | 0.37 |
2.2.4 贝叶斯分析代码
%conemaxsim(ntrt=5, r0=0.02, r1=0.075, r2=.10, r3=.16, r4=.20, r5=.25,
npergrp=100,pdrop=.10,seed=9865);
proc mcmc data = sims outpost = emax_out nmc = 80000 nbi = 1000 seed = 3746
monitor = (_parms_ var_subj std_subj ed50) nthin =3
stats(percent=2.5 5 10 15 50 95 97.5) dic;
ods output PostSummaries=summaries PostIntervals=intervals;
parm e0 emax tau ed50; /** sets parameters **/
/** Setting prior for each parameter ***/
prior e0 ~normal(mean=0, precision=.01);
prior emax ~normal(mean=0.15, precision=1);
prior tau ~ gamma(shape=0.001, scale=0.001);
prior ed50 ~ uniform(0, 20);
beginnodata;
/** Setting residual variance ***/
var_subj = 1/tau;
std_subj = sqrt(var_subj);
/** Calculating mean for each dose ***/
Preddist outpred=predout nsim=5000 covariates=Sumstat;
Endnodata;
mu = e0 + (emax*dose)/(ed50 + dose);
model response ~ normal(mean=mu, precision=tau);
title;
run;
2.2.5 结果对比
与上例相比,除 (e_{d50}) 外,(e_0) 和 (e_{max}) 的均值估计相当。(e_{d50}) 的均值估计从 22.04(75 名患者/组)变为 10.37(100 名患者/组)。不同的 (e_{d50}) 先验设定会对结果产生显著影响,这表明先验可能会影响结果,因此在选择先验时需要谨慎讨论并理解其临床终点或生物学依据。
3. 二元终点分析实例
3.1 试验背景
在系统性红斑狼疮(SLE)的 IIb 期研究中,使用系统性红斑狼疮应答者指数(SRI)作为主要终点。该终点为复合二元终点,受试者需满足三个标准才能被视为应答者。研究计划包括三个活性剂量组和一个安慰剂组,每组 60 名受试者。
3.2 先验设定
- 对于 (e_0),基于之前研究中安慰剂受试者的 SRI 应答率 0.388,使用 logit(0.388) 作为信息丰富的正态先验的中心趋势估计,方差为 4。
- 对于 (e_{max}),采用非信息先验,均值为 0,标准差与 (e_0) 相同。
- 对于 (e_{d50}),由于信息仅来自非临床研究,使用均匀分布 (0, 12) 作为非信息先验。
3.3 模拟数据代码
%macro binemaxsim(ntrt=,p0=,p1=,p2=,p3=,p4=,p5=,p6=,p7=,p8=,npergrp=,pdrop=,seed=);
data sims (keep = subject treatment dose response);
format treatment $8.;
subject = 0;
%do trt = 0 %to &ntrt;
do i = 1 to &npergrp;
subject = subject + 1;
if &trt = 0 then do;
treatment = "Placebo";
dose = 0;
end;
else do;
treatment = "Active";
dose = 3**(&trt -1);
end;
response = ranbin(floor(&seed), 1, &&p&trt);
dropout = ranbin(floor(&seed), 1, &pdrop);
if dropout = 0 then output;
end;
%end;
run;
proc freq data = sims noprint;
table response * dose / norow nopercent out=sum_dt outpct;
run;
data sum_dt (keep = response dose count total pct_col);
set sum_dt;
total = round((count / pct_col)*100,1);
if response = 1;
run;
%mend;
%binemaxsim(ntrt=3,p0=.35,p1=.4,p2=.5,p3=.55,npergrp=60,pdrop=.15, seed=1234);
3.4 剂量总结
| 剂量 | 响应率 | 百分比 |
|---|---|---|
| 0 | 10/46 | 21.7 |
| 1 | 21/52 | 40.4 |
| 3 | 25/51 | 49.0 |
| 9 | 24/49 | 49.0 |
3.5 贝叶斯分析代码
proc mcmc data = sum_dt outpost = emax_out nmc = 150000 nbi = 10000 seed = 123456
monitor = (_parms_ ed50 preddose1 preddose3 preddose9 pipred0 pipred1 pipred3
pipred9) stats(percent = 2.5 5 10 50 90 95 97.5)=(interval summary);
ods output PostIntervals = intervals;
ods output PostSummaries = summaries;
parm e0 emax ed50;
prior e0 ~normal(mean=-0.45,var=4);
prior emax ~normal(mean=0,var=4);
prior ed50 ~uniform(0,15);
beginnodata;
preddose1 = exp(e0+(emax*1)/(ed50+1))/(1+exp(e0+(emax*1)/(ed50+1)))
- exp(e0+(emax*0)/(ed50+0))/(1+exp(e0+(emax*0)/(ed50+0)));
preddose3 = exp(e0+(emax*3)/(ed50+3))/(1+exp(e0+(emax*3)/(ed50+3)))
- exp(e0+(emax*0)/(ed50+0))/(1+exp(e0+(emax*0)/(ed50+0)));
preddose9 = exp(e0+(emax*9)/(ed50+9))/(1+exp(e0+(emax*9)/(ed50+9)))
- exp(e0+(emax*0)/(ed50+0))/(1+exp(e0+(emax*0)/(ed50+0)));
pipred0 = exp(e0+(emax*0)/(ed50+0))/(1+exp(e0+(emax*0)/(ed50+0)));
pipred1 = exp(e0+(emax*1)/(ed50+1))/(1+exp(e0+(emax*1)/(ed50+1)));
pipred3 = exp(e0+(emax*3)/(ed50+3))/(1+exp(e0+(emax*3)/(ed50+3)));
pipred9 = exp(e0+(emax*9)/(ed50+9))/(1+exp(e0+(emax*9)/(ed50+9)));
endnodata;
eta = e0 + ((emax*dose)/ (ed50+dose));
expeta = exp(eta);
p = expeta/(1+expeta);
model count ~ binomial(total, p);
run;
3.6 结果分析
- (e_0) 和 (e_{max}) 的后验估计较为稳定,而 (e_{d50}) 的估计可能不太稳定。
- (e_{d50}) 的后验均值(标准差)估计为 4.99mg(4.33),95% 可信区间为 (0.16, 14.29),这可能意味着研究未覆盖感兴趣的剂量范围。
- 不同剂量的安慰剂校正效应分别为:1mg 剂量约 8.7%(95% 可信区间 1.1 - 24.4),3mg 剂量 15.5%(95% 可信区间 2.7 - 32.2),9mg 剂量 23.3%(95% 可信区间 5.1 - 40.5)。
3.7 敏感性分析
为了更好地理解先验分布和模型结构对结果的影响,应进行敏感性分析,例如改变先验分布或运行多个链以测试收敛性。
3.8 结果可视化代码
proc sort data = summaries;
by parameter;
run;
proc sort data = intervals;
by parameter;
run;
data combined (drop=alpha);
merge summaries intervals;
by parameter;
run;
data _plot;
retain logite0 .;
set combined;
if parameter = 'e0' then do;
logite0 = mean;
e0 = exp(mean)/(exp(mean)+1);
call symput("e_0", put(e0, best8.));
end;
else if parameter = 'ed50' then call symput("ed_50", put(mean, best8.));
else if parameter = 'emax' then do;
temp = (exp(mean+logite0)/(exp(mean+logite0)+1));
call symput("maxeffect", put(temp, best8.));
end;
else if parameter = 'pipred0' then dose = 0;
else if parameter = 'pipred1' then dose = 1;
else if parameter = 'pipred3' then dose = 3;
else if parameter = 'pipred9' then dose = 9;
if parameter in ('pipred0', 'pipred1', 'pipred3', 'pipred9');
run;
data plot_dt;
label pct_col = "Observed Proportion";
label mean = "Posterior Proportion";
merge _plot sum_dt;
by dose;
dose_jit = dose + 0.1;
pct_col = pct_col / 100;
run;
proc sgplot data = plot_dt;
*title1 "Observed and Emax Posterior Estimates for SRI Response";
*title2 "with 95% Highest Posterior Density Intervals";
scatter x = dose_jit y = pct_col /
markerattrs=(symbol=circlefilled color=red) name="scat1";
scatter x = dose y = mean / yerrorlower = hpdlower yerrorupper = hpdupper
markerattrs=(symbol=circlefilled color=black)
errorbarattrs=(color=black) name = "scat2";
series x = dose y = mean / lineattrs=(pattern=solid color = black);
xaxis values = (0 1 3 9 ) label = "Dose" offsetmin=0.03 offsetmax=0.03;
yaxis values = (0 to 1 by 0.2) label = "Proportion of SRI Responders";
refline &e_0 &maxeffect / axis = y;
keylegend "scat1" "scat2" / title = " " noborder;
run;
4. 总结
通过以上实例可以看出,贝叶斯剂量反应分析在不同类型的临床试验中具有重要应用。在进行分析时,合理选择先验分布至关重要,因为先验可能会对结果产生显著影响。同时,对模型参数的稳定性进行评估和敏感性分析有助于更好地理解模型结论的稳健性。在实际应用中,需要根据具体的试验背景和数据特点,谨慎选择模型和先验,以获得准确可靠的结果。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(确定分析类型):::process
B --> C{连续终点?}:::decision
C -- 是 --> D(使用贝叶斯双曲模型):::process
C -- 否 --> E{二元终点?}:::decision
E -- 是 --> F(使用广义双曲模型):::process
E -- 否 --> G(选择其他模型):::process
D --> H(设定先验分布):::process
F --> H
G --> H
H --> I(模拟数据):::process
I --> J(进行贝叶斯分析):::process
J --> K(分析结果):::process
K --> L(敏感性分析):::process
L --> M(结果可视化):::process
M --> N([结束]):::startend
以上流程图展示了贝叶斯剂量反应分析的整体流程,从确定分析类型开始,经过模型选择、先验设定、数据模拟、分析、结果评估和可视化等步骤,最终完成整个分析过程。在实际应用中,每个步骤都需要根据具体情况进行仔细考虑和操作。
5. 贝叶斯剂量反应分析关键要点总结
5.1 模型选择
- 对于连续终点,可使用贝叶斯双曲模型。其公式为 (y_i = e_0 + \frac{e_{max} \cdot d_i}{e_{d50} + d_i} + \epsilon_i),其中各参数含义明确,(\epsilon_i) 通常假设为独立同分布的正态随机误差。
- 对于二元终点,采用广义双曲模型,通过 logit 链接将其转换为 ( \text{logit}(p_i) = e_0 + \frac{e_{max} \cdot d_i}{e_{d50} + d_i} ),其中 (p_i) 是观察到的响应率。
5.2 先验设定
- 先验分布的选择对结果有重要影响。在有临床数据的情况下,可以根据之前的研究结果设定信息丰富的先验;而在缺乏临床数据时,可使用扩散先验或非信息先验。
- 例如,在哮喘试验中,有 IIa 期研究数据时,对 (e_{max}) 采用信息丰富的先验,对 (e_{d50}) 采用模糊信息先验;而没有 IIa 期研究数据时,临床前数据在考虑不确定性后用作扩散先验。
- 在系统性红斑狼疮研究中,根据之前研究的安慰剂应答率为 (e_0) 设定信息丰富的先验,对 (e_{max}) 采用非信息先验,对 (e_{d50}) 因仅来自非临床研究使用均匀分布作为非信息先验。
5.3 数据模拟与分析
-
使用相应的宏代码进行数据模拟,如
conemaxsim用于连续终点的哮喘试验数据模拟,binemaxsim用于二元终点的系统性红斑狼疮试验数据模拟。 -
利用
proc mcmc进行贝叶斯分析,在分析过程中需要明确设定参数、先验分布、蒙特卡罗迭代次数、burn - in 样本数、thinning 率等。
5.4 结果评估
- 通过 trace 图和自相关图评估参数估计的稳定性和收敛性。如在系统性红斑狼疮研究中,(e_0) 和 (e_{max}) 的后验估计较稳定,而 (e_{d50}) 的估计可能不太稳定。
- 计算参数的后验均值、标准差、可信区间等统计量,以了解参数的估计值和变异性。例如,在哮喘试验中,不同样本量和先验设定下 (e_{d50}) 的估计值有较大差异。
5.5 敏感性分析
- 为了评估先验分布和模型结构对结果的影响,需要进行敏感性分析。可以通过改变先验分布或运行多个链来测试收敛性。例如,在哮喘试验中,不同的 (e_{d50}) 先验设定会对结果产生显著影响。
5.6 结果可视化
- 使用代码将结果进行可视化,如绘制观察比例、后验估计和 95% HPD 区间的图,有助于直观地理解模型结果。例如,在系统性红斑狼疮研究中,通过绘制图可以看出整个剂量范围可能未被充分探索。
6. 操作步骤总结
6.1 连续终点分析操作步骤
- 确定试验背景和参数先验 :根据之前的研究确定模型参数 (e_0)、(e_{max})、(\tau)、(e_{d50}) 的先验分布。
-
模拟数据
:使用
conemaxsim宏代码模拟数据,设置相关参数如试验组数、每组样本量、各剂量响应值、脱落率、种子等。 -
进行贝叶斯分析
:使用
proc mcmc语句,指定输入数据集、输出数据集、蒙特卡罗迭代次数、burn - in 样本数、thinning 率、要监控的参数等,同时设置参数先验和模型分布。 - 结果评估与分析 :查看参数的后验均值、标准差、可信区间等统计量,通过 trace 图和自相关图评估收敛性。
- 敏感性分析 :改变先验分布或运行多个链进行敏感性分析。
- 结果可视化 :根据需要编写代码将结果可视化。
6.2 二元终点分析操作步骤
- 确定试验背景和参数先验 :根据之前的研究和非临床数据确定 (e_0)、(e_{max})、(e_{d50}) 的先验分布。
-
模拟数据
:使用
binemaxsim宏代码模拟数据,设置试验组数、每组样本量、各剂量响应率、脱落率、种子等。 -
进行贝叶斯分析
:使用
proc mcmc语句,指定相关参数和选项,设置参数先验和模型分布。 - 结果评估与分析 :查看参数的后验估计,通过 trace 图和自相关图评估参数稳定性。
- 敏感性分析 :改变先验分布或运行多个链进行敏感性分析。
- 结果可视化 :编写代码绘制观察比例、后验估计和 95% HPD 区间的图。
7. 注意事项
7.1 先验选择
- 先验分布的选择需要谨慎,应充分考虑临床数据和生物学依据。不同的先验设定可能会对结果产生显著影响,如在哮喘试验中 (e_{d50}) 不同先验导致估计值差异较大。
- 在缺乏临床数据时,使用扩散先验或非信息先验,但要注意其对结果的影响。
7.2 参数稳定性
- 对于某些参数,如 (e_{d50}),其估计可能不太稳定。可以通过使用对数变换、选择不同的先验分布等方法来提高估计的稳定性。
- 在评估参数稳定性时,要综合考虑 trace 图、自相关图和后验密度的形状。
7.3 剂量范围
- 研究的剂量范围可能会影响模型的准确性。如果实际的 (e_{d50}) 超出了研究的剂量范围,模型可能无法准确反映真实的剂量 - 反应关系。例如,在系统性红斑狼疮研究中,(e_{d50}) 的估计可能表明研究未覆盖感兴趣的剂量范围。
7.4 敏感性分析
- 敏感性分析是评估模型稳健性的重要手段。通过改变先验分布或运行多个链,可以了解先验和模型结构对结果的影响。
8. 总结与展望
贝叶斯剂量反应分析在临床试验中具有重要应用价值,能够充分利用先验信息和当前数据进行综合分析。通过合理选择模型和先验分布,进行数据模拟、分析、结果评估和可视化等操作,可以获得准确可靠的结果。
然而,在实际应用中还存在一些挑战,如先验选择的主观性、参数估计的稳定性等。未来的研究可以进一步探索更客观的先验选择方法,提高参数估计的准确性和稳定性。同时,随着数据量的增加和计算能力的提升,贝叶斯剂量反应分析有望在更多领域得到应用和发展。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始新分析]):::startend --> B(回顾历史数据):::process
B --> C{有足够临床数据?}:::decision
C -- 是 --> D(设定信息丰富先验):::process
C -- 否 --> E(设定扩散或非信息先验):::process
D --> F(确定模型类型):::process
E --> F
F --> G(模拟数据):::process
G --> H(进行贝叶斯分析):::process
H --> I(评估参数稳定性):::process
I --> J{参数稳定?}:::decision
J -- 是 --> K(分析结果):::process
J -- 否 --> L(调整先验或模型):::process
L --> G
K --> M(敏感性分析):::process
M --> N(结果可视化):::process
N --> O([结束分析]):::startend
以上流程图展示了进行新的贝叶斯剂量反应分析的流程,从回顾历史数据开始,根据数据情况设定先验,经过模型选择、数据模拟、分析、参数稳定性评估、结果分析、敏感性分析和可视化等步骤,若参数不稳定则需要调整先验或模型重新进行分析。在实际应用中,每个步骤都需要仔细操作,以确保分析结果的准确性和可靠性。
超级会员免费看
74

被折叠的 条评论
为什么被折叠?



