7. 协变量筛选#

7.1. mas.model.scm#

class mas.model.scm#

7.1.1. spec()#

spec(direction='both', p_forward=0.05, p_backward=0.01, global_init=0.001, maxiter=None, accept_rule=None) MarkedScmSpecDefFunctionType#

标记一个函数作为 scm 配置函数

参数:

  • direction ("forward" | "backward" | "both", optional): 搜索方向。默认值为"both"

  • p_forward (float, optional): 前向搜索过程中假设检验的显著性水平。即若 p 值小于此值,则纳入此协变量关系。默认值为 0.05

  • p_backward (float, optional): 逆向搜索过程中假设检验的显著性水平。即若 p 值大于此值,则剔除此协变量关系。默认值为 0.01

  • global_init (float, optional): 所有因纳入协变量关系而新增的固定效应参数(theta)初值。默认值为 1e-3

  • maxiter (int, optional): 最大搜索次数。默认值为 None

  • accept_rule (AcceptRuleCallable, optional): 用户自定义的接受规则。

    例如设置自定义接受规则为:仅当纳入协变量后清除率的个体间变异参数方差估计值 omega["eta_cl", "eta_cl"] 减小 30% 或以上时才接受新的协变量模型。

    def custom_rule(context: AcceptRuleContext) -> bool:
        if context.direction == "forward":
            if context.test_params.omega["eta_cl", "eta_cl"] / context.base_params.omega["eta_cl", "eta_cl"] < 0.7:
                return True
        return False
    

示例:

@scm.spec(direction="forward", maxiter=20)
def my_scm_spec(m: Warfarin):
    ...

7.1.2. test_cont()#

test_cont(covariates, on, states, init=None, bounds=None, init_state=None) None#

指定需要被测试的连续协变量-参数关系。

参数:

  • covariates (AnyContinuousColVar | list[AnyContinuousColVar] | NumericContinuousColVarCollection | str | list[str]):需要被测试的连续协变量。一般接受自 column()multicolumn() 定义的变量。

  • on (Theta | list[Theta] | str | list[str]):需要被引入协变量的固定效应参数。

  • states (AnyCategoricalValidStates | AnyContinuousValidStates):需要被测试的协变量-参数关系状态。对应的协变量效应参数化形式请参考 协变量效应参数化公式。对于连续型协变量,支持的状态为 "exclude""linear""piecewise""exp""power"。设置 states="*" 代表筛选时尝试所有的可选状态。

  • init (ValueType | list[ValueType | PiecewiseValueType | None], optional):因纳入协变量关系而新增的协变量效应参数初值。若为 None,将自动计算初值。默认值为 None

  • bounds (BoundsType | list[BoundsType | PiecewiseBoundsType | None], optional):协变量效应参数估计的上下边界值。若为 None,将自动计算边界值。默认值为 None

  • init_state (CategoricalValidStateType, optional):在搜索开始时即被引入至模型的协变量关系及其状态。默认值为 None

7.1.3. test_cat()#

test_cat(covariates, on, states, init=None, bounds=None, init_state=None) None#

指定需要被测试的分类协变量-参数关系。

参数:

  • covariates (AnyCategoricalColVar | list[AnyCategoricalColVar] | StrCategoricalColVarCollection | str | list[str]):需要被测试的分类协变量。一般接受自 column()multicolumn() 定义的变量。

  • on (Theta | list[Theta] | str | list[str]):需要被引入协变量的固定效应参数。

  • states (AnyCategoricalValidStates | AnyContinuousValidStates):需要被测试的协变量-参数关系状态。对应的协变量效应参数化形式请参考 协变量效应参数化公式。对于分类型协变量,支持的状态为 "exclude""linear"。设置 states="*" 代表筛选时尝试所有的可选状态。

  • init (ValueType | list[ValueType | PiecewiseValueType | None], optional):因纳入协变量关系而新增的协变量效应参数初值。若为 None,将自动计算初值。默认值为 None

  • bounds (BoundsType | list[BoundsType | PiecewiseBoundsType | None], optional):协变量效应参数估计的上下边界值。若为 None,将自动计算边界值。默认值为 None

  • init_state (CategoricalValidStateType, optional):在搜索开始时即被引入至模型的协变量关系及其状态。默认值为 None

