20、贝叶斯模型与自适应随机化在临床试验中的应用

贝叶斯与自适应随机化在临床试验中的应用

贝叶斯模型与自适应随机化在临床试验中的应用

1. 贝叶斯模型在剂量反应分析中的应用

贝叶斯模型是一种灵活的工具,可用于更好地理解剂量反应关系。在某些情况下,当传统的最大似然模型无法收敛时,贝叶斯模型可能会收敛。而且,即使最大似然模型收敛,其参数估计值也可能毫无意义。在这些情况下,贝叶斯分析可以对模型参数进行稳健估计。

不过,和所有贝叶斯分析一样,其结果依赖于假设的先验分布。因此,需要仔细考虑先验分布的中心和范围。对于临床试验而言,先验范围应该具有生物学和/或临床意义。在样本量较小或剂量较少的研究中,基于频率论的估计可能无法得到稳健的结果,此时可以探索使用贝叶斯模型,看是否能改善收敛性。

贝叶斯推断特别适合临床试验的开发,因为可以将先前的临床和临床前研究纳入最近试验效果的估计中。如果不同试验的效果存在差异,则可能需要进行协调。此外,能够改变先验信息也为评估当前研究结论的稳健性提供了机会。

2. 自适应随机化概述

随机对照临床试验是区分不同治疗效果的金标准。为了确保对不同治疗进行客观比较,患者的分配应该是随机或不可预测的,这样才能平衡已知和未知的预后因素以及潜在的混杂因素。在实践中,应尽可能通过随机化和盲法(包括单盲或双盲方案)来防止选择偏倚。单盲研究只对患者隐瞒治疗身份,而双盲研究则对患者和临床医生都隐瞒治疗身份。

大多数临床试验试图通过限制各治疗组的分配概率相等来平衡治疗分配,但这可能既无效又不符合伦理。自适应随机化方案根据试验中积累的信息修改治疗分配概率,如今越来越普遍。随机对照临床试验的设计受多种因素影响,一方面,需要快速区分不同治疗的效果,以便更多试验外的患者能更快从更有效的治疗中受益,这就要求患者在各比较组中的分配(近乎)平衡;另一方面,每个试验参与者都应该接受最有效的治疗以保障自身健康,患者也希望被分配到更有益的治疗组,这通常会导致分配概率偏向潜在更好的治疗。因此,随机对照临床试验需要在个体伦理和集体伦理之间取得平衡。

随机化可以有效减少偏倚和混杂效应。具有良好平衡预后变量的临床试验可以提供更高效、更清晰的比较。一般来说,根据研究目标,随机化可以分为以下五种主要类型:
| 随机化类型 | 描述 | 示例 |
| — | — | — |
| 简单随机化 | 固定随机化概率,但可能导致治疗组之间不平衡 | 等概率随机化 |
| 受限随机化 | 旨在平衡各治疗组的受试者数量 | 置换区组设计、偏币设计 |
| 协变量自适应随机化(CAR) | 希望在选定的协变量上平衡治疗分配 | 分层方案、最小化协变量自适应随机化、基于模型的最优协变量自适应随机化 |
| 响应自适应随机化(RAR) | 允许分配概率随试验进行而变化,增加患者被分配到更好治疗组的机会 | 赢者继续规则、最优响应自适应随机化、贝叶斯响应自适应随机化 |
| 协变量调整的响应自适应随机化 | 结合了CAR和RAR,使随机化概率偏向潜在更好的治疗,同时控制患者异质性 | 贝叶斯协变量调整的响应自适应随机化 |

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A([随机对照临床试验]):::startend --> B(简单随机化):::process
    A --> C(受限随机化):::process
    A --> D(协变量自适应随机化):::process
    A --> E(响应自适应随机化):::process
    A --> F(协变量调整的响应自适应随机化):::process

3. 简单随机化

简单随机化是最基本的随机化方法,它在整个试验过程中固定分配概率,不考虑历史分配和响应信息。分配概率可以在各治疗组之间相等或不同。对于有多个治疗组的试验,在等概率随机化的情况下,每个试验参与者被简单地以相同概率分配到其中一个治疗组。如果认为某种治疗更有益,或者研究人员对某种特定药物更感兴趣,可以将更多患者随机分配到该治疗组,例如,新疗法与标准治疗的分配比例可以指定为2∶1或3∶1。

