网站创建软件,六安电子商务网站建设,网站建设实习招聘,视频网站怎么引流这里写目录标题 加权标准化生存分析总结个体层面的生存曲线 加权标准化生存分析
我们还可以将加权与标准化结合起来#xff0c;使用 WeightedStandardizedSurvival 模块。在这里#xff0c;我们将逆倾向得分加权模型#xff08;根据基线协变量重新加权人群#xff09;与加… 这里写目录标题 加权标准化生存分析总结个体层面的生存曲线 加权标准化生存分析
我们还可以将加权与标准化结合起来使用 WeightedStandardizedSurvival 模块。在这里我们将逆倾向得分加权模型根据基线协变量重新加权人群与加权回归以及标准化模型相结合
from causallib.survival.weighted_standardized_survival import WeightedStandardizedSurvivalipw IPW(learnerLogisticRegression(max_iter2000))
poly_transform_pipeline Pipeline([(transform, PolynomialFeatures(degree2)), (LR, LogisticRegression(max_iter8000, C1.5))]
)
weighted_standardized_survival WeightedStandardizedSurvival(survival_modelpoly_transform_pipeline, weight_modelipw
)
weighted_standardized_survival.fit(X, a, t, y)population_averaged_survival_curves weighted_standardized_survival.estimate_population_outcome(X, a, t
)plot_survival_curves(population_averaged_survival_curves,labels[non-quitters, quitters],titleWeighted standardized survival of smoke quitters vs. non-quitters in a 10 years observation period,
)或者我们也可以使用 lifelines 包中的 RegressionFitter 类例如 Cox 比例风险拟合器。这是一种加权的 Cox 分析。
ipw IPW(learnerLogisticRegression(max_iter1000))
weighted_standardized_survival WeightedStandardizedSurvival(survival_modellifelines.CoxPHFitter(), weight_modelipw)# Note the fit_kwargs (passed to CoxPHFitter.fit() method)
weighted_standardized_survival.fit(X, a, t, y, fit_kwargs{robust: True})# Without setting robustTrue, well get the following warning:
StatisticalWarning: It appears your weights are not integers, possibly propensity or sampling scores then?
Its important to know that the naive variance estimates of the coefficients are biased. Instead a) set robustTrue in the call to fit, or b) use Monte Carlo to
estimate the variances.population_averaged_survival_curves weighted_standardized_survival.estimate_population_outcome(X, a, t)plot_survival_curves(population_averaged_survival_curves, labels[non-quitters, quitters], titleWeighted standardized survival of smoke quitters vs. non-quitters in a 10 years observation period)总结
不同模型的并列比较。
import itertoolsdef plot_multiple_models(models_dict):grid_dims (int(np.round(np.sqrt(len(models_dict)))), int(np.ceil(np.sqrt(len(models_dict)))))grid_indices itertools.product(range(grid_dims[0]), range(grid_dims[1]))fig, ax plt.subplots(*grid_dims)models_names list(models_dict.keys())for model_name, plot_idx in zip(models_names, grid_indices):model models_dict[model_name]model.fit(X, a, t, y)curves model.estimate_population_outcome(X, a, t, y)ax[plot_idx].plot(curves[0])ax[plot_idx].plot(curves[1])ax[plot_idx].set_title(model_name)ax[plot_idx].set_ylim(0.7, 1.02)ax[plot_idx].grid()plt.tight_layout()plt.show()
MODELS_DICT {MarginalSurvival Kaplan-Meier: MarginalSurvival(survival_modelNone),MarginalSurvival LogisticRegression: MarginalSurvival(survival_modelLogisticRegression(max_iter2000)),MarginalSurvival PiecewiseExponential: MarginalSurvival(survival_modellifelines.PiecewiseExponentialFitter(breakpointsrange(1, 120, 10))),WeightedSurvival Kaplan-Meier: WeightedSurvival(weight_modelIPW(LogisticRegression(max_iter2000)), survival_modelNone),WeightedSurvival LogisticRegression: WeightedSurvival(weight_modelIPW(LogisticRegression(max_iter2000)),survival_modelLogisticRegression(max_iter2000),),WeightedSurvival WeibullFitter: WeightedSurvival(weight_modelIPW(LogisticRegression(max_iter2000)),survival_modellifelines.WeibullFitter(),),StandardizedSurvival LogisticRegression: StandardizedSurvival(survival_modelLogisticRegression(max_iter2000)),StandardizedSurvival Cox: StandardizedSurvival(survival_modellifelines.CoxPHFitter()),WeightedStandardizedSurvival: WeightedStandardizedSurvival(weight_modelIPW(LogisticRegression(max_iter2000)),survival_modelLogisticRegression(max_iter2000),),
}plot_multiple_models(MODELS_DICT)个体层面的生存曲线
在使用直接结果模型StandardizedSurvival 和 WeightedStandardizedSurvival时可以在 causallib 中生成个体层面的效果估计和生存曲线。
%matplotlib inline
import matplotlib as mpl
import seaborn.objects as so
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from causallib.survival import StandardizedSurvival
from causallib.datasets import load_nhefs_survival
data load_nhefs_survival(augmentFalse, onehotFalse)
data.t data.t.rename(longevity)
data.X.join(data.a).join(data.t).join(data.y)现在让我们创建一个基于公式的数据转换器以便轻松指定以下两点
使用样条灵活地建模连续变量创建与所有变量的治疗交互项以允许效应修正。
from formulaic import Formula
from sklearn.base import BaseEstimator, TransformerMixinclass FormulaTransformer(BaseEstimator, TransformerMixin):def __init__(self, formula):super().__init__()self.formula formuladef fit(self, X, yNone):return selfdef transform(self, X, yNone):X_ Formula(self.formula).get_model_matrix(X)return X_
formula f~ 1 {data.a.name}*(C(exercise) C(active) C(education) sex race bs(age, degree5) bs(smokeintensity) bs(smokeyrs) bs(wt71) bs({data.t.name}, degree5) )estimator make_pipeline(FormulaTransformer(formula),LogisticRegression(penaltynone, max_iter1000)
)model StandardizedSurvival(estimator,stratifyFalse,
)
model.fit(data.X, data.a, data.t, data.y)
po model.estimate_individual_outcome(data.X, data.a, data.t)
po遵循 lifelines 的惯例结果的维度将不同的时间点作为行个体作为列。 列进一步按照治疗分配索引因为这些值是潜在结果。 这种结构使我们能够像在非生存分析中那样获得个体层面的效果生存差异
effect po[1] - po[0]
# effect我们现在将结果转置使其变为长格式以便后续绘图
effect effect.reset_index(namestime).melt(id_varstime, var_nameid, value_nameeffect)
effectf mpl.figure.Figure()# Plot inidividual lines:
p so.Plot(effect,xtime,yeffect,groupid,
).add(so.Lines(linewidth.5, alpha0.1, color#919090)
).label(titleSpaghetti plot of the effect difference,
).on(f).plot()# Plot average effect:
avg_effect effect.groupby(time)[effect].mean().reset_index()
ax f.axes[0]
ax.plot(avg_effect[time], avg_effect[effect], color#062f80)
ax.text(0, 0, ATE,verticalalignmentbottom,color#062f80
)
f一旦我们得到了个体级别的生存曲线我们可以任意聚合它们来观察效应在不同的协变量分层中是如何变化的。
f mpl.figure.Figure()
effectX effect.merge(data.X, left_onid, right_indexTrue)
strata racep_eff_strat so.Plot(effectX,xtime,yeffect,colorstrata, # Stratify the effect curves bygroupid,
).add(so.Lines(linewidth.5, alpha0.1)
).scale(colorso.Nominal([#1f77b4, #ff7f0e]),
).label(titleSpaghetti plot for stratified effects,
).on(f).plot()
p_eff_stratavg_effect effectX.groupby([time, strata])[effect].mean().reset_index()
ax f.axes[0]
for s, stratum_data in avg_effect.groupby(strata):ax.plot(stratum_data[time], stratum_data[effect], colorblack, linestyle--,)ax.text(stratum_data[time].iloc[-1], stratum_data[effect].iloc[-1],f{strata}:{s},verticalalignmentcenter,)f