7.1.4. 协变量效应参数化公式#

总则

以乘法的形式结合各协变量效应与原模型固定效应参数,公式如下:

\[ p_{ki} = \theta_{k} \times g_{k}({z}_i) + \eta_{ki} \]
\[ g({z}_i) = \prod_{r = 1}^{q} c_{ir} \]

假设原模型中共有 k 个固定效应参数与 i 个个体。其中,\(p_{ki}\) 为第 i 个个体的第 k 个固定效应参数的估计值;\(\theta_{k}\) 为此固定效应参数的群体典型值;\(\eta_{ki}\) 为此固定效应参数的个体间变异;\({z}_i\) 为第 i 个个体的协变量值向量;\(g_{k}\) 为有关于 \({z}_i\) 的函数,用于描述协变量与固定效应参数间的关系,具体由纳入协变量的个数 r 以及不同的协变量-参数关系状态(\(c_{ir}\))决定。

各状态的参数化公式

  • "exclude":不引入任何协变量。

  • "linear":以线性关系引入协变量,公式如下:

若为连续型协变量:

\[ c_{ir} = 1 + \theta_{r} \times (z_{ir} - median(z_r)) \]

若为分类协变量(以二分类变量为例):

\[\begin{split} c_{ir} = \begin{cases} 1 & 若 \quad z_{ir} = a \\ 1 + \theta_{r} & 若 \quad z_{ir} = b \end{cases} \end{split}\]
  • "piecewise":以分段线性关系引入协变量,公式如下:

\[\begin{split} c_{ir} = \begin{cases} 1 + \theta_{r} \times (z_{ir} - median(z_r)) & 若 \quad z_{ir} ≤ median(z_r) \\ 1 + \theta_{r+1} \times (z_{ir} - median(z_r)) & 若 \quad z_{ir} > median(z_r) \end{cases} \end{split}\]
  • "exp":以指数形式引入协变量,公式如下:

\[ c_{ir} = exp(\theta_{r} \times (z_{ir} - median(z_r))) \]
  • "power":以幂的形式引入协变量,公式如下:

\[ c_{ir} = \theta_{r}^{z_{ir} - median(z_r)} \]

上述公式中,\(\theta_{r}\) 为协变量效应参数,表明了协变量值的变动对固定效应参数的影响大小。

参考文献

Jonsson, E. N., & Karlsson, M. O. (1998). Automated covariate model building within NONMEM. Pharmaceutical research, 15(9), 1463–1468.

示例:

例如,假设在模型固定效应参数清除率(self.pop_cl)上以线性关系引入了协变量体重(self.wt)与年龄(self.age),模型将变为如下形式:

class WarfarinPk(EvOneCmtLinear):
    """
    pop_cl ~ WT @ linear
    pop_cl ~ AGE @ linear
    """

    def __init__(self):
        super().__init__()
        self.pop_cl = theta(0.15, bounds=(0.01, 10.0), fixed=False)
        self.pop_v = theta(8.0, bounds=(0.01, 20.0), fixed=False)
        self.pop_ka = theta(0.5, bounds=(0.01, 5.0), fixed=False)
        self.pop_alag = theta(0.8, bounds=(0.01, 24.0), fixed=False)
        self.WT__pop_cl_1 = theta(-0.003125, bounds=(-0.03125, 0.03333), fixed=False)
        self.AGE__pop_cl_1 = theta(-0.002985, bounds=(-0.02985, 0.1176), fixed=False)
        self.eta_cl = omega(0.05, fixed=False)
        self.eta_v = omega(0.08, fixed=False)
        self.eta_ka = omega(0.05, fixed=False)
        self.eta_alag = omega(0.15, fixed=False)
        self.eps_prop = sigma(0.01, fixed=False)
        self.eps_add = sigma(0.55, fixed=False)
        self.WT = column('WT', dtype='numeric', is_categorical=False)
        self.AGE = column('AGE', dtype='numeric', is_categorical=False)

    def pred(self):
        AGE__pop_cl = 1 + self.AGE__pop_cl_1 * (self.AGE - 29.5)
        pop_cl__with_cov = self.pop_cl * AGE__pop_cl
        WT__pop_cl = 1 + self.WT__pop_cl_1 * (self.WT - 70.0)
        pop_cl__with_cov = pop_cl__with_cov * WT__pop_cl
        cl = pop_cl__with_cov * exp(self.eta_cl)
        v = self.pop_v * exp(self.eta_v)
        ka = self.pop_ka * exp(self.eta_ka)
        alag = self.pop_alag * exp(self.eta_alag)
        pred_res = self.pred_physio(cl=cl, v=v, ka=ka, alag1=alag, s2=v)
        ipred = pred_res.F
        y = ipred * (1 + self.eps_prop) + self.eps_add
        return y