在SAS中,可以使用 % SimpleRandomize 宏来设计简单随机化试验。输入变量包括 n (试验的总样本量)和 groupdata (存储治疗标识及其相应分配比例的数据集)。

以下是一个三臂试验(治疗A、B和C,分配比例为1:1:2)随机化100名患者的示例代码:

%macro SimpleRandomize(n,groupdata, seed);
   proc iml;
      use &groupdata.;
      read all;
      call randseed(&seed);
      u=j(&n,1);
      prob=ratio/sum(ratio);
      agroup=j(&n,1);
      call randgen(u, "Uniform");
      cprob = j(nrow(group),1);
      do j=1 to nrow(group);
         cprob[j]=sum(prob[1:j]);
      end;
      do j=1 to &n;
         k=1;
         do while (u[j]>cprob[k]);
            k=k+1;
         end;
         agroup[j]=k;
      end;
      group=group[agroup];
      create SimpleRandomization var {group}; /** create data set **/
      append; 
   quit;
   proc print data=SimpleRandomization;
   run;
   proc freq data=SimpleRandomization;
      tables group;
   run; 
%mend SimpleRandomize;

data ThreeArm;
   input group $ ratio;
   datalines;
   A 1
   B 1
   C 2
   ;
run;

%SimpleRandomize(n=100,groupdata=ThreeArm,seed=6);

该宏生成100名受试者的治疗分配序列,使用 proc freq 可以显示治疗分配的频率:
| 组 | 频率 | 百分比 | 累积频率 | 累积百分比 |
| — | — | — | — | — |
| A | 19 | 19.00 | 19 | 19.00 |
| B | 22 | 22.00 | 41 | 41.00 |
| C | 59 | 59.00 | 100 | 100.00 |

4. 受限随机化

4.1 置换区组随机化

在等概率分配的情况下,各治疗组的患者数量应该相近。然而,简单随机化通常无法保证不同治疗组之间的完美平衡,尤其是在样本量较小时。相比之下,受限随机化旨在使每个治疗组的受试者数量相等,置换区组随机化是受限随机化中最常用的技术。

考虑一系列区组,每个区组包含预先指定数量的治疗分配,这些分配以随机顺序排列。例如,在一个三臂随机试验(治疗A、B和C)中,使用区组大小为3的可能置换序列有:ABC、ACB、BAC、BCA、CAB、CBA。在随机化步骤中,随机选择一个区组,假设选择了第三个区组BAC,这意味着该区组的第一个患者接受治疗B,第二个接受治疗A,第三个接受治疗C。这种方法确保每个区组内每个治疗组恰好分配到一名患者,从而保证各治疗组分配的患者数量相同。置换区组随机化在多中心试验中特别有用,它可以平衡每个研究中心的治疗分配,有助于理解中心间的效应。

可以使用 proc plan 生成基于置换区组随机化的整个随机化方案。例如,在一个两臂试验中,有8名患者需要进行治疗分配,区组大小为4,有6种可能的区组模式。调用 proc plan 时,需要指定区组数量、区组大小和治疗数量,示例代码如下:

proc plan seed=3;
   factors Block=2 random Sequence=4 ordered / noprint;
   treatments Treatment=4;
   output out=PermutedBlock Treatment cvals=('A' 'A' 'B' 'B') random;
run; 

proc sort data = PermutedBlock;
   by block sequence;
run;

proc print data = PermutedBlock;
run;

该置换区组设计的输出表示8名患者的治疗分配情况:
| 区组 | 序列 | 治疗 |
| — | — | — |
| 1 | 1 | A |
| 1 | 2 | B |
| 1 | 3 | B |
| 1 | 4 | A |
| 2 | 1 | B |
| 2 | 2 | B |
| 2 | 3 | A |
| 2 | 4 | A |

然而,置换区组随机化的一个缺点是,如果从业者知道区组大小,可能会引入潜在的选择偏倚。只要跟踪了之前的治疗分配情况,在每个区组结束时,就可以知道该区组最后一名参与者的治疗分配。为了防止这种选择偏倚,可以自然地随机混合不同大小的区组,使区组大小不可预测。

4.2 偏币设计

