使用 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
我正在使用 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