from mas.model import *
from mas.datasets import warfarin_pk


class WarfarinPk(EvOneCmtLinear):
    def __init__(self) -> None:
        self.pop_cl = theta(0.15, bounds=(0.01, 10))
        self.pop_v = theta(8, bounds=(0.01, 20))
        self.pop_ka = theta(0.5, bounds=(0.01, 5))
        self.pop_alag = theta(0.8, bounds=(0.01, 24))

        self.eta_cl = omega(0.05)
        self.eta_v = omega(0.08)
        self.eta_ka = omega(0.05)
        self.eta_alag = omega(0.15)

        self.eps_prop = sigma(0.01)
        self.eps_add = sigma(0.55)

    def pred(self):
        cl = self.pop_cl * exp(self.eta_cl)  # 指数型个体间变异
        v = self.pop_v * exp(self.eta_v)
        ka = self.pop_ka * exp(self.eta_ka)
        alag = self.pop_alag * exp(self.eta_alag)

        pred_res = self.pred_physio(cl=cl, v=v, ka=ka, alag1=alag, s2=v)  # 使用生理药动学参数预测
        ipred = pred_res.F  # 取出血药浓度预测值

        y = ipred * (1 + self.eps_prop) + self.eps_add  # 比例型与加和型个体内变异

        return y


model = PopModel(WarfarinPk, warfarin_pk)
fit_res = model.fit()
➡️ Since build cache already exists, skip compile
✈️ First Order Conditional Estimation
Using BFGS...
* maxiter = 9999
* xtol = 1e-06
* ftol = 1e-06
* lower_bounds = 
* upper_bounds = 
* log_level = 0
* print = 1
* print_type = 0
* verbose = 1
* p_small = 0.1
* rel_step_size = 0.001

#0    ofv: 364.3540523
x: 1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  1.0000e-01  

Gradients: 101.0869092 7.448347598 -104.527048 30.99690495 -37.06225844 16.55080045 -45.97759626 -13.85882588 32.8152305 114.4144297 

Funcalls: 8
#1    ofv: 299.5539461
x: -1.6505e-01 8.0470e-02  3.7407e-01  1.8725e-02  1.9718e-01  5.6603e-02  2.2056e-01  1.3634e-01  1.3957e-02  -2.0000e-01 

Gradients: -114.075615 -2.647636428 -72.14488225 10.92768269 -34.00781518 15.79326196 -36.54203627 -12.03106061 38.90196043 85.34205841 

Funcalls: 17
#2    ofv: 265.0144085
x: 8.0508e-02  8.6169e-02  5.2938e-01  -4.7986e-03 2.7039e-01  2.2606e-02  2.9922e-01  1.6224e-01  -6.9785e-02 -3.8371e-01 

Gradients: 78.37210597 -0.6928517193 -50.12021333 2.10182098 -18.87280515 14.57028216 -33.88907152 -11.71094215 26.26219179 57.21172002 

Funcalls: 26
#3    ofv: 237.8232702
x: -4.4996e-02 9.3925e-02  8.7340e-01  -3.3590e-02 4.1236e-01  -6.7988e-02 5.0958e-01  2.3385e-01  -2.5205e-01 -7.8184e-01 