另一种著名的受限随机化方法是偏币设计(BCD),其目的是在各治疗组之间提供近似平衡。BCD的每一步都倾向于分配到目前在试验中代表性不足的治疗组。例如,设$n_1$和$n_2$分别表示分配到第1组和第2组的受试者数量,$p$是预先指定的第1组的随机化概率。随着试验的进行,新患者分配到第1组的概率为:
$Pr(\text{患者分配到第1组}) = \frac{1}{2} - \frac{n_1 - n_2}{2(n_1 + n_2)}$

有多种方法可以指定$p$,Efron推荐$p = \frac{1}{2}$,这样试验可以通过抛掷偏币简单进行。基于常数$p$的治疗分配无法反映两组之间的不平衡程度,为了考虑样本量信息,Wei推荐第1组的分配概率为:
$Pr(\text{患者分配到第1组}) = \frac{1}{2} - \frac{n_1 - n_2}{2(n_1 + n_2)}$
其中$n_1$和$n_2$分别是两组的样本量。进一步地,Antognini和Giovagnoli提出了一种可调整的BCD,以纠正患者分布使其趋于平衡,两组越不平衡,就越会施加更大的力量将样本拉回平衡。

% BCDrandomize 宏实现了Wei的BCD方法,用于为每个新患者生成治疗分配。用户需要输入每个组中累积的患者数量($n_1$和$n_2$)。在一个两臂试验开始时,没有招募任何患者,以下代码以相等概率将第一名患者随机分配到其中一组,碰巧第一名患者被分配到治疗B:

/* f(x)=1-x <- probability of assignment to A */
/* g(x)=x <- probability of assignment to B */
/* where x = (diff in num of subjects in each trt)/(total num of subjects) */
%macro BCDrandomize(n1, n2, seed);
   data Assignment;
   %let numer=%EVAL(&n1-&n2);
   %let denom=%EVAL(&n1+&n2);
   /* assign subject to B with probability x, A with prob 1-x */
   %if %SYSEVALF(&n1=0) & %SYSEVALF(&n2=0) %then %let DiffRatio = %SYSEVALF(0);
   %else %let DiffRatio = %SYSEVALF(&numer/&denom);
   %let Allocprob = %SYSEVALF(1/2-&DiffRatio/2);
   %let RandNum = %SYSFUNC(ranuni(&seed)); *uniform[0,1] random var;
   %if %SYSEVALF(&RandNum <= &Allocprob) %then %let Assign=A;
   %else %let Assign=B;
   /* create subject num var */
   %let AssignNum = %EVAL(&n1+&n2+1);
   groupA = &n1;
   groupB = &n2;
   allop = &Allocprob;
   newGroup = "&Assign";
   label groupA = "Number in arm A"
   groupB = "Number in arm B"
   allop = "Allocation probability to arm A"
   newGroup = "Next assignment";
   run;
   proc print data=Assignment label noobs; 
   run;
%mend BCDrandomize;

%BCDrandomize(n1=0,n2=0,seed=123);
%BCDrandomize(n1=5,n2=10,seed=123);

新试验的输出如下:
| 第A组人数 | 第B组人数 | 分配到A组的概率 | 下一个分配 |
| — | — | — | — |
| 0 | 0 | 0.5 | B |

随着试验的进行,BCD可以自适应地改变分配比例。假设试验已经将5名患者分配到A组,10名患者分配到B组,再次应用 % BCDrandomize 宏的输出如下:
| 第A组人数 | 第B组人数 | 分配到A组的概率 | 下一个分配 |
| — | — | — | — |
| 5 | 10 | 0.66667 | A |

5. 协变量自适应随机化

5.1 分层随机化

在随机化之前,通常会收集一些基线预后因素(协变量),如年龄、性别和疾病严重程度,这些因素可能对治疗结果有重要影响。因此,希望在这些协变量上平衡治疗分配,以便进行有效和高效的治疗比较。

通过分层是平衡重要协变量上治疗分配的最简单方法。如图所示,首先根据试验参与者的预后变量值将其分组到互斥的层中,然后在每个层内将他们随机分配到每个治疗组。如果层数较少,分层随机化可以在各种协变量组合上取得平衡;然而,如果层数相对于受试者数量较多,分层可能就没有意义了。由于层数随着分层因素的数量成倍增加,一些层可能会变得非常稀疏甚至为空,这反过来可能会导致治疗组之间出现相当大的不平衡。

