R语言缓释制剂QBD解决方案之四

发布于:2025-06-13 ⋅ 阅读:(13) ⋅ 点赞:(0)

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》缓释制剂工艺实验室规模包衣工艺优化的R语言解决方案。

实验室规模的包衣工艺优化

进行优化研究以优化前面识别的三个CPP。用工艺筛选相同的设备进行研究。因为雾化气压没有显著影响所以固定为1.6bar。

三因子三水平带6个中心点的完全析因设计需要33次实验。虽然完全析因实验可以获得最高分辨率,面中心的中心复合设计可以减少实验次数并拟合二次模型以评估每个因子的三个水平。设计有一个中心点,没有重复,α = 1.0 ,总共15次实验。表72是实验设计和可接受标准。响应为药物的释放(T20%, T50% and T80%), 细粒和聚集,工艺效率。表73是实验结果的汇总。

影响T20的显著因子

基于ANOVA的结果,影响T20的显著因子为B,C。产品温度和喷雾速度对T20的影响见图41。

影响工艺效率的显著因子

影响工艺效率的显著因子为B,C。二次效应见图42.

基于筛选和优化DOE研究的结果,产品温度,喷雾速率,气流量识别为CPP。设计空间来自多个CQA的共同区域。可接受的范围见表74。

library(rsm)

study5 <- ccd(3, n0 = c(0,1),alpha = "faces",oneblock=TRUE, randomize = FALSE)

>  study5

   run.order std.order x1.as.is x2.as.is x3.as.is

1          1         1       -1       -1       -1

2          2         2        1       -1       -1

3          3         3       -1        1       -1

4          4         4        1        1       -1

5          5         5       -1       -1        1

6          6         6        1       -1        1

7          7         7       -1        1        1

8          8         8        1        1        1

9          1         1       -1        0        0

10         2         2        1        0        0

11         3         3        0       -1        0

12         4         4        0        1        0

13         5         5        0        0       -1

14         6         6        0        0        1

15         7         7        0        0        0

study5 <- study5[ , 3:5]

library(Vdgraph)

Vdgraph(study5)

y1=c(2.8,2.6,2.5,2.4,3.1,3.0,2.7,2.6,2.7,2.6,2.7,2.5,2.6,2.7,2.6)

y4=c(94,95,93,93,90,90,88,88,93,93,92,91,96,91,93)

study5 <-data.frame(y1,y4,study5)

print( study5, std.order=TRUE)

mod1 <- rsm(y1 ~ SO(x1, x2, x3), data = study5)

summary (mod1)

> summary(mod1)

Call:

rsm(formula = y1 ~ SO(x1, x2, x3), data = study5)

              Estimate Std. Error t value  Pr(>|t|)   

(Intercept)  2.5955556  0.0340171 76.3016 7.326e-09 ***

x1          -0.0600000  0.0200139 -2.9979 0.0301713 * 

x2          -0.1500000  0.0200139 -7.4948 0.0006684 ***

x3           0.1200000  0.0200139  5.9958 0.0018519 **

x1:x2        0.0125000  0.0223762  0.5586 0.6005067   

x1:x3        0.0125000  0.0223762  0.5586 0.6005067   

x2:x3       -0.0375000  0.0223762 -1.6759 0.1546090   

x1^2         0.0555556  0.0394679  1.4076 0.2182707   

x2^2         0.0055556  0.0394679  0.1408 0.8935536   

x3^2         0.0555556  0.0394679  1.4076 0.2182707   

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Multiple R-squared:  0.9573,    Adjusted R-squared:  0.8805

F-statistic: 12.46 on 9 and 5 DF,  p-value: 0.006289

Analysis of Variance Table

Response: y1

                Df  Sum Sq  Mean Sq F value    Pr(>F)

FO(x1, x2, x3)   3 0.40500 0.135000 33.7032 0.0009652

TWI(x1, x2, x3)  3 0.01375 0.004583  1.1442 0.4163274

PQ(x1, x2, x3)   3 0.03056 0.010185  2.5428 0.1698961

Residuals       5 0.02003 0.004006                 

Lack of fit       5 0.02003 0.004006                 

Pure error      0 0.00000                          

Stationary point of response surface:

        x1         x2         x3

  4.329975 -24.016110  -9.672559

Eigenanalysis:

eigen() decomposition

$`values`

[1]  0.063918333  0.054537370 -0.001789037

$vectors

         [,1]       [,2]       [,3]

x1  0.4706037  0.8716215  0.1371429

x2 -0.2238013  0.2682622 -0.9369890