Gradients: -3.826486956 1.905187077 -7.466653587 0.2917805314 5.194169916 6.60842656 -32.57337745 -2.361307685 -61.54034687 -11.12924107 

Funcalls: 35
#4    ofv: 226.8520803
x: -8.7464e-02 8.5075e-02  1.1354e+00  -5.3358e-02 4.6160e-01  -1.6997e-01 8.6937e-01  2.9401e-01  7.6682e-02  -9.4398e-01 

Gradients: -24.14642615 -5.217842577 4.313521252 -4.005676921 10.95704242 -1.461475585 -15.67787208 0.2075106133 44.02165162 9.839742375 

Funcalls: 44
#5    ofv: 221.942983
x: -7.4977e-02 1.4710e-01  1.1112e+00  2.6679e-02  2.0417e-01  -2.1551e-01 1.4630e+00  3.1768e-01  3.0043e-03  -9.5099e-01 

Gradients: -30.25032098 24.85634258 -2.024998879 -0.99371552 -21.57279826 -8.145394937 2.301319134 1.443848747 16.1747936 6.124771214 

Funcalls: 53
#6    ofv: 221.0960183
x: -7.2891e-02 8.3836e-02  1.0966e+00  4.6522e-02  2.1288e-01  -1.9917e-01 1.5544e+00  3.1610e-01  -1.5021e-02 -9.3995e-01 

Gradients: -27.83990018 -4.529436581 -2.559537464 0.126858985 -20.11512122 -4.806058932 4.321817677 1.625650173 11.7040482 5.676701932 

Funcalls: 62
#7    ofv: 220.3849934
x: -7.2355e-02 1.0763e-01  1.0591e+00  8.2535e-02  3.2093e-01  -1.5401e-01 1.6748e+00  3.0074e-01  -3.7553e-02 -9.0280e-01 

Gradients: -22.46721754 5.433079645 -3.068826953 1.168386588 -5.025697311 -0.3119883882 6.626919793 1.895498718 7.840708364 7.433178434 

Funcalls: 71
#8    ofv: 220.311444
x: -7.1093e-02 1.0466e-01  9.9391e-01  1.3292e-01  3.4360e-01  -1.9409e-01 1.6673e+00  1.3333e-01  -1.6102e-02 -9.8698e-01 

Gradients: -20.75982993 3.674940328 -5.103562138 3.001265871 -1.605112507 -4.594728915 6.049522188 -0.3691282421 7.25252454 0.6433957114 

Funcalls: 80
#9    ofv: 220.0818023
x: -7.0826e-02 1.0673e-01  1.0282e+00  1.2825e-01  3.3255e-01  -1.5467e-01 1.6507e+00  4.5455e-02  -1.5810e-02 -9.8821e-01 

Gradients: -21.02685542 4.09997036 -4.109724891 0.7656126979 -3.142475217 -0.4776948134 5.848696138 -2.102507125 7.728632073 0.4892926281 

Funcalls: 89
#10   ofv: 219.5604367
x: -6.4508e-02 1.0342e-01  1.1140e+00  1.6954e-01  3.3088e-01  -1.8315e-01 1.6015e+00  -3.5791e-02 -3.5774e-02 -9.2937e-01 

Gradients: -17.18882128 3.24855108 -3.16732962 3.086188537 -3.469447015 -3.445086304 4.912860532 -2.742531412 5.719071453 3.506260734 

Funcalls: 98
#11   ofv: 218.3357278
x: -4.3254e-02 9.8811e-02  1.1537e+00  1.2984e-01  3.2023e-01  -1.5320e-01 1.4055e+00  1.1531e-01  -4.2353e-02 -9.2249e-01 

Gradients: -3.031874246 1.551717717 -1.947360391 2.472724664 -4.526287755 -0.3662460919 0.6879234211 -0.2720726122 4.139760256 3.552658992 

Funcalls: 108
#12   ofv: 218.3302056
x: -4.2963e-02 9.7610e-02  1.1528e+00  1.1036e-01  3.2317e-01  -1.6124e-01 1.4020e+00  1.1630e-01  -4.5333e-02 -9.1787e-01 