可以使用 proc plan 设计分层随机化程序。假设一个试验招募了24名患者,需要根据两个预后因素(性别和血压)对患者进行分层。性别因素有两个水平(男性或女性),血压有3个水平(高、正常和低)。结合置换区组随机化,基于这两个因素的分层会产生6个互斥的组。如果区组大小为4,以下示例代码的输出将为这样的试验生成一个分层区组随机化方案:

proc plan seed=123;
   factors Block=1 random Gender=2 ordered Pressure=3 ordered Sequence=4 ordered/noprint;
   treatments Treatment=4 random;
   output out=StratifiedRandomization Gender cvals=('Male' 'Female') ordered
       Pressure cvals=('High' 'Normal' 'Low') ordered
       Treatment cvals=('A' 'A' 'B' 'B') random;
run;

proc print data = StratifiedRandomization;
run;

分层随机化的输出结果如下:
| 性别 | 血压 | 序列 | 治疗 |
| — | — | — | — |
| 男性 | 高 | 1 | A |
| 男性 | 高 | 2 | B |
| 男性 | 高 | 3 | A |
| 男性 | 高 | 4 | B |
| 男性 | 正常 | 1 | A |
| 男性 | 正常 | 2 | B |
| 男性 | 正常 | 3 | A |
| 男性 | 正常 | 4 | B |
| 男性 | 低 | 1 | B |
| 男性 | 低 | 2 | B |
| 男性 | 低 | 3 | A |
| 男性 | 低 | 4 | A |
| 女性 | 高 | 1 | B |
| 女性 | 高 | 2 | B |
| 女性 | 高 | 3 | A |
| 女性 | 高 | 4 | A |
| 女性 | 正常 | 1 | B |
| 女性 | 正常 | 2 | A |
| 女性 | 正常 | 3 | A |
| 女性 | 正常 | 4 | B |
| 女性 | 低 | 1 | B |
| 女性 | 低 | 2 | B |
| 女性 | 低 | 3 | A |
| 女性 | 低 | 4 | A |

5.2 基于最小化的协变量自适应随机化

当试验中有大量预后因素时,很难在所有协变量上实现总体平衡。Taves和Pocock及Simon提出了最小化方法(也称为动态分配、协变量自适应或调整随机化)用于顺序治疗分配。在随机化过程中,每个受试者的分配概率由治疗组之间当前的总体平衡情况决定。

具体来说,设$m$表示预后因素的总数,其中连续因素需要分类为有意义的有序水平。在两臂试验中,设$n_1$和$n_2$分别表示分配到第1组和第2组的受试者数量,则第$i$个因素的差异为$d_i = |n_{1i} - n_{2i}|$,其中$n_{1i}$和$n_{2i}$分别是第1组和第2组中第$i$个因素各水平的受试者数量。总体不平衡通过对每个因素的边际不平衡进行加权求和来衡量,即$I = \sum_{i=1}^{m} w_i d_i$,其中$w_i$是表征第$i$个因素重要性的权重。根据患者的先前分配情况,每个新患者更有可能被分配到导致总体不平衡最小的治疗组。

以下是一个说明如何在两个预后因素(性别和肿瘤分期)上实现总体平衡的示例。假设对性别和肿瘤分期赋予相等的权重$w_1 = w_2 = 1$,假设已经招募了40名受试者,下一个进入试验的是一名肿瘤分期为I期的男性患者。如果将这名新参与者分配到B组,两个治疗组之间的总体不平衡将最小化,而分配到A组则不然。因此,为了减少治疗分配的不平衡,这名受试者将以较大的概率(例如0.75)被分配到B组。

% MinimizationRandomize 宏执行最小化方法,用于顺序分配新招募的受试者。调用该宏时,用户需要指定四个输入参数:
1. TreatedPatients :包含已经分配治疗的患者信息的数据集,数据集的第一列表示每个患者的治疗,其余列对应预后因素,其值应为从1开始的离散整数。
2. FactorWeight :指定预后因素权重的数据集。
3. NewPatient :存储新患者协变量信息的数据集。
4. p :一个较大的概率($p > 0.5$),用于减少预后因素的不平衡。

以下代码使用 % MinimizationRandomize 宏分配三名新招募的受试者:一名肿瘤分期为I期的男性、一名肿瘤分期为II期的男性和一名肿瘤分期为II期的女性。这些受试者将以概率$p$被分配到导致不平衡较小的治疗组:

data FactorWeight;
   input w;
   datalines;
