0

我正在尝试使用以下方法为审查对象在当前时间生成预测生存函数:

def predict_cumulative_hazard_at_single_time(self, X, times, ancillary_X=None):
        lambda_, rho_ = self._prep_inputs_for_prediction_and_return_scores(X, ancillary_X)
        return (times / lambda_) ** rho_


def predict_survival_function_at_single_time(self, X, times, ancillary_X=None):
        return np.exp(-self.predict_cumulative_hazard_at_single_time(X, times=times, ancillary_X=ancillary_X))


aft.predict_survival_function_at_single_time = predict_survival_function_at_single_time.__get__(aft)
aft.predict_cumulative_hazard_at_single_time = predict_cumulative_hazard_at_single_time.__get__(aft)

p_surv2 = aft.predict_survival_function_at_single_time(censored_subjects,
                                                  times=censored_subjects['CSI'])

但是结果与我添加conditional_after时的结果不同:

survival = aft.predict_survival_function(censored_subjects,
                                    times=censored_subjects['CSI'],
                                    conditional_after=censored_subjects_last_obs)

如何在当前时间为 censored_subjects 添加 conditional_after 而不创建 NxN 输出?

4

1 回答 1

0

如果我理解正确,您希望在每个主题的审查时间评估每个生存函数吗?没有矢量化的方法可以做到这一点,你是否必须做一个 for 循环:

survival = pd.Series(index=censored_subjects.index)
for id in censored_subjects.index:
    survival.loc[id] = aft.predict_survival_function(
                      censored_subjects.loc[id],
                      times=censored_subjects.loc[id, 'CSI'],                               
                      conditional_after=censored_subjects_last_obs.loc[id]
                     )

(以上不保证运行,只是一个例子)

于 2020-06-19T02:30:13.310 回答