Gradients: -2.710567243 1.287507039 -1.842042667 0.757525545 -4.16596355 -1.210544586 0.7189839845 -0.5752693784 3.464364952 3.749225104 

Funcalls: 118
#13   ofv: 218.1737151
x: -4.0106e-02 9.5279e-02  1.1725e+00  9.8696e-02  3.3913e-01  -1.5153e-01 1.3654e+00  1.4177e-01  -4.7600e-02 -9.3140e-01 

Gradients: -0.4902703175 0.3499584172 -1.248274333 0.3714240132 -2.137729515 -0.2500963047 -0.402476548 -0.2581159222 1.556192212 2.106209599 

Funcalls: 129
#14   ofv: 218.094335
x: -3.9124e-02 9.3641e-02  1.2037e+00  9.1424e-02  3.5662e-01  -1.4586e-01 1.3752e+00  1.6346e-01  -4.8658e-02 -9.4827e-01 

Gradients: 0.489332692 -0.2978531032 -0.7147783118 0.1439240397 0.04381634586 0.3283400491 -0.3067598739 0.03209075019 -0.3498870844 0.383681962 

Funcalls: 138
#15   ofv: 218.0465777
x: -3.9802e-02 9.3712e-02  1.2673e+00  9.2500e-02  3.6203e-01  -1.4977e-01 1.3922e+00  1.6071e-01  -4.5431e-02 -9.5937e-01 

Gradients: 0.3898578372 -0.1893067153 0.1472262577 -0.132802633 0.7412611562 -0.005292759423 -0.3205846167 0.07131200793 -0.1530610007 -0.3225232322 

Funcalls: 147
#16   ofv: 218.0402149
x: -4.0068e-02 9.4113e-02  1.2621e+00  9.5160e-02  3.5770e-01  -1.4946e-01 1.4013e+00  1.5612e-01  -4.5825e-02 -9.5688e-01 

Gradients: 0.1751094888 -0.04672872979 -0.04608552924 -0.05553771551 0.2142667902 0.0360657554 0.06309788614 0.006985671555 -0.1632259517 -0.1029274517 

Funcalls: 156
#17   ofv: 218.0343663
x: -4.0530e-02 9.4373e-02  1.2665e+00  9.8265e-02  3.5379e-01  -1.5026e-01 1.3977e+00  1.5135e-01  -4.5480e-02 -9.5422e-01 

Gradients: -0.1473105318 0.06456721724 0.0291372563 0.05668317801 -0.2660676866 -0.03483982993 -0.1063940752 -0.005836340476 0.2435005596 0.1776746278 

Funcalls: 165
#18   ofv: 218.0025783
x: -3.9148e-02 9.5296e-02  1.3023e+00  1.1950e-01  3.5338e-01  -1.5000e-01 1.4106e+00  1.2959e-01  -4.6051e-02 -9.5291e-01 

Gradients: -0.5929457672 0.01262665073 -0.09482056253 -0.5521284 -0.325407984 0.03378203648 -0.05927945813 0.003662935651 0.1203704746 0.1078263218 

Funcalls: 198
#19   ofv: 217.9974735
x: -3.8214e-02 9.5439e-02  1.3199e+00  1.3189e-01  3.5583e-01  -1.5042e-01 1.4182e+00  1.1707e-01  -4.6246e-02 -9.5329e-01 

Gradients: -0.01031537538 0.0108785517 -0.0008314488834 0.02676910028 -0.02958518665 0.007431465123 -0.0005238512365 -0.007457125023 0.003303126306 0.002376624231 

Funcalls: 213
#20   ofv: 217.9974593
x: -3.8206e-02 9.5404e-02  1.3195e+00  1.3128e-01  3.5607e-01  -1.5048e-01 1.4181e+00  1.1805e-01  -4.6250e-02 -9.5334e-01 

Gradients: -0.002445679659 0.0004589659319 -0.0001156027054 6.782998476e-05 -0.0003977363115 0.0007578415519 -0.0001345254365 0.0005515728998 -0.001311506352 -0.0002194009471 