1
1
;
run;

%macro MinimizationRandomize(TreatedPatients,NewPatient,FactorWeight,p,seed);
   proc iml;
      use &TreatedPatients.;
      read all into X;
      use &TreatedPatients.;
      read all var {group};
      use &NewPatient.;
      read all into Y;
      use  &FactorWeight.;
      read all;
      call randseed(&seed);
      X=X//Y;
      imA=0;
      groupA=group//'A';
      do i=1 to ncol(X);
         do j=1 to max(X[,i]);
            imA=imA+w[i]*abs(sum(groupA[loc(X[,i]=j)]='A')
            -sum(groupA[loc(X[,i]=j)]='B'));
         end;
      end;
      imB=0;
      groupB=group//'B';
      do i=1 to ncol(X);
         do j=1 to max(X[,i]);
            imB=imB+w[i]*abs(sum(groupB[loc(X[,i]=j)]='A')
            -sum(groupB[loc(X[,i]=j)]='B'));
         end;
      end;
      print imA imB;
      u=1;
      call randgen(u, "Uniform");
      if (imA<=imB & u<=&p) then 
      call symput('newgroup','A');
      if (imA<=imB & u>&p) then 
      call symput('newgroup','B');
      if (imA>imB & u<=&p) then 
      call symput('newgroup','B');
      if (imA>imB & u>&p) then 
      call symput('newgroup','A');
      NextGroup=symget("newgroup");;
      print NextGroup;
   quit;

   data &NewPatient.;
      length group $ 1;
      group=symget("newgroup");
      set &NewPatient.;
   run;

   proc print data=&TreatedPatients.;
   run;

   data &TreatedPatients.;
      set &TreatedPatients. &Newpatient.;
   run;

   proc print data=&TreatedPatients.;
   run;
%mend MinimizationRandomize;

* 1st subject: male, tumor I;
data NewPatient;
   input gender tumorstage;
   datalines;
1 1
;
run;

%MinimizationRandomize(TreatedPatients,NewPatient,FactorWeight,p=0.75,seed=6);

* 2nd subject: male, tumor II;
data NewPatient;
   input gender tumorstage;
   datalines;
1 2
;
run;

%MinimizationRandomize(TreatedPatients,NewPatient,FactorWeight,p=0.75,seed=6);

* 3rd subject: female, tumor II;
data NewPatient;
   input gender tumorstage;
   datalines;
2 2
;
run;

%MinimizationRandomize(TreatedPatients,NewPatient,FactorWeight,p=0.75,seed=6);

该宏产生一组输出,首先提供新患者分配到A组和B组时的总体不平衡情况,然后根据最小化方法为新受试者建议一个治疗组,最后通过包含新患者的数据更新 TreatedPatients 数据集。以上示例的完整输出省略,随机化结果总结如下:
| 受试者 | 治疗 | 性别 | 肿瘤分期 | 分配到A组的不平衡 | 分配到B组的不平衡 |
| — | — | — | — | — | — |
| 1 | B | 男性 | 1 | 12 | 8 |
| 2 | A | 男性 | 2 | 8 | 8 |
| 3 | A | 女性 | 2 | 6 | 10 |

因此,为了最小化总体不平衡,第一名受试者应分配到治疗B组;对于第二名受试者,无论分配到治疗A组还是B组,总体不平衡相同,因此可以纯粹随机选择治疗;显然,第三名受试者应接受治疗A组以最小化总体不平衡。

5.3 基于模型的最优协变量自适应随机化

为了实现最小化方法,需要对连续协变量进行分类,但确定类别数量和相应的截断值通常是任意的。作为一种替代方法,可以开发一种最优随机化程序,使存在协变量时估计治疗效果的方差最小化。

具体来说,设$y_i$是第$i$个患者的结果,$x_i$是$d$维协变量(包括截距),$z_i$是治疗指标,若第$i$个患者被分配到治疗组,则$z_i = 1$,若分配到对照组,则$z_i = -1$。对于连续结果$y_i$,假设一个线性模型$y_i = \beta_0 + \beta_1 z_i + x_i^T \beta_2 + \epsilon_i$,其中$\epsilon_i$是服从均值为0、方差为$\sigma^2$的正态分布的随机误差,$\beta_0$、$\beta_1$和$\beta_2$是待估计的参数,$\beta_1$表示治疗效果。估计治疗效果的方差为$Var(\hat{\beta}_1) = \sigma^2 (Z^T M Z)^{-1}$,其中$Z$是$n \times 1$的治疗指标向量,$M = X (X^T X)^{-1} X^T$,$X$是$n \times d$的协变量矩阵。因此,最小化$Var(\hat{\beta}_1)$可以通过最小化损失函数$L = Z^T M Z$来实现,该损失函数可以解释为由于治疗分配效率低下而损失的单位数量。

