Publié le :
Statistique EXTERNAL

Modèle Graphique Kaplan-Meier

Ce script utilise PROC TEMPLATE pour créer un modèle graphique réutilisable (statgraph) nommé 'kmplot'. Ce modèle est conçu pour visualiser les résultats d'une analyse de survie, notamment les courbes de survie cumulée et les observations censurées, ainsi qu'un tableau indiquant le nombre de sujets à risque au fil du temps. Il utilise des variables dynamiques pour permettre son application à différents ensembles de données et variables sans modification du code du modèle lui-même. Les attributs visuels tels que les couleurs et les formes des marqueurs sont définis pour distinguer les groupes ('Active' vs 'Placebo'). La mise en page utilise un LATTICE pour organiser les différents composants graphiques : le graphique principal de survie, un titre pour le tableau des sujets à risque, et le tableau lui-même.
Analyse des données

Type : EXTERNAL


Ce script définit un modèle graphique (template) qui s'attend à recevoir des données externes lors de son invocation. Les variables dynamiques ('x_var', 'y_var1', 'y_var2', 'trtan', 'blkx', 'blkrsk') indiquent les colonnes de données à utiliser. Le script lui-même ne lit ni ne crée de données.

1 Bloc de code
PROC TEMPLATE
Explication :
Ce bloc utilise PROC TEMPLATE pour définir un nouveau graphique statistique nommé 'kmplot'. Les variables dynamiques 'x_var', 'y_var1', 'y_var2', '_byval2_', 'trtan', 'gmarker', 'blkx', et 'blkrsk' sont déclarées pour permettre une personnalisation lors de l'utilisation du modèle. Le graphique principal est structuré en trois panneaux via un LAYOUT LATTICE. Le premier panneau (row 1) contient la courbe de Kaplan-Meier (StepPlot) et les points de censure (ScatterPlot), avec des options d'axes configurées. Le deuxième panneau (row 2) affiche un titre pour le tableau des sujets à risque. Le troisième panneau (row 3) utilise un BLOCKPLOT pour présenter le nombre de sujets restants à risque à différents points temporels, aligné par la variable 'trtan'. Des attributs discrets (couleurs et symboles) sont mappés aux valeurs de 'trtan' pour différencier les groupes de traitement ('Active' et 'Placebo').
Copié !
1PROC TEMPLATE;
2define statgraph kmplot;
3 dynamic x_var y_var1 y_var2 _byval2_;
4 begingraph;
5 *Graph title;
6 entrytitle "Category = " _byval2_ /
7 textattrs=(size=9pt ) pad=(bottom=20px);
8 
9 *Colour map;
10 discreteattrmap name='colors' / ignorecase=true;
11 value 'Active' / lineattrs=(color=blue pattern=shortdash) markerattrs=(color=blue symbol=trianglefilled);
12 value 'Placebo' / lineattrs=(color=red pattern=shortdash) markerattrs=(color=red symbol=circlefilled);
13 enddiscreteattrmap;
14 discreteattrvar attrvar=gmarker var=trtan attrmap='colors';
15 
16 %*Define 2 block layout and size*;
17 layout lattice /rows=3 columns=1 rowweights=(.83 .03 .14) columndatarange=unionall;
18 
19 %*Start KM plot*;
20 layout overlay /
21 xaxisopts=(Label="Time at Risk (years)"
22 display=(tickvalues line label ticks )
23 type=linear linearopts=(tickvaluesequence=(start=0 END=2.5 increment=0.5) viewmin=0 viewmax=2.5))
24 yaxisopts=( Label="Cumulative Incidence of Subjects with Event"
25 type=linear linearopts= (viewmin=0 viewmax=0.8) );
26 StepPlot X=x_var Y=y_var1 / primary=true Group=gmarker
27 LegendLabel="Cumulative Incidence of Subjects with Event" NAME="STEP";
28 
29 %*Censored observations are suppressed but can be added here*;
30 scatterPlot X=x_var Y=y_var2 / Group=gmarker markerattrs=(symbol=plus)
31 LegendLabel="Censored" NAME="SCATTER";
32 DiscreteLegend "STEP"/
33 location=outside halign=center valign=bottom across=2 valueattrs=(family="Arial" size=8pt);
34 endlayout;
35 
36 %*** Define left-aligned title for block ***;
37 layout overlay;
38 entry halign=left 'Number of Subjects at Risk';
39 endlayout;
40 
41 %*Start at risk value plot;
42 layout overlay /
43 xaxisopts=(type=linear display=none) walldisplay=none;
44 blockplot x=blkx block=blkrsk / class=trtan
45 display=(values label)
46 valuehalign=start
47 repeatedvalues=true
48 labelattrs=(family="Arial" size=8pt)
49 valueattrs=(family="Arial" size=8pt);
50 endlayout;
51 endlayout;
52 endgraph;
53 END;
54RUN;
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Banner
Le Conseil de l'Expert
Expert
Stéphanie
Spécialiste Machine Learning et IA.
« Lorsque vous utilisez ce modèle, assurez-vous que vos données de "sujets à risque" sont calculées pour les mêmes points de temps (blkx) que les graduations de votre axe principal (xaxisopts). Une légère désynchronisation peut rendre la lecture du tableau confuse »