Funcalls: 228
converged = True
n_iter = 21
x_opt = -3.8206e-02 9.5404e-02  1.3195e+00  1.3128e-01  3.5607e-01  -1.5048e-01 1.4181e+00  1.1805e-01  -4.6250e-02 -9.5334e-01 
f_opt = 217.9974593
fun_calls = 241

Computing Covariance...
Covariance computation succeed

如果基于 SCM 方法自动搜索连续协变量体重 ("WT") 和分类协变量性别 ("SEX") 与参数 CL ("pop_cl") 和 V ("pop_v") 的潜在关系,可以通过指定相应的搜索规则 (spec) 来实现:

@scm.spec
def warfarin_scm_rules(m: WarfarinPk):
    scm.test_cont("WT", on=[m.pop_cl, m.pop_v], states="*")
    scm.test_cat("SEX", on=[m.pop_cl, m.pop_v], states="*")

scm_res = fit_res.scm(warfarin_scm_rules)
scm_res

Summary

StepTestOFVdOFV DDFP ValueAcceptedSelectedModel
0Base Model217.997WarfarinPk
1pop_cl ~ WT @ linear213.308-4.69010.030 < 0.05 (forward)YesWarfarinPk__1_1
pop_v ~ WT @ linear191.380-26.61810.000 < 0.05 (forward)YesWarfarinPk__1_2
pop_cl ~ SEX @ linear217.600-0.39810.528 > 0.05 (forward)NoWarfarinPk__1_3
pop_v ~ SEX @ linear203.424-14.57310.000 < 0.05 (forward)YesWarfarinPk__1_4
2pop_cl ~ WT @ linear186.560-4.82010.028 < 0.05 (forward)YesWarfarinPk__2_1
pop_v ~ WT @ piecewise191.011-0.36910.543 > 0.05 (forward)NoWarfarinPk__2_2
pop_cl ~ SEX @ linear190.971-0.40910.523 > 0.05 (forward)NoWarfarinPk__2_3
pop_v ~ SEX @ linear190.508-0.87210.351 > 0.05 (forward)NoWarfarinPk__2_4
3pop_cl ~ WT @ piecewise186.033-0.52710.468 > 0.05 (forward)NoWarfarinPk__3_1
pop_v ~ WT @ piecewise186.202-0.35810.550 > 0.05 (forward)NoWarfarinPk__3_2
pop_cl ~ SEX @ linear184.664-1.89710.168 > 0.05 (forward)NoWarfarinPk__3_3
pop_v ~ SEX @ linear185.696-0.86410.352 > 0.05 (forward)NoWarfarinPk__3_4
4pop_cl ~ WT @ exclude191.3804.820-10.028 > 0.01 (backward)YesWarfarinPk__4_1
pop_v ~ WT @ exclude213.30826.748-10.000 < 0.01 (backward)NoWarfarinPk__4_2
5pop_v ~ WT @ exclude217.99726.618-10.000 < 0.01 (backward)NoWarfarinPk__5_2

7.2. ScmResult#

class ScmResult#

SCM 搜索结果,包含最终模型、运行日志以及各个步骤中的模型结果。

7.2.1. final_model#

property final_model#

SCM 法搜索得到的最终模型。

类型:

PopModel