假设已经将$n$名患者分配到两个治疗组,并且已经收集了第$n+1$名患者的协变量$x_{n+1}$。为了构建顺序随机化程序,第$n+1$名患者的治疗分配以高概率选择使损失$L$最小的方案。Atkinson声称分配规则取决于$R = x_{n+1}^T (X^T X)^{-1} X^T Z / n$。例如,第$n+1$名患者分配到治疗组的概率可以指定为$P(z_{n+1} = 1) = \frac{(1 - R)^{\gamma}}{(1 - R)^{\gamma} + (1 + R)^{\gamma}}$,其中$\gamma$是预先指定的调整参数,用于控制随机程度。显然,如果$\gamma = 0$,上述程序简化为等概率随机化;如果$\gamma \to \infty$,则变为确定性分配规则。通常,推荐$\gamma = 5$以在选择偏倚和损失之间取得平衡。

为了说明基于模型的最优协变量自适应随机化(CAR),使用 % ModelOptRandomize 宏根据不同的预后因素分配患者。用户需要输入先前治疗患者的数据集( TreatedPatients ),包括他们的协变量和治疗分配(最后一列),然后该宏调用基于模型的最优CAR根据新患者的预后因素( NewPatient )分配新患者。

考虑一个两臂试验(治疗A和B),三个重要的预后因素是性别、标准化血压和标准化损伤严重程度评分。假设已经招募了20名患者,又有三名受试者依次进入试验,他们的协变量如下所示。 % ModelOptRandomize 宏执行基于模型的最优CAR,检查这三名新患者的潜在治疗分配。一旦为新患者实施了基于模型的最优CAR, % ModelOptRandomize 宏将通过将新参与者的协变量连接到设计矩阵来更新试验数据集( TreatedPatients )。

data TreatedPatients;
   input Intercept Gender Pressure Severity Treatment;
   *Pressure: blood pressure;
   *Severity: Severity score;
   datalines;
1  0  1.16 -0.80  1
1  1  1.84  2.25  1
1  1  0.41 -1.38  0
1  0  0.99  1.12  1
1  1 -1.18 -0.30  0
1  1  1.47 -0.94  0
1  1 -1.16  0.24  1
1  1  1.92 -1.29  1
1  0  1.13 -0.77  0
1  1 -0.42  0.69  0
1  1 -0.17 -0.59  1
1  1 -0.73  1.22  1
1  1 -0.00 -0.59  0
1  1  1.26 -0.45  0
1  0 -0.48  2.23  1
1  1 -0.58 -2.29  0
1  1  0.06 -0.69  1
1  1 -0.09  1.10  1
1  1  0.23 -1.63  1
1  0  0.37 -2.23  0
;
run;

