:
Output Added-------------
: ProductLimitEstimates
Name: Product-Limit Estimates
Label: Stat.Lifetest.ProductLimitEstimates
Template: Lifetest.Stratum1.ProductLimitEstimates
Path-------------
:
Output Added-------------
: Quartiles
Name: Quartiles of the Survival Distribution
Label: Stat.Lifetest.Quartiles
Template: Lifetest.Stratum1.TimeSummary.Quartiles
Path-------------
:
Output Added-------------
: Means
Name: Mean
Label: Stat.Lifetest.Means
Template: Lifetest.Stratum1.TimeSummary.Means
Path-------------
:
Output Added-------------
: SurvivalPlot
Name: Survival Curve
Label: Stat.Lifetest.Graphics.ProductLimitSurvival
Template: Lifetest.Stratum1.SurvivalPlot
Path-------------
:
Output Added-------------
: CensoredSummary
Name: Censored Summary
Label: Stat.Lifetest.CensoredSummary
Template: Lifetest.CensoredSummary Path
17 In memoriam SAS
- Ce pas à pas n’a pas fait de mise à jour depuis 3 ans.
- Pour les personnes de l’Ined, à noter que SAS Studio (serveur margaux) a été mis à jour, et qu’il est maintenant possible d’estimer les RMST avec
proc lifetest
. - Le document n’a pas été compilé en PDF, seule cette version html est disponible.
Remarque: Sélection des outputs
Selon le type d’analyse la totalité des outputs ne seront pas reproduits (ods include
ou ods exclude
pour la sélection). Un problème spécifique s’observe pour le tableau des estimateurs de Kaplan-Meier qui est particulièrement illisible en présence d’un nombre important d’observations censurées.
Exemple pour proc lifetest
: noms des outputs récupérés dans la log
Utiliser de préférence le nom figurant dans la ligne path: (si comparaison de deux strates, le nom figurant dans la ligne name est identique).
17.1 Analyse non paramétrique
17.1.1 Méthode actuarielle
Avec une longueur d’intervalle fixe égale à 30 jours.
La durée médiane est donnée par la colonne résidual median time. Sur la première ligne, il s’agit de la durée médiane sur toutes les personnes exposées au risque. Dans les lignes suivante, cette durée médiane est recalculée pour les personnes restant exposées au risque dans chaque intervalle.
=trans method=lifetable width=30;
proc lifetest data*died(0);run; time stime
17.1.2 Méthode Kaplan-Meier
Le tableau des estimateurs ne sera pas reporté (voir intro du document).
Pour récupérer ces estimateurs, on peut les récupérer via l’instruction output et les exporter, par exemple, dans un tableur.
ods exclude Lifetest.Stratum1.ProductLimitEstimates;=trans;
proc lifetest data*died(0); run; time stime
Warning sur la durée moyenne reportée Sauf exception ne pas interpréter le tableau donnant la durée moyenne. Se reporter à l’estimation des RMST plus bas.
Comparaison des fonctions de survie
Tests du log rank
ods exclude Lifetest.Stratum1.ProductLimitEstimates Lifetest.Stratum2.ProductLimitEstimates ;=trans;
proc lifetest data*died(0);
time stime/ test=all;
strata surgery run;
Comparaison des RMST
Disponible avec le dernier module stat de Sas base (Sas-Stat 15.1 novembre 2018).
ods exclude Lifetest.Stratum1.ProductLimitEstimates;=trans rmst plots=(rmst);
proc lifetest data*died(0);
time stime strata surgery; run;
17.2 Modèle de Cox
17.2.1 Estimation du modèle
=trans;
proc phreg data*died(0) = year age surgery ;
model stime run;
17.2.2 Tests de l’hypothèse PH
17.2.2.1 Test de Grambsch Therneau
Demande au moins l’avant dernière version de Sas/Stat (2016?).
Le test est exécuté directement dans l’instruction phreg
(ajouter zph
). L’option global permet de récupérer le résultat du test omnibus (attention rejette facilement \(H_0\) - hypothèse PH respectée - lorsque le nombre de degrés de liberté est élevé).
ods select PHReg.zphTest;=trans zph(global noplot);
proc phreg data*died(0) = year age surgery ;
model stime run;
Par défaut SAS utilise la transformation \(f(t)=t\) (idem Stata). Pour obtenir l’option par défaut de R \(f(t) = 1 - KM(t)\):
ods select PHReg.zphTest;=trans zph(global noplot transform=km);
proc phreg data*died(0) = year age surgery ;
model stime run;
17.2.2.2 Interaction avec la durée
Estimation d’un modèle avec indicatrices
La covariable doit être sous forme d’indicatrice (binaire: (0,1)). Ce qui est le cas ici avec la variable surgery.
Exemple avec une covariable X à 3 modalités codée 1,2,3.
Estimation du modèle de Cox avec l’instruction class
(ref: X=1)
=base;
proc phreg dataX(ref="1");
class *variable_cens(0) = X; run; model variable_dur
Estimation du modèle de Cox avec indicatrices
data base; set base;= X=1;
X1 = X=2;
X2 = X=3; run;
X3
=base;
proc phreg data*variable_cens(0) = X2 X3; run; model variable_dur
La variable d’intéraction (\(surgeryt = surgery\times stime\)) est générée, le temps de l’estimation après l’instruction model
.
ods select PHReg.ParameterEstimates;=trans ;
proc phreg data*died(0) = year age surgery surgeryt ;
model stime= surgery*stime;
surgeryt run;
17.2.3 Variable dynamique
Warning: opération en ‘aveugle’
Contrairement à R et Stata, la base n’a pas à être splittée, on ne peut pas vérifier si la variable dynamique a été correctement créée. La variable dynamique, qui peut être appréhendée comme une variable en intéraction avec la durée, est générée après l’instruction model
.
Ici la tvc prendra la valeur 1 lorsque stime>wait, 0 sinon.
ods select PHReg.ParameterEstimates;=trans;
proc phreg data*died(0) = year age surgery tvc ;
model stime= transplant=1 and stime>=wait;
tvc run;
17.3 Modèle à temps discret
17.3.1 Mise en forme
On utilise une boucle pour répliquer les lignes sur la valeur de la durée. La nouvelle variable de durée (t) sous forme de compteur est générée automatiquement.
data td; set trans; =1 to mois;
do t
output;
end; run;
data td; set td;if t<mois then died=0;
=t*t;
t2=t2*t; run; t3
17.3.2 Durée continue
Estimation du modèle
ods select Logistic.FitStatistics;=td;
proc logistic datadied(ref="0") = t t2 t3 year age surgery ; run; model
17.3.3 Durée discrète
Pour l’exemple on va regrouper la durée par ses quartiles. Pour chaque individu, on conserve seulement une observation dans chaque quartile.
=td out=td2 groups=4;
proc rank data
var t;
ranks tq4;
run;
data td2; set td2;=put(id, 3.);
id2=put(tq4, 1.);
tq42=id2 || tq42; run;
g
=td2; by id tq4; run;
proc sort data
data td2; set td2;
by g;if LAST.g; run;
Estimation
=td2;
proc logistic data/ param=ref;
class tq4 died(ref="0") = tq4 year age surgery; run; model
17.4 Modèles paramétrique
On utilise la procédure proc lifereg
et on indique le type de distribution
=trans;
proc lifereg data*died(0) = year age surgery /D=WEIBULL;
model stime run;
=trans;
proc lifereg data*died(0) = year age surgery /D=LLOGISTIC;
model stime run;
17.5 Risques concurrents
17.5.1 Non paramétrique
On indique en option la cause d’intérêt avec eventcode=valeur
, les autres étant considérées commes des risques concurrents.
=trans plots=CIF;
proc lifetest data*compet(0) / eventcode=1; run; time stime
Pour récupérer le test de Gray, on utilise l’instruction strata
.
=trans plots=CIF;
proc lifetest data*compet(0) / eventcode=1
time stime strata surgery; run;
17.5.2 Modèle logistique multinomial à durée discrète
data td; set trans; =1 to mois;
do t
output;
end;
run;
data td; set td;if t<mois then compet=0;
=t*t
t2 run;
=td;
proc logistic datacompet(ref="0") = t t2 year age surgery / link=glogit;
model run;