scm_res.final_model
class WarfarinPk__4_1(EvOneCmtLinear):
    """
    pop_v ~ WT @ linear
    """

    def __init__(self):
        super().__init__()
        self.pop_cl = theta(0.13225628140336454, bounds=(0.01, 10.0), fixed=False)
        self.pop_v = theta(8.076371754991348, bounds=(0.01, 20.0), fixed=False)
        self.pop_ka = theta(1.3368408859910255, bounds=(0.01, 5.0), fixed=False)
        self.pop_alag = theta(0.8227523051009413, bounds=(0.01, 24.0), fixed=False)
        self.WT__pop_v_1 = theta(0.013039911125114306, bounds=(-0.03125, 0.03333333333333333), fixed=False)
        self.eta_cl = omega(0.08289638409433286, fixed=False)
        self.eta_v = omega(0.01766768192187216, fixed=False)
        self.eta_ka = omega(0.7037029773125222, fixed=False)
        self.eta_alag = omega(0.15549785963005286, fixed=False)
        self.eps_prop = sigma(0.007529493956931285, fixed=False)
        self.eps_add = sigma(0.06592263102065547, fixed=False)
        self.WT = column('WT', dtype='numeric', is_categorical=False)

    def pred(self):
        WT__pop_cl = 1
        WT__pop_v = 1 + self.WT__pop_v_1 * (self.WT - 70.0)
        SEX__pop_cl = 1
        SEX__pop_v = 1
        pop_cl__with_cov = self.pop_cl * WT__pop_cl * SEX__pop_cl
        pop_v__with_cov = self.pop_v * WT__pop_v * SEX__pop_v
        cl = pop_cl__with_cov * exp(self.eta_cl)
        v = pop_v__with_cov * exp(self.eta_v)
        ka = self.pop_ka * exp(self.eta_ka)
        alag = self.pop_alag * exp(self.eta_alag)
        pred_res = self.pred_physio(cl=cl, v=v, ka=ka, alag1=alag, s2=v)
        ipred = pred_res.F
        y = ipred * (1 + self.eps_prop) + self.eps_add
        return y

7.2.2. final_fit_result#

property final_fit_result#

SCM 法搜索得到的最终模型的拟合结果。

类型:

FitResult

scm_res.final_fit_result

Estimation Summary

EstimationCovarianceOFVCond. Number
✅ Converged✅ Succeed191.38042.083
Number of Observations: 250
Number of Parameters: 11

Parameter Estimation

ParameterEstimateRSE(%)Shrinkage(%)
Theta
pop_cl0.1325.185
pop_v8.0762.976
pop_ka1.33728.620
pop_alag0.82318.598
WT__pop_v_10.01311.656
Omega(SD)
eta_cl0.28814.1980.000
eta_v0.13314.71811.532
eta_ka0.83920.53150.848
eta_alag0.39428.30759.031
Sigma(SD)
eps_prop0.08714.36013.911
eps_add0.25723.38814.602

Information

Number of IterationsTime
CompilationEstimationCovariance
190:00:00.10:00:00.990:00:02.25

7.2.3. steps#

property steps#

各搜索步骤的模型测试结果。

类型:

list[ScmStepwiseResult]

7.2.4. as_dataframe()#

as_dataframe()#

将搜索步骤与结果转为 dataframe 类型

类型:

DataFrame

scm_res.as_dataframe()
shape: (16, 14)
stepparametercovariatestatebase_ofvtest_ofvofv_changedelta_dfp_valuealphadirectionacceptedselectedmodel
i64strstrstrf64f64f64i64f64f64strboolboolstr
0nullnullnull217.997459nullnullnullnullnullnullnullnull"WarfarinPk"
1"pop_cl""WT""linear"217.997459213.3079574.68950210.0303470.05"forward"truefalse"WarfarinPk__1_1"
1"pop_v""WT""linear"217.997459191.37986126.61759812.4797e-70.05"forward"truetrue"WarfarinPk__1_2"
1"pop_cl""SEX""linear"217.997459217.5996660.39779310.5282310.05"forward"falsefalse"WarfarinPk__1_3"
1"pop_v""SEX""linear"217.997459203.42399314.57346710.0001350.05"forward"truefalse"WarfarinPk__1_4"
3"pop_cl""SEX""linear"186.560095184.6635311.89656410.1684630.05"forward"falsefalse"WarfarinPk__3_3"
3"pop_v""SEX""linear"186.560095185.6956470.86444810.3524970.05"forward"falsefalse"WarfarinPk__3_4"
4"pop_cl""WT""exclude"186.560095191.379861-4.819767-10.0281350.01"backward"truetrue"WarfarinPk__4_1"
4"pop_v""WT""exclude"186.560095213.307957-26.747863-12.3181e-70.01"backward"falsefalse"WarfarinPk__4_2"
5"pop_v""WT""exclude"191.379861217.99746-26.617598-12.4797e-70.01"backward"falsefalse"WarfarinPk__5_2"