%macro ModelOptRandomize(TreatedPatients,NewPatient,gamma,seed); 
   proc iml;
      use &TreatedPatients.;
      read all into X;
      use &NewPatient.;
      read all into Z;
      n=nrow(X);
      call randseed(&seed);
      X[,ncol(X)]=-(X[,ncol(X)]=0)+(X[,ncol(X)]=1);
      delta=X[,ncol(X)];
      X=X[,1:(ncol(X)-1)];
      L=delta`*X*inv(X`*X)*X`*delta;
      R=Z*inv(X`*X)*X`*delta/n;
      p=(1-R)**&gamma/((1-R)**&gamma+(1+R)**&gamma);
      call randgen(u, "Uniform");
      trt=u<p;
      *if trt=0 then trt=-1;
      call symputx("trt",trt);
   quit;

   data &NewPatient.;
      set &NewPatient.;
      Treatment=&trt;
      output;
   run;

   proc append base=&TreatedPatients. data=&NewPatient.;
   run;
%mend ModelOptRandomize;

data NewPatient1;
   input Intercept Gender Pressure Severity;
   datalines;
1  0   0.20   -1.98
;
run;

data NewPatient2;
   input Intercept Gender Pressure Severity;
   datalines;
1  1   -0.80   -0.30
;
run;

data NewPatient3;
   input Intercept Gender Pressure Severity;
   datalines;
1  1   0.15   2.50
;
run;

%ModelOptRandomize(TreatedPatients,NewPatient1,gamma=5,seed=6);
%ModelOptRandomize(TreatedPatients,NewPatient2,gamma=5,seed=6);
%ModelOptRandomize(TreatedPatients,NewPatient3,gamma=5,seed=6);

proc print data=TreatedPatients;
run;

该宏的输出结果如下:
| 观测值 | 性别 | 血压 | 损伤严重程度评分 | 治疗 |
| — | — | — | — | — |
| 1 | 0 | 1.16 | -0.80 | 1 |
| 2 | 1 | 1.84 | 2.25 | 1 |
| 3 | 1 | 0.41 | -1.38 | 0 |
| 4 | 0 | 0.99 | 1.12 | 1 |
| 5 | 1 | -1.18 | -0.30 | 0 |
| 6 | 1 | 1.47 | -0.94 | 0 |
| 7 | 1 | -1.16 | 0.24 | 1 |
| 8 | 1 | 1.92 | -1.29 | 1 |
| 9 | 0 | 1.13 | -0.77 | 0 |
| 10 | 1 | -0.42 | 0.69 | 0 |
| 11 | 1 | -0.17 | -0.59 | 1 |
| 12 | 1 | -0.73 | 1.22 | 1 |
| 13 | 1 | -0.00 | -0.59 | 0 |
| 14 | 1 | 1.26 | -0.45 | 0 |
| 15 | 0 | -0.48 | 2.23 | 1 |
| 16 | 1 | -0.58 | -2.29 | 0 |
| 17 | 1 | 0.06 | -0.69 | 1 |
| 18 | 1 | -0.09 | 1.10 | 1 |
| 19 | 1 | 0.23 | -1.63 | 1 |
| 20 | 0 | 0.37 | -2.23 | 0 |
| 21 | 0 | 0.20 | -1.98 | 0 |
| 22 | 1 | -0.80 | -0.30 | 1 |
| 23 | 1 | 0.15 | 2.50 | 0 |

综上所述,贝叶斯模型在剂量反应分析中具有独特的优势,而自适应随机化的多种方法为临床试验的设计提供了丰富的选择,每种方法都有其特点和适用场景,在实际应用中需要根据具体情况进行选择和应用。

6. 响应自适应随机化

响应自适应随机化(RAR)允许分配概率随试验的进行而改变,从而增加患者被分配到更优治疗组的机会。这种方法根据已有的治疗响应数据动态调整分配概率,使得更多患者有机会接受表现更好的治疗。以下介绍几种常见的响应自适应随机化方法:

6.1 赢者继续规则

赢者继续规则是一种简单的响应自适应随机化方法。在试验过程中,如果某一治疗组的患者出现了积极的治疗响应,那么后续患者被分配到该治疗组的概率就会增加;反之,如果某一治疗组的患者治疗效果不佳,后续患者被分配到该组的概率就会降低。例如,在一个两臂试验中,若A组的患者近期治疗效果较好,那么下一个患者被分配到A组的概率就会提高。

6.2 最优响应自适应随机化

最优响应自适应随机化旨在通过某种优化算法,根据试验中积累的响应数据,动态地确定每个患者的最优分配概率,以最大化试验的整体效益。这通常涉及到对治疗效果的实时评估和复杂的数学模型,以平衡个体患者的利益和试验的统计效率。

6.3 贝叶斯响应自适应随机化

贝叶斯响应自适应随机化结合了贝叶斯统计方法和响应自适应的思想。它利用先验信息和试验中不断积累的响应数据,更新对各治疗组效果的后验分布,然后根据后验分布来调整分配概率。这种方法能够充分利用历史数据和实时信息,使分配更加合理。

graph LR
    classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
    classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
    A([响应自适应随机化]):::startend --> B(赢者继续规则):::process
    A --> C(最优响应自适应随机化):::process
    A --> D(贝叶斯响应自适应随机化):::process

7. 协变量调整的响应自适应随机化

协变量调整的响应自适应随机化(CARA)结合了协变量自适应随机化(CAR)和响应自适应随机化(RAR)的优点。它不仅考虑了协变量对治疗效果的影响,通过平衡协变量来提高试验的效率和有效性,还能根据试验中的响应数据动态调整分配概率,使随机化概率偏向潜在更好的治疗。

7.1 贝叶斯协变量调整的响应自适应随机化

贝叶斯协变量调整的响应自适应随机化是CARA的一种具体实现方式。它利用贝叶斯方法处理协变量信息和响应数据,通过先验分布和后验更新来动态调整治疗分配概率。在试验过程中,它会不断整合新的协变量信息和治疗响应数据,更新对各治疗组效果的估计,从而更精准地将患者分配到更优的治疗组。

这种方法在处理复杂的临床试验场景时具有很大的优势,能够同时考虑患者的个体特征(协变量)和治疗的实时效果,为患者提供更个性化的治疗分配方案。

8. 不同随机化方法的比较与选择

不同的随机化方法各有优缺点,在实际的临床试验设计中,需要根据具体情况进行选择。以下是一个不同随机化方法的比较表格:
| 随机化方法 | 优点 | 缺点 | 适用场景 |
| — | — | — | — |
| 简单随机化 | 实现简单,不依赖历史信息 | 可能导致治疗组不平衡 | 对治疗组平衡要求不高,样本量较大的试验 |
| 置换区组随机化 | 能保证治疗组人数平衡,适用于多中心试验 | 可能引入选择偏倚 | 样本量较小,需要严格平衡治疗组的试验 |
| 偏币设计 | 能提供近似平衡,可根据样本量调整 | 分配规则相对复杂 | 希望在试验过程中动态调整平衡的试验 |
| 分层随机化 | 能在协变量上取得平衡 | 层数过多时可能导致不平衡 | 协变量较少,需要在协变量上平衡的试验 |
| 基于最小化的协变量自适应随机化 | 能处理大量协变量,减少不平衡 | 计算相对复杂 | 协变量较多,需要精确平衡的试验 |
| 基于模型的最优协变量自适应随机化 | 可使估计治疗效果的方差最小化 | 对连续协变量处理较复杂 | 关注治疗效果估计精度的试验 |
| 响应自适应随机化 | 增加患者接受更优治疗的机会 | 可能受早期数据影响较大 | 希望根据治疗响应动态调整分配的试验 |
| 协变量调整的响应自适应随机化 | 结合协变量和响应信息,更个性化分配 | 方法复杂,实施难度大 | 协变量和治疗响应都重要的复杂试验 |

在选择随机化方法时,可以参考以下步骤:
1. 明确试验目标 :确定试验是更关注治疗组的平衡、治疗效果的估计精度,还是患者个体的治疗利益。
2. 考虑协变量情况 :评估试验中协变量的数量、类型(连续或离散)以及其对治疗效果的影响程度。
3. 评估样本量 :样本量的大小会影响随机化方法的可行性和效果,小样本量可能需要更严格的平衡方法。
4. 考虑伦理因素 :确保随机化方法符合伦理要求,保障患者的最大利益。

9. 总结与展望

贝叶斯模型和自适应随机化方法在临床试验中都具有重要的应用价值。贝叶斯模型在剂量反应分析中能够提供稳健的参数估计,尤其适用于传统方法难以收敛或估计结果不合理的情况。自适应随机化方法则为临床试验的设计提供了更加灵活和个性化的选择,能够在个体伦理和集体伦理之间取得更好的平衡。

随着医学研究的不断发展和临床试验的日益复杂,未来这些方法有望得到更广泛的应用和进一步的改进。例如,贝叶斯模型可以与更多的先验信息和复杂的模型结构相结合,提高对剂量反应关系的理解和预测能力。自适应随机化方法可以结合更多的实时数据和先进的算法,实现更加精准和个性化的治疗分配。

同时,在实际应用中,还需要注意这些方法的局限性和潜在风险。例如,贝叶斯分析结果依赖于先验分布的选择,需要谨慎考虑先验信息的合理性;自适应随机化方法可能会受到早期数据的影响,导致分配偏差,需要进行严格的质量控制和监测。

总之,贝叶斯模型和自适应随机化方法为临床试验的设计和分析提供了强大的工具,在未来的医学研究中具有广阔的发展前景。研究人员需要不断探索和创新,以更好地应用这些方法,提高临床试验的效率和质量,为患者带来更有效的治疗方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值