x3  0.8534900 -0.4102578 -0.3213152

exa<-data.frame(x1=4.329975,x2=-24.016110,x3=-9.672559)

lm.pred<-predict(mod1,exa,interval="prediction",level=0.95)

lm.pred

> lm.pred

       fit      lwr      upr

1 3.686511 -54.1455 61.51852

par(mfrow=c(2,2))

contour(mod1, ~ x1+x2+x3)

par(mfrow=c(1,3))

persp(mod1, ~ x1+x2+x3, zlab=" y1", contours=list(z="bottom"))

ridge<-steepest(mod1, dist=seq(0, 1.7, by=.1),descent=FALSE)

ridge

mod1 <- lm(y1 ~ x1+x2+x3, data = study5)

anova(mod1)

> anova(mod1)

Analysis of Variance Table

Response: y1

          Df   Sum Sq  Mean Sq F value    Pr(>F)   

x1         1 0.036000 0.036000  6.1554 0.0305186 * 

x2         1 0.225000 0.225000 38.4715 6.692e-05 ***

x3         1 0.144000 0.144000 24.6218 0.0004274 ***

Residuals 11 0.064333 0.005848                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

x1.num <-study5$x1

levels(x1.num) <- c(80,140)

x2.num <- study5$x2

levels(x2.num) <- c(28,36)

x3.num <- study5$x3

levels(x3.num) <- c(10,30)

x1.num <- as.numeric(as.character(x1.num))

x2.num <- as.numeric(as.character(x2.num))

x3.num <- as.numeric(as.character(x3.num))

mod1 <- lm(y1 ~ x1.num+x2.num+x3.num, data = study5)

par(mfrow=c(1,3))

contour(mod1, ~ x1.num+x2.num+x3.num)

mod2 <- rsm(y4 ~ SO(x1, x2, x3), data = study5)

summary(mod2)

> summary(mod2)

Call:

rsm(formula = y4 ~ SO(x1, x2, x3), data = study5)

             Estimate Std. Error  t value  Pr(>|t|)   

(Intercept) 93.222222   0.164692 566.0398 3.266e-13 ***

x1           0.100000   0.096896   1.0320 0.3493687   

x2          -0.800000   0.096896  -8.2563 0.0004251 ***

x3          -2.400000   0.096896 -24.7688 2.001e-06 ***

x1:x2       -0.125000   0.108333  -1.1538 0.3007176   

x1:x3       -0.125000   0.108333  -1.1538 0.3007176   

x2:x3       -0.125000   0.108333  -1.1538 0.3007176   

x1^2        -0.277778   0.191082  -1.4537 0.2057679   

x2^2        -1.777778   0.191082  -9.3037 0.0002414 ***

x3^2         0.222222   0.191082   1.1630 0.2973239   

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Multiple R-squared:  0.9938,    Adjusted R-squared:  0.9827

F-statistic: 89.39 on 9 and 5 DF,  p-value: 5.499e-05

Analysis of Variance Table

Response: y4

                Df Sum Sq Mean Sq  F value    Pr(>F)

FO(x1, x2, x3)   3 64.100 21.3667 227.5740 9.158e-06

TWI(x1, x2, x3)  3  0.375  0.1250   1.3314 0.3628147

PQ(x1, x2, x3)   3 11.056  3.6852  39.2505 0.0006722

Residuals      5  0.469  0.0939                   

Lack of fit      5  0.469  0.0939                  

Pure error       0  0.000                          

Stationary point of response surface:

        x1         x2         x3

-0.8725810 -0.3718624  5.0500003

Eigenanalysis:

eigen() decomposition

$`values`

[1]  0.2313959 -0.2822389 -1.7824903

$vectors

          [,1]        [,2]        [,3]

x1 -0.11849976  0.99203017    -0.04282469

x2 -0.02719034  -0.04635429   -0.99855494

x3  0.99258173  0.11716411   -0.03246661

exa<-data.frame(x1=-0.8725810,x2=-0.3718624,x3=-1.7824903)

lm.pred<-predict(mod2,exa,interval="prediction",level=0.95)

lm.pred

> lm.pred

       fit      lwr      upr

1 97.64132 95.94078 99.34186

par(mfrow=c(2,2))

contour(mod2, ~ x1+x2+x3)

par(mfrow=c(1,3))

persp(mod2, ~ x1+x2+x3, zlab=" y4", contours=list(z="bottom"))

ridge<-steepest(mod2, dist=seq(0, 1.7, by=.1),descent=FALSE)

ridge