使用 Cox 比例风险进行点预测

Making point predictions using Cox proportional hazard

我正在使用 pysurvival 库通过 Cox 比例风险模型 (CPH) 进行建模。我对获得点预测感兴趣,而不是获得生存曲线。在库中,函数 predict_survival returns 和 array-like 表示生存函数 的预测,我假设我可以使用它来获得预期值 - 但我就是找不到正确的方法。

下面我附上了一个虚拟示例。

# Initializing the simulation model
sim = SimulationModel( survival_distribution = 'log-logistic',
                       risk_type = 'linear',
                       censored_parameter = 10.1,
                       alpha = 0.1, beta=3.2 )
# Generating N random samples 
N = 200
dataset = sim.generate_data(num_samples = N, num_features = 4)
# Defining the features
features = sim.features
# Creating the X, T and E input
X, T, E = dataset[features], dataset['time'].values, dataset['event'].values
# Building the model
coxph = CoxPHModel()
coxph.fit(X,T,E, lr=0.5, l2_reg=1e-2, init_method='zeros')

应用函数时:

coxph.predict_survival(x=X)

它 returns 一个形状为 (200, 87) 的数组 - 为什么每次观察都给出 87 个值?

据我所知,我应该能够通过在生存曲线的曲线下方进行积分来获得期望值。

为此,我需要计算曲线下的面积,我认为可以使用 numpy 库中的 trapz 来完成,但我需要知道点之间的间距是多少完成。

如前所述,我们可以使用函数predict_survival来获得估计的生存概率。此外,通过调用coxPH.times我们得到每个估计生存概率的时间,从而例如可以绘制每个观察的个体生存曲线并计算曲线下的面积。通过使用 sklearn.metrics 库中的 auc 函数,以下定义给出了给定 CPH 模型、X_test 数据和 X_train 数据的训练和测试集的点预测:

## Get point predictions
def point_pred(model, X_test, X_train):
    T_pred = []
    T_pred_train = []
    # Get survival curves
    cph_pred = model.predict_survival(X_test)
    cph_pred_train = model.predict_survival(X_train)
    # get times of survival prediction
    time = model.times
    # test
    for i in range(0,len(cph_pred)):
        T_pred.append(auc(time,cph_pred[i]))
    # train
    for i in range(0,len(cph_pred_train)):
        T_pred_train.append(auc(time,cph_pred_train[i]))
    
    return T_pred, T_pred_train