Re-courbes de survies avec R

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Re-courbes de survies avec R

Messagepar Romain Lecachey » 20 Juin 2007, 14:03

Bonjour à tous,

J'avance pas à pas avec ma fonction qui crée les courbes de survie en allant chercher les données via MySQL.
Voici à quoi ressemble ma table de données à traiter :

Code : Tout sélectionner

 > tab
   code jours event dece sex
1     1  9578     0    0   1
2     2 15139     0    1   1
3     3  5112     0    0   2
4     4 10609     1    1   1
5     5 18421     0    0   1
6     6 10556     0    0   2
7     7 16796     0    1   2
8     8  2284     1    0   2
9     9 19559     1    1   2
10   10  9215     0    0   1
11   11  8135     1    0   1
12   12  3927     0    0   2
13   13  1688     0    1   1
14   14   381     0    0   2
15   15 14371     1    0   2
16   16  1254     0    0   1
17   17 16120     1    0   1
18   18 10883     1    1   2
19   19  6027     0    1   2
20   20   707     0    0   1


et voici mon code :

Code : Tout sélectionner

courbesSurvie<-function(fichierImg,fichierCSV,type_image,vectDuree, vectEvent,genr,Main2="courbes de survie"){
surviSelonSex<-function(vectDure, vecEvent, genr){
ssexe<-censures(vectDure, vecEvent)
  surv<-survfit(ssexe~genr)
surv
}
# compte le nombre de groupes différents
NbGrp <- length(levels(factor(genr)))
# trace la courbe générale de survie sans tenir compte d'éventuelles caractéristiques qui distinguent les groupes
# puis la courbe en fonction de la carac 'genr'. Enregistre le tout dans le fichier et le type définis
selon<-surviSelonSex(vectDuree, vectEvent,  genr)
tabRes=summary(selon)
if  (length(levels(factor(vectEvent))) == "1")
{
     df="Pas de valeurs charnières dans le cas où personne n'est confronté à un évènement !!"
     write.csv2(df, fichierCSV, row.names = FALSE)
}
else
{
     df=as.data.frame(tabRes[c(0,1,2,3,4,5,6)])
     write.csv2(df, fichierCSV, row.names = FALSE)
}
    bitmap(fichierImg,type_image,width=7.5,height=10,res=72,pointsize=12)
# ça donne le graphe de la survie en fonction du temps
     if (NbGrp == 1)
     {
            pal="darkmagenta"
            survie_kaplan<-survfit(Surv(vectDuree, vectEvent))
            plot(survie_kaplan, xlab="Temps", ylab="Taux de survie", main=Main2,col=pal, lty=1)
            legend("bottomleft", paste(factor("groupe")," = ",levels(factor(genr))), lty=1, col=pal)
     }
     else
     {
            pal=palette(rainbow(NbGrp))
            plot(selon, col=pal, xlab="Temps", ylab="Taux de survie", main=Main2)
            legend("bottomleft", paste(factor("groupe")," = ",levels(factor(genr))), lty=1, col=pal)
     }
     dev.off()
# ça donne le graphe de la survie selon la caractéristique propre à chaque groupe (ex : le sexe)

}


Ce code me renvoit bien ce que je veux mais mon problème est que, lorsque qu'il y a un seul groupe, le graph m'affiche l'intervalle de confiance de la courbe et pas quand je souhaite comparer plusieurs courbes sur le même graph !
Est ce un problème du logiciel R ou bien y a-t-il moyen d'obtenir les intervalles de confiance de chaque courbe ?
Merci pour toute aide et suggestion...
@+

Romain,

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 20 Juin 2007, 17:12

Un truc pour avoir des réponses: isoler la question que vous vous posez du reste du problème et fournir un exemple directement reproductible, ce qui n'est pas le cas ici.

La réponse à votre exemple demande un travail conséquent pour en extraire la "substantifique moelle": peu de gens peuvent se permettre de passer une demi-heure à cela avant d'arriver au coeur de la question.

Renaud

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Messagepar Romain Lecachey » 22 Juin 2007, 09:08

Bonjour,

Je vois ce que tu veux dire mais je ne vois pas comment mieux vous expliquer, en fait mon seul problème est que je n'arrive pas à faire apparaître les intervalles de confiance de chaque courbe lorsque ces courbes se situent sur le même graphique ! Bien que ce même intervalle est présent lorsqu'il n'y a un seul groupe.

Par exemple quand j'effectue ce code :

Code : Tout sélectionner

function(fichierImg,type_image,vectDuree, vectEvent,genr,Main2="courbe")
{
            NbGrp <- length(levels(factor(genr)))
            pal=palette(rainbow(NbGrp))
bitmap(fichierImg,type_image,width=7.5,height=10,res=72,pointsize=12)
            surv <- survfit(Surv(vectDuree, vectEvent))
            plot(surv~genr , col=pal, xlab="Temps",  ylab="Taux de survie", main=Main2)
            legend("bottomleft", paste(factor("groupe")," = ",levels(factor(genr))), lty=1, col=pal)       
dev.off()
}


Cela me renvoie bien les deux courbes mais sans les intervalles de confiance que j'attends !
Quelqu'un saurait-il comment s'y prendre ( si c assez clair ) ?
Merci,

Romain,

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 22 Juin 2007, 17:22

Dans l'aide de plot.survfit, je lis:

conf.int determines whether confidence intervals will be plotted. The default is to do so if there is only 1 curve, i.e., no strata.


Il suffit donc d'ajouter l'argument conf.int = TRUE dans l'appel de plot(). Cela dit, le résultat va être illisible ==> je pense que vous avez intérêt à faire des graphes séparés par strate.

Renaud

Romain Lecachey
Messages : 33
Enregistré le : 10 Avr 2007, 08:57

Messagepar Romain Lecachey » 26 Juin 2007, 08:47

Ok c'est bon
Merci Renaud pour l'option conf.int : j'étais passé au travers, j'étais resté bloqué car ça marchait bien pour une courbe mais pas pour le cas de plusieurs !
Par contre il est vrai que le résultat obtenu est illisible !
Ce qui m'embête, c'est qu'avec deux graphes séparés, la comparaison entre les deux ou plusieurs courbes est moins évidente !
Est-il possible de modifier le style de lignes rien que pour l'intervalle ?
-> impossible de jouer sur l'option "lty" de la fonction plot, enfin je n'y arrive pas, cela ne modifie que le style de lignes en différenciant chaque groupe !
Encore merci...

Romain,


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité