Projet Stat - Evaluation de l`échelle de dépression de Hamilton

Transcription

Projet Stat - Evaluation de l`échelle de dépression de Hamilton
DEVOIR
Evaluation de l’échelle de dépression de Hamilton
Pierre-François BUSSON
M2 MSR – Janvier 2009
SOMMAIRE
DESCRIPTION DES DONNEES ...................................................................................................... 4
VALIDATION DE L’ECHELLE DE HAMILTON ............................................................................. 5
1. Temps J0 (première visite) .............................................................................................. 5
Qualité des items ................................................................................................................ 5
Structure dimensionnelle de la mesure............................................................................... 7
Coefficient de Cronbach..................................................................................................... 8
Validation avec une autre échelle....................................................................................... 8
2. Temps J56 (huitième et dernière visite) ......................................................................... 9
Qualité des items ................................................................................................................ 9
Structure dimensionnelle de la mesure............................................................................. 10
Coefficient de Cronbach................................................................................................... 11
Validation avec une autre échelle..................................................................................... 11
REPONSE AU TRAITEMENT SELON LE SEXE ............................................................................. 13
1. Méthode LOCF / ITT..................................................................................................... 13
Méthodologie ................................................................................................................... 13
Résultats ........................................................................................................................... 13
Diagnostic de régression .................................................................................................. 13
Discussion ........................................................................................................................ 14
2. Modèle mixte avec résidus à covariance structurée .................................................... 14
Méthodologie ................................................................................................................... 14
Résultats ........................................................................................................................... 15
Diagnostic de régression .................................................................................................. 15
3. Analyse des données censurées...................................................................................... 16
Méthodologie ................................................................................................................... 16
Résultats ........................................................................................................................... 16
Validité du modèle ........................................................................................................... 17
Discussion ........................................................................................................................ 17
ANNEXE : SCRIPT R ................................................................................................................. 18
INTRODUCTION
Lors d’une étude d’épidémiologie clinique, on a évalué l’état de dépression des individus sous
traitement à plusieurs reprises (huit visites sont prévues en tout, de J0 à J56), à l’aide d’une
hétéroévaluation utilisant l’échelle de dépression de Hamilton (ou HDRS), et d’une
autoévaluation utilisant l’échelle de mesure SCL90.
L’échelle de Hamilton date de 1967. Elle repose sur l’évaluation par un clinicien de 17
critères représentant la symptomatologie dépressive. Les items de l’échelle sont cotés de 0 à 2
ou de 0 à 4, et la somme de tous les items représente le score de dépression total. Plus le score
est élevé, plus la dépression est importante.
L’échelle SCL90 est un instrument d’autoévaluation, c'est-à-dire que c’est le patient lui-même
qui le remplit. Cette échelle est composée de 90 phrases courtes décrivant des symptômes, les
réponses sont cotées de 0 (« non ») à 4 (« oui, extrêmement »). Le patient choisit de cocher la
case qui lui semble concorder le mieux avec son ressenti. Ici encore la somme de tous les
items aboutit à un score global de dépression. Cependant on peut diviser les items de l’échelle
en dix sous-scores représentant un aspect particulier de la dépression, comme la somatisation,
l’anxiété, l’hostilité, etc.
Afin de s’assurer de la fiabilité des données fournies par l’échelle de Hamilton, nous allons en
premier lieu la valider aux temps J0 et J56.
La deuxième partie de notre travail consistera à déterminer la présence d’une éventuelle
différence de réponse au traitement entre hommes et femmes. Nous utiliserons plusieurs
approches pour répondre à cette question.
DESCRIPTION DES DONNEES
Le nombre de patients ayant participé à cette étude s’élève à 146, dont 56 hommes (38%) et
90 femmes (62%).
Le score global à l’échelle de Hamilton avait, à J0 une moyenne de 27,92 et un écart-type de
4,20. Le score global le plus élevé était de 44 et le plus faible de 13.
A J56, le score global moyen atteint 7,81, avec un écart-type de 5,54. Les scores s’étalaient
entre 0 et 27.
60
0
20
40
Effectifs
80
100
120
Le nombre de visites auxquelles ont participé les patients va de 1 à 8, mais on constate que
120 individus (soit 82%) ont participé aux huit (fig.1). Seuls six patients n’en ont suivi qu’une
seule. Cela nous assure un faible taux de censures, mais on peut regretter de ne pas avoir les
informations concernant les 26 sujets sortis de l’étude avant la dernière visite. En effet, si la
sortie de l’étude est due à un suicide ou une tentative de suicide on pouvait conclure que la
dépression s’était aggravée chez le patient.
1
2
3
4
5
6
7
8
Nombre de visites effectuées
Fig.1 : Représentation graphique de la distribution du nombre de visites effectuées
VALIDATION DE L’ECHELLE DE HAMILTON
Nous allons valider l’instrument de mesure aux temps J0 et J56.
La première question à se poser est celle du contenu. Il apparaît que les 17 items que contient
l’échelle de Hamilton semblent bien correspondre à la pathologie que l’on veut décrire, à
savoir la dépression.
La validation d’un instrument de mesure se réalise en posant une question d’ordre
sémantique : « que mesure l’instrument ? » ; et une question d’ordre métrologique : « que vaut
la mesure ? ».
1. TEMPS J0 (PREMIERE VISITE)
Qualité des items
On s’assure tout d’abord qu’il n’y a pas de donnée manquante ni aberrante dans les réponses
aux différentes questions lors de la visite à J0. Toutes les données sont comprises entre 0 et 4,
et on a bien 146 lignes pour chaque question. Le taux de non-réponse est donc égal à 0,
preuve que les items sont de bonne qualité, ils sont compréhensibles et précis.
On peut vérifier que les données ne présentent pas d’effet « plafond » ou « plancher ». Pour
cela on réalise les représentations graphiques de la distribution des réponses à chaque question
(fig.2 page suivante). Dans l’ensemble les réponses semblent plutôt bien réparties. Il n’y a pas
de réponse qui n’ait jamais été choisie. La qualité des items paraît bonne, ici encore.
Pour que les items soient de bonne qualité, il faut aussi qu’ils ne soient pas trop corrélés deux
à deux. La matrice des coefficients de corrélation de Spearman permet de contrôler ce point.
Ici aucune corrélation ne dépasse 0,4. C’est la preuve que les items mesurent tous des aspects
différents de la dépression.
1
2
3
2
3
4
2
0
1
2
0
1
2
50
0 20
0
1
2
3
30
0
30 60
0
0
40
40 80
0
1
1 2 3 4
2
0
1
2
0
1
2
3
0
1
2
0
40 80
0
0
40
0
1
1
60
2
80
4
1 2 3 4
50
1
0
50
0 20
0 1 2 3
0
0 20
0
0
80
2
1 2 3 4
40
1
40 80
0
0
80
0
0 20
40
50
0
0
4
0
0 20
0
3
40 80
50
80
40
80
40
0
2
80
1
Fig.2 : Représentations graphiques de la distribution des réponses à chaque question à J0
Structure dimensionnelle de la mesure
On peut maintenant se demander s’il est correct d’additionner les réponses aux différents
items pour construire un score global.
Pour répondre, on utilise le diagramme des valeurs propres de la matrice de corrélation des
différents items (fig.3). Si une ou plusieurs valeurs propres se distinguent des autres, cela
signifie que la somme des items est une bonne estimation de « l’état réel » de dépression. De
plus, si une seule valeur propre se distingue, on pourra conclure à l’unidimensionnalité, c'està-dire que tous les items contribuent à la mesure d’une même facette de la dépression.
1.0
0.5
Eigenvalue
1.5
2.0
Afin de savoir combien de valeurs propres se distinguent, on simule sur le même graphique
20 jeux de données suivant une loi normale. Ces simulations représentent du bruit pur.
5
10
15
Dimension
Fig.3 : Diagramme des valeurs propres des 17 items à J0
On remarque que trois valeurs propres se trouvent nettement au dessus des valeurs simulées.
Il est donc acceptable de faire la somme des différents items. Par contre l’hypothèse
d’unidimensionnalité est rejetée. Cela n’est pas surprenant puisque Hamilton lui-même a mis
en évidence six facteurs différents, avant que l’unidimensionnalité soit de nouveau contestée
dans plusieurs études.
Il est alors possible de réaliser une analyse factorielle à 3 facteurs, afin de voir si une
sous-dimension est privilégiée par l’instrument de mesure.
On observe que la séparation des différents facteurs n’est pas nette. Quelques items se
positionnent clairement dans un des trois facteurs – comme l’item 12 dans le facteur 1 ou
l’item 13 dans le facteur 2 – mais dans la plupart des cas on ne peut trancher entre l’un ou
l’autre des facteurs. Cela montre que même si l’échelle n’est pas unidimensionnelle, les
différentes dimensions ont tendance à se recouper. On retrouve cette hypothèse sur le
diagramme des valeurs propres, puisque les points qui se distinguent sont proches les uns des
autres.
Cependant ces résultats sont à prendre avec précaution, étant donné que la distribution des
réponses à certaines questions semble s’écarter d’une loi normale.
Coefficient de Cronbach
Le coefficient de Cronbach mesure la consistance interne, c'est-à-dire la fiabilité de
l’instrument de mesure. Ici il est égal à 0,46. Son intervalle de confiance, calculé par bootstrap
vaut [0,22 – 0,61]. C’est un résultat moyen, mais on a déjà vu que l’échelle de Hamilton est
quelque peu controversée, ce qui semble être confirmé par l’analyse factorielle.
Validation avec une autre échelle
Pour valider l’échelle de Hamilton, on peut aussi comparer ses résultats à ceux d’un autre
instrument de mesure, comme l’échelle d’autoévaluation SCL90.
Pour ce faire, on calcule les coefficients de corrélation entre les sous-scores de l’échelle
SCL90 et le score global de l’échelle de Hamilton. On a préalablement retiré tous les patients
présentant des valeurs manquantes et aberrantes des données de l’échelle SCL90, ce qui
aboutit à un jeu de données comprenant 109 individus. Une Analyse en Composantes
Principales focalisée sur le score HDRS permet de représenter graphiquement ces corrélations
(fig.4).
.
r=0
r = 0.2
r = 0.4
r = 0.6
r = 0.8
symptobs
depression
somatisation
symdiv
anxiete
psycho
sensitivite
score
phobie
parano
hostilite
.
Fig.4 : Cercle des corrélations entre les sous-scores SCL90 et le score global HDRS à J0
On remarque que seuls quatre sous-scores sont corrélés significativement avec le score global
de Hamilton. C’est assez peu compte tenu du fait que ces deux échelles ont été validées à
plusieurs reprises. On peut cependant supposer qu’elles mesurent des aspects quelque peu
différents de la dépression, ou alors que l’échelle d’autoévaluation est plutôt représentative de
l’état du patient à un moment précis, alors que l’échelle de Hamilton est plutôt une
représentation globale de la gravité de la dépression. De plus, le sous-score Dépression a une
corrélation entre 0,3 et 0,4 avec le score de Hamilton, ce qui est très correct, puisque l’échelle
de Hamilton a avant tout pour but de donner une représentation de la dépression.
2. TEMPS J56 (HUITIEME ET DERNIERE VISITE)
Qualité des items
Comme pour l’étude à J0, il n’y a pas de donnée manquante ou aberrante dans les réponses
aux différentes questions à J56. Toutes les données varient de 0 à 4, et on a bien 120 lignes
pour chaque question, ce qui correspond au nombre de patients ayant participé à cette dernière
visite.
La représentation graphique de la distribution des réponses (fig.5, page suivante) ne permet
pas vraiment de mettre en évidence un effet « plafond » ou « plancher », mis à part peut-être
sur les questions 16 et 17 qui correspondent à la perte de poids et à la prise de conscience de
la maladie. Cependant, toutes les modalités de réponse sont représentées.
Les items ne sont pas excessivement corrélés entre eux, puisque la matrice des coefficients de
corrélation de Spearman ne contient pas de valeur supérieure à 0,6.
On peut donc dire que la qualité des items est correcte, ici aussi.
3
20 40 60
80
4
0
1
2
0
1
2
0
0
1
3
0
1
2
3
4
0
1
2
0
1
2
3
40
0
0
1
2
1
2
1
2
0
1
2
40
0
0
0
80
20 40 60
40
0
2
0
40
0
20
40
20
0
1
4
0
1
2
3
0
40
80
0
3
0
4
2
20
0
2
1
80
0
0
50
20
0
1
60
0
2
40
40
2
20 40 60
1
0
20
40
0
40
0
0
1
80
80
2
0
0 20
40
60
20 40 60
0
1
80
0
Fig.5 : Représentations graphiques de la distribution des réponses à chaque question à J56
Structure dimensionnelle de la mesure
Afin de savoir si l’unidimensionnalité est respectée, on réalise le diagramme des valeurs
propres à J56 (fig.6).
5
4
3
1
2
Eigenvalue
5
10
15
Dimension
Fig.6 : Diagramme des valeurs propres des 17 items à J56
On voit ici que la première valeur propre se distingue très largement. L’unidimensionnalité
semble respectée cette fois. On peut donc sans problème additionner les différents items pour
construire le score global.
L’analyse factorielle n’est pas nécessaire ici, d’une part parce qu’une seule valeur propre se
distingue, et d’autre part parce que la normalité de la distribution des réponses aux différents
items n’est pas respectée.
Coefficient de Cronbach
Le coefficient de Cronbach et son intervalle de confiance valent ici 0,82 [0,75 – 0,86]. Ce
coefficient est très bon, la mesure est donc très fiable.
Validation avec une autre échelle
Après avoir éliminés tous les patients présentant des données manquantes ou aberrantes des
données SCL90 – il reste alors 92 patients – on calcule les coefficients de corrélation entre les
sous-scores de l’échelle SCL90 et le score global de l’échelle de Hamilton. L’ACP focalisée
sur le score permet de représenter graphiquement ces corrélations (fig.7).
.
r=0
r = 0.2
r = 0.4
r = 0.6
r = 0.8
somatisation
symptobs
depression
symdiv
anxiete
psycho
score
sensitivite
parano
phobie
hostilite
.
Fig.7 : Cercle des corrélations entre les sous-scores SCL90 et le score global HDRS à J56
Cette fois, tous les sous-scores présentent une corrélation significative avec le score global.
Les résultats à J56 laissent à penser que l’échelle de Hamilton est un bon instrument de
mesure. Cependant, les résultats obtenus à J0 nuancent cette affirmation, tout comme l’ont fait
plusieurs publications depuis 1976.
Malgré que nos résultats à J0 semblent réfuter l’hypothèse d’unidimensionnalité, nous allons
par la suite utiliser le score global, puisque plusieurs auteurs s’accordent à dire qu’il a une
validité suffisante.
REPONSE AU TRAITEMENT SELON LE SEXE
La question est maintenant de savoir si la réponse au traitement est différente selon le sexe.
On peut créer une variable contenant la différence pour chaque individu entre son score à J0
et son score à J56.
La baisse moyenne du score est égale à 16,73 (écart-type = 9,34) chez les hommes, tandis que
chez les femmes, elle vaut 17,86 (écart-type = 8,44). A première vue les deux moyennes ne
semblent pas différentes, mais il est possible d’analyser ceci plus finement, grâce à différentes
approches.
1. METHODE LOCF / ITT
Méthodologie
La première méthode consiste à faire une analyse en intention de traiter, c’est-à-dire que les
patients qui n’ont pas participé à la totalité des visites sont analysés au même titre que ceux
qui ont participé aux huit visites. Les données manquantes pour ces patients sont calculés par
la méthode LOCF (Last Observation Carried Forward) : lorsqu’on rencontre une donnée
manquante, on la remplace par la dernière valeur observée chez le patient.
La variable d’intérêt est ici la différence entre le score à J0 et le score à J56. Les 146 patients
du jeu de données sont inclus.
C’est un modèle de régression qui est mis en place. Il explique la différence de score par le
sexe et le score à J0. On ajuste sur le score à J0 car on peut imaginer que l’importance de la
différence de score peut varier en fonction du score initial pour un patient donné.
Résultats
La régression ne nous permet pas d’accepter l’hypothèse selon laquelle la réponse au
traitement serait différente selon le sexe. En effet, le « p » correspondant à la variable sexe est
égal à 0,65, ce qui est bien au dessus des 5% habituellement requis.
Diagnostic de régression
Pour valider ce résultat, il faut cependant vérifier que les conditions de validité du modèle
sont bien respectées. On constate ici que les résidus s’écartent un peu de la normalité, mais
pas suffisamment toutefois pour rejeter la validité du modèle. De plus, l’indépendance des
résidus avec les variables expliquées et explicatives semble respectée (fig.8). Les sujets qui se
distinguent sont ceux pour lesquels la différence de score est négative, c'est-à-dire ceux qui
ont un score plus élevé à J56 qu’à J0.
1
-2
-1
0
Standardized residuals
10
120
2
-3
0
-10
Residuals
-20
120
-30
2
Normal Q-Q
2
Residuals vs Fitted
97
97
10
15
20
25
30
-2
Fitted values
-1
0
1
2
Theoretical Quantiles
Fig.8 : Représentations graphiques des résidus du modèle de régression LOCF / ITT
Discussion
Ce modèle a permis de conclure à la non-différence de réponse au traitement entre les deux
sexes, mais on peut lui trouver quelques inconvénients. D’abord, la méthode LOCF peut
induire un biais dans l’analyse puisqu’on ne sait pas ce qui a causé les données manquantes.
Enfin, ce modèle ne tient pas compte du fait que les données ont été recueillies de manière
répétée chez les patients. Il faut pour cela mettre en place un autre modèle.
2. MODELE MIXTE AVEC RESIDUS A COVARIANCE STRUCTUREE
Méthodologie
C’est le modèle mixte avec résidus à covariance structurée qui est le mieux adapté aux
données avec mesures répétées.
25
20
15
10
Moyenne du score
Tout d’abord, on s’assure que les moyennes des scores à chaque visite ont une allure linéaire
(fig.9). Si ce n’était pas le cas, il faudrait transformer les données.
1
2
3
4
5
6
7
8
Numéro de visite
Fig.9 : Moyennes des scores globaux à chaque visite
Le modèle mixte que l’on met en place permet d’expliquer le score gobal par le sexe, en
ajustant sur la date de la visite (codée quantitativement). Il implique une matrice de
corrélation dont il faut préciser la forme. Les deux plus courantes sont la matrice de Toeplitz,
qui prend en compte le fait que deux observations consécutives sont plus corrélées que deux
observations non consécutives, et la matrice AR(1), ou auto-régressive, qui considère que les
corrélations diminuent en fonction du temps.
On peut imaginer que les hommes et les femmes ont une réponse différente au traitement
selon le temps. C’est pourquoi le modèle qu’on met en place tient compte d’une interaction
entre le sexe et la date de visite. De plus la variable représentant l’identifiant de chaque sujet
est emboîtée dans la variable sexe. L’emboîtement apparaît aussi dans le modèle.
Résultats
C’est le critère d’Akaike qui nous permet de déterminer quelle forme on va préciser pour la
matrice de corrélation. Dans notre cas, il est en faveur d’une matrice AR(1).
Il apparaît que le modèle mixte avec résidus à covariance structurée ne permet pas non plus de
rejeter l’hypothèse selon laquelle la réponse au traitement serait différente entre les hommes
et les femmes (p = 0,96). Il semble que la réponse au traitement ne soit pas significativement
différente entre les hommes et les femmes en fonction du temps (p = 0,88).
Diagnostic de régression
On vérifie la normalité des résidus graphiquement (fig.10). La normalité semble très bien
respectée ici, le modèle peut donc être considéré comme valide.
Normal Q-Q Plot
-10
0
Sample Quantiles
300
200
-20
100
0
Frequency
400
10
500
20
600
Histogram of modele$residuals
-20
-10
0
modele$residuals
10
20
-3
-2
-1
0
1
Theoretical Quantiles
Fig.10 : Représentations graphiques des résidus du modèle mixte.
2
3
3. ANALYSE DES DONNEES CENSUREES
Méthodologie
Le modèle mixte avec résidus à covariance structurée donne de bons résultats, mais il ne
prend pas en compte le fait que certains patients sont sortis de l’étude avant de participer à la
huitième et dernière visite. C’est une analyse des données censurées qui va permettre de
répondre à la question de la différence de réponse au traitement entre les sexes tout en tenant
compte de leur structure particulière.
La variable d’intérêt n’est alors plus le score global ou la différence des scores, mais une
variable binaire qui sera égale à 1 quand le score aura baissé d’au moins 50% entre la
première visite et la dernière de chaque patient, et égale à 0 quand on n’aura pas observé cette
baisse.
On peut utiliser deux méthodes pour répondre à la question : la première est un simple test du
log-rank, et la seconde est le modèle de Cox. Le modèle de Cox a pour variables explicatives
le sexe, et le score à J0, qui sert à l’ajustement.
Résultats
1.0
On observe une baisse de 50% ou plus entre le premier et le dernier score de Hamilton chez
116 patients (45 chez les hommes, 71 chez les femmes), alors que 30 patients n’ont pas vu de
baisse significative de leur score au cours du suivi (11 chez les hommes, 19 chez les femmes).
0.0
0.2
0.4
Survie
0.6
0.8
Hommes
Femmes
0
10
20
30
40
50
Tps en jours
Fig.11 : Courbes de Kaplan-Meier selon le sexe
On voit que les courbes de Kaplan-Meier (fig.11) se croisent. Cela signifie qu’il n’y a pas de
différence de réponse au traitement en fonction du sexe, ce qui est en accord avec les résultats
précédents.
Le test du log-rank confirme ce résultat, de même que le modèle de Cox. Ils donnent des « p »
respectivement égaux à 0,77 et 0,86.
Validité du modèle
0
-4
-2
Beta(t) for SEXE2
2
La représentation graphique des résidus (fig.12) montre que le modèle de Cox mis en place
est valide. En effet, les résidus sont relativement dispersés, et la moyenne a une allure plutôt
constante.
8.7
13
17
21
26
33
42
51
Time
Fig.12 : Représentation graphique des résidus du modèle de Cox
Discussion
L’analyse des données de survie permet une nouvelle fois de rejeter la différence de réponse
au traitement selon le sexe. Cependant, lors du calcul de la variable binaire à expliquer, on n’a
pris en compte que le score obtenu à la dernière visite effectuée. Or pour un certain nombre de
patients, le score diminue de plus de 50% par rapport au score à la première visite, puis
remonte jusqu’à ne plus être en dessous de ce seuil. Ces individus présentent peut-être un
profil particulier qu’il pourrait être intéressant d’étudier, dans le but de rendre le modèle plus
juste.
ANNEXE : SCRIPT R
########################
###Stats Descriptives###
########################
###Fichier Sexe
###############
sex <- read.csv2("D:/Documents/Travail/devoir/devoir 2
(Hamilton)/sexe.csv");
str(sex);
summary(sex);
sex$SEXE <- as.factor(sex$SEXE);
table(sex$SEXE);
###Fichier HDRS
###############
hdrs <- read.csv2("D:/Documents/Travail/devoir/devoir 2
(Hamilton)/hdrs.csv");
str(hdrs);
summary(hdrs);
###Transformation des données
#calcul du score total pour chaque patient, à chaque visite
hdrs$score <- apply(hdrs[,3:20],1,sum,na.rm=TRUE)
#création d'un jeu de données avec seulement les scores totaux
hdrs2 <- data.frame(hdrs[,c(1,2,21)]);
#patient 128, visite J7 manquante : on supprime la ligne
hdrs2 <- hdrs2[-c(703),];
#création d'une nouvelle table avec 1 ligne / individu, 99 étant le codage
des données manquantes
#on crée d'abord une table remplie de 99
hdrs3 <data.frame(NUMERO=rep(99,146),j0=rep(99,146),j4=rep(99,146),j7=rep(99,146),
j14=rep(99,146),j21=rep(99,146),j28=rep(99,146),j42=rep(99,146),j56=rep(99,
146));
#on remplit ensuite la table avec les données de hdrs2
j <- 1; #initialisation de la variable compteur j
for(i in 1:146){ #pour chaque ligne de la table
hdrs3$NUMERO[i] <- hdrs2$NUMERO[j]; #on attribue le numéro de
l'individu à la variable num de la nouvelle table
while (hdrs3$NUMERO[i] == hdrs2$NUMERO[j] && j < 1053){ #on répète la
boucle pour toutes la visites d'un même individu
switch (hdrs2$VISIT[j], #on regarde à quelle visite correspond
l'observation et on attribue le score à la colonne
correspondante dans la nouvelle table
"J0" = (hdrs3$j0[i]<-hdrs2$score[j]),
"J14" = (hdrs3$j14[i]<-hdrs2$score[j]),
"J21" = (hdrs3$j21[i]<-hdrs2$score[j]),
"J28" = (hdrs3$j28[i]<-hdrs2$score[j]),
"J4" = (hdrs3$j4[i]<-hdrs2$score[j]),
"J42" = (hdrs3$j42[i]<-hdrs2$score[j]),
"J56" = (hdrs3$j56[i]<-hdrs2$score[j]),
"J7" = (hdrs3$j7[i]<-hdrs2$score[j])
);
j <- j+1; #incrémentation de la variable compteur
}
}
#remplacement des données manquantes (codées 99) par une case vide
for(i in 1:146){ #pour chaque ligne de la table
for(j in 2:9){
if(hdrs3[i,j]==99){
hdrs3[i,j] <- '';
}
}
}
hdrs3$j4 <- as.numeric(hdrs3$j4)
hdrs3$j4 <- as.numeric(hdrs3$j4)
hdrs3$j7 <- as.numeric(hdrs3$j7)
hdrs3$j14 <- as.numeric(hdrs3$j14)
hdrs3$j21 <- as.numeric(hdrs3$j21)
hdrs3$j28 <- as.numeric(hdrs3$j28)
hdrs3$j42 <- as.numeric(hdrs3$j42)
hdrs3$j56 <- as.numeric(hdrs3$j56)
str(hdrs3)
#statistiques descriptives de j0 et j56
summary(na.omit(hdrs3$j0))
sd(na.omit(hdrs3$j0))
summary(na.omit(hdrs3$j56))
sd(na.omit(hdrs3$j56))
#on a 2 individus pour lesquels on a une donnée manquante en cours de suivi
#on remplace cette donnée manquante par celle qui la précède, cela
permettra de faire tourner la boucle suivante
hdrs3$j4[hdrs3$NUMERO==92] <- hdrs3$j0[hdrs3$NUMERO==92]
hdrs3$j7[hdrs3$NUMERO==170] <- hdrs3$j4[hdrs3$NUMERO==170]
#statistiques descriptives sur le nombre de visites par patients
#création de la variable contenant le nombre de visites
hdrs3$nvisit <- 0;
for(i in 1:146){ #pour chaque ligne de la table
for(j in 2:9){ #pour chaque date de visite
if(!is.na(hdrs3[i,j])){
hdrs3[i,10] <- hdrs3[i,10]+1; #incrémentation du nombre
de visites
}
}
}
summary(hdrs3$nvisit)
sd(hdrs3$nvisit)
hdrs3$nvisit <- as.factor(hdrs3$nvisit)
table(hdrs3$nvisit)
barplot(table(hdrs3$nvisit), ylab="Effectifs", xlab="Nombre de visites
effectuées", col="#C20000")
##################
####Question 1####
##################
###1. Qualité des items
#aggrégation des résultats aux questions 16A et 16B :
hdrs$HAMD16 <- apply(hdrs[,18:19],1,sum,na.rm=TRUE)
nrow(hdrs[hdrs$VISIT=="J0",c(3:17,20,22)])
summary(hdrs[hdrs$VISIT=="J0",c(3:17,20,22)])
#graphs des scores à chaque question à j0
par(mfrow=c(5,4));
for(i in c(3:17,22,20)){
barplot(table(hdrs[,i][hdrs$VISIT=="J0"]), col="#C20000")
}
#graphs des scores à chaque question à j56
par(mfrow=c(5,4));
for(i in c(3:17,22,20)){
barplot(table(hdrs[,i][hdrs$VISIT=="J56"]), col="#C20000")
}
###2. Redondance des items
#matrice de corrélation des questions à J0
corrj0 <- matrix(,17,17); #création du tableau qui contiendra les
corrélations
k <- 1; #initialisation des compteurs de lignes / colonnes de la matrice
l <- 1;
for(i in c(3:17,20,22)){ #pour toutes les questions
for(j in c(3:17,20,22)){
#calcul du coefficient de corrélation, arrondi à 2 décimales
corrj0[k,l] <round(cor(na.omit(hdrs[,i][hdrs$VISIT=="J0"]),na.omit(hdrs[,j][
hdrs$VISIT=="J0"]),method="spearman"), digits = 2);
if(k<17){k <- k+1;}else{k <- 1;} #incrémentation du compteur de
lignes
}
if(l<17){l <- l+1;}else{l <- 1;} #incrémentation du compteur de
colonnes
}
corrj0
#matrice de corrélation des questions à J56
corrj56 <- matrix(,17,17); #création du tableau qui contiendra les
corrélations
k <- 1; #initialisation des compteurs de lignes / colonnes de la matrice
l <- 1;
for(i in c(3:17,20,22)){ #pour toutes les questions
for(j in c(3:17,20,22)){
#calcul du coefficient de corrélation, arrondi à 2 décimales
corrj56[k,l] <round(cor(na.omit(hdrs[,i][hdrs$VISIT=="J56"]),na.omit(hdrs[,j]
[hdrs$VISIT=="J56"]),method="spearman"), digits = 2);
if(k<17){k <- k+1;}else{k <- 1;} #incrémentation du compteur de
lignes
}
if(l<17){l <- l+1;}else{l <- 1;} #incrémentation du compteur de
colonnes
}
corrj56
###3. Analyse factorielle
library(psy)
library(mva)
##Pour J0
#on trace le diagramme des valeurs propres à J0
scree.plot(hdrs[hdrs$VISIT=="J0",c(3:17,22,20)], type = "R", simu = 20)
# sélection des colonnes
j0 <- hdrs[hdrs$VISIT=="J0",c(3:17,20,22)]
# transformation du fichier tp2 en matrice
j0 <- as.matrix(j0)
# construction d'une matrice de covariance
matrcov<-cov(j0,use = "pairwise.complete.obs")
# fonction d'analyse factorielle
print(factanal(covmat=matrcov,rotation="varimax",factors=3),cutoff=0)
##Pour J56
#on trace le diagramme des valeurs propres à J56
scree.plot(hdrs[hdrs$VISIT=="J56",c(3:17,20,22)], type = "R", simu = 20)
###4. Coefficient de Cronbach
library(psy)
#on peut appliquer le coeff tel quel car les réponses aux items vont tjs du
moins au plus grave
cronbach(hdrs[hdrs$VISIT=="J0",c(3:17,20,22)])
cronbach(hdrs[hdrs$VISIT=="J56",c(3:17,20,22)])
#on exécute un bootstrap pour calculer un intervalle de confiance du
coefficient
#pour J0 :
hdrsboot0 <- hdrs[hdrs$VISIT=="J0",c(3:17,20,22)]
library(boot)
cronboot0=function(data,x){
cron <- cronbach(hdrsboot0[x,])[[3]]
}
res0 <- boot(hdrsboot0,cronboot0,1000)
res0
quantile(res0$t,c(0.025,0.975))
plot(res0)
#pour J56 :
hdrsboot56 <- hdrs[hdrs$VISIT=="J56",c(3:17,20,22)]
library(boot)
cronboot56=function(data,x){
cron <- cronbach(hdrsboot56[x,])[[3]]
}
res56 <- boot(hdrsboot56,cronboot56,1000)
res56
quantile(res56$t,c(0.025,0.975))
plot(res56)
###5. Validation avec l'autoévaluation
#on prend le fichier duquel on a retiré les valeurs "ND" avec Excel, avant
de le ré-exporter en .csv
autoeval <- read.csv2("D:/Documents/Travail/devoir/devoir 2
(Hamilton)/autoeval2.csv");
summary(autoeval)
#on remplace les valeurs aberrantes par des valeurs manquantes
for(i in 1:1034){
for(j in 3:92){
if(!is.na(autoeval[i,j])){
if(autoeval[i,j]!=0 & autoeval[i,j] != 1 & autoeval[i,j]
!= 2 & autoeval[i,j] != 3 & autoeval[i,j] != 4){
autoeval[i,j] <- '';
}
}
}
}
str(autoeval)
#on sélectionne seulement les observations à J0 et J56 vu que ce sont
celles qui nous intéressent
scl <- autoeval[autoeval$VISIT=="J0" | autoeval$VISIT=="J56",]
summary(scl) #on vérifie qu'on a bien gardé que les J0 et J56
#on passe les variables en numérique
for(i in 3:92){
scl[,i] <- as.numeric(scl[,i])
}
str(scl)
#calcul des sous-scores
scl$somatisation <- scl$Q1 + scl$Q4 + scl$Q12 + scl$Q27 + scl$Q42 + scl$Q48
+ scl$Q49 + scl$Q52 + scl$Q53 + scl$Q56 + scl$Q58 + scl$Q40
scl$symptobs <- scl$Q9 + scl$Q10 + scl$Q28 + scl$Q38 + scl$Q3 + scl$Q45 +
scl$Q46 + scl$Q51 + scl$Q55 + scl$Q65
scl$sensitivite <- scl$Q6 + scl$Q21 + scl$Q34 + scl$Q36 + scl$Q37 + scl$Q41
+ scl$Q61 + scl$Q69 + scl$Q73
scl$depression <- scl$Q5 + scl$Q14 + scl$Q15 + scl$Q20 + scl$Q22 + scl$Q26
+ scl$Q29 + scl$Q30 + scl$Q31 + scl$Q32 + scl$Q54 + scl$Q71 + scl$Q79
scl$anxiete <- scl$Q2 + scl$Q17 + scl$Q23 + scl$Q33 + scl$Q39 + scl$Q57 +
scl$Q72 + scl$Q78 + scl$Q80 + scl$Q86
scl$hostilite<-scl$Q11+scl$Q24+scl$Q63+scl$Q67+scl$Q74+scl$Q81
scl$phobie<-scl$Q13+scl$Q25+scl$Q47+scl$Q70+scl$Q75+scl$Q82+scl$Q50
scl$parano<-scl$Q8+scl$Q18+scl$Q43+scl$Q68+scl$Q76+scl$Q83
scl$psycho<scl$Q7+scl$Q16+scl$Q35+scl$Q62+scl$Q77+scl$Q84+scl$Q85+scl$Q87+scl$Q90+scl$
Q88
scl$symdiv<-scl$Q19+scl$Q44+scl$Q59+scl$Q60+scl$Q64+scl$Q66+scl$Q89
#on exclue les patients qui ont des valeurs manquantes car le sous-score
serait alors sous-estimé
scl <- na.omit(scl)
#on ne garde que les sous-scores, le numéro et le numéro de visite
scl <- scl[,c(1,2,93:102)]
#on s'assure que les variables ont le bon format, et pas de donnée
manquante
summary(scl)
str(scl)
#on sépare les J0 et J56
scl0 <- scl[scl$VISIT=="J0",]
scl56 <- scl[scl$VISIT=="J56",]
nrow(scl0)
nrow(scl56)
#on fusionne les fichiers hdrs et scl
hdrsvalid0 <- hdrs[hdrs$VISIT=="J0",c(1,2,21)]
hdrsvalid56 <- hdrs[hdrs$VISIT=="J56",c(1,2,21)]
hdrsscl0 <- merge(hdrsvalid0,scl0, by.x = "NUMERO", by.y = "NUMERO");
hdrsscl56 <- merge(hdrsvalid56,scl56, by.x = "NUMERO", by.y = "NUMERO");
nrow(hdrsscl0)
nrow(hdrsscl56)
#on réalise l'acp focalisée sur le score global hdrs, pour J0 et J56
library(psy)
fpca(hdrsscl0,3,c(5:14))
fpca(hdrsscl56,3,c(5:14))
##################
####Question 2####
##################
#remplacement des données manquantes (codées 99) par la dernière valeur
observée (LOCF)
for(i in 1:146){ #pour chaque ligne de la table
for(j in 2:9){
if(hdrs3[i,j]==99){
hdrs3[i,j] <- hdrs3[i,j-1];
}
}
}
summary(hdrs3)
#réunion des tables hdrs et sexe
hdrs4 <- merge(hdrs3,sex, by.x = "NUMERO", by.y = "NUMERO");
hdrs4$SEXE <- as.factor(hdrs4$SEXE);
str(hdrs4)
#création de de la différence de score (J0-J56)
hdrs4$diff <- hdrs4$j0-hdrs4$j56;
summary(hdrs4$diff[hdrs4$SEXE==1])
sd(hdrs4$diff[hdrs4$SEXE==1])
summary(hdrs4$diff[hdrs4$SEXE==2])
sd(hdrs4$diff[hdrs4$SEXE==2])
###1ère partie – LOCF
#####################
#on explique la différence de score par le sexe et le score à la première
visite
mod <- lm(diff~j0+SEXE,data=hdrs4);
summary(mod);
#diagnostic de régression
par(mfrow=c(1,2)); #permet de mettre 2 graphiques côte à côte
hist(mod$residuals)
qqnorm(mod$residuals)
qqline(mod$residuals)
par(mfrow=c(2,2))
plot(mod)
###2è partie - modèle mixte
###########################
#on ne garde que les colonnes NUMERO, VISIT et score du jeu de données
original
hdrs2bis <- data.frame(hdrs[,c(1,2,21)]);
#patient 128, visite J7 manquante : on supprime la ligne
hdrs2bis <- hdrs2bis[-c(703),];
#on joint ce jeu de données avec les données de sexe
hdrs4bis <- merge(hdrs2bis,sex, by.x = "NUMERO", by.y = "NUMERO");
hdrs4bis$SEXE <- as.factor(hdrs4bis$SEXE);
#on crée une variable quantitative avec le jour de la visite
hdrs4bis$VISITQT <- substring(hdrs4bis$VISIT,2,3)
hdrs4bis$VISITQT <- as.integer(hdrs4bis$VISITQT)
str(hdrs4bis)
hdrs4bis[1:10,]
#Représentation graphique des moyennes des scores à chaque visite : c'est
linéaire => on ne transforme pas les données
plot(c(mean(hdrs4$j0),mean(hdrs4$j4),mean(hdrs4$j7),mean(hdrs4$j14),mean(hd
rs4$j21),mean(hdrs4$j28),mean(hdrs4$j42),mean(hdrs4$j56)),ylab="Moyenne du
score",xlab="Numéro de visite");
library(nlme);
#modèle mixte
#matrice de forme Toeplitz
modele <- lme(score~SEXE*VISITQT+NUMERO%in%SEXE,random=~1|NUMERO,corr=corCompSymm(),na.action=na.omit,data=hdrs4bis);
summary(modele);
#matrice de forme AR(1)
modele <- lme(score~SEXE*VISITQT+NUMERO%in%SEXE,random=~1|NUMERO,corr=corAR1(),na.action=na.omit,data=hdrs4bis);
summary(modele);
#diagnostic de régression
par(mfrow=c(1,2)); #permet de mettre 2 graphiques côte à côte
hist(modele$residuals)
qqnorm(modele$residuals)
qqline(modele$residuals)
par(mfrow=c(2,2))
plot(modele)
##################
####Question 3####
##################
library(survival)
#0 = pas de baisse, 1 = baisse de 50%
#on a 2 individus pour lesquels on a une donnée manquante en cours de suivi
#on remplace cette donnée manquante par celle qui la précède, cela
permettra de faire tourner les boucles
#et n'aura pas d'influence sur les résultats puisque la baisse de 50% ne se
produit pas à ce moment
hdrs4$j4[hdrs4$NUMERO==92] <- hdrs4$j0[hdrs4$NUMERO==92]
hdrs4$j7[hdrs4$NUMERO==170] <- hdrs4$j4[hdrs4$NUMERO==170]
#on crée 2 variables : une pour la variable mesurant la chute ou non du
score, l'autre pour le temps avant évènement ou censure
hdrs4$baisse <- 0;
hdrs4$dvie <- 1;
for(i in 1:146){ #pour tous les sujets
j <- 3;
cdt <- FALSE;
while(cdt==FALSE){ #on exécute la boucle tant que la condition est
respectée
if(!is.na(hdrs4[i,j])){ #si donnée manquante : sortie de la
boucle
if(j<=9){ #si on a atteint la dernière colonne : sortie
de la boucle
if(hdrs4[i,11]==0){ #si la chute a déjà eu lieu :
sortie de la boucle
if(hdrs4[i,j] <= hdrs4[i,2]/2){ #si le score
n’est pas <50% du score à J0
hdrs4[i,11] <- 1; #on indique que
l'évènement a eu lieu
}
hdrs4[i,12] <- j-1; #on indique le n° de
visite où a eu lieu l'évènement ou la censure
j <- j+1;
}else{cdt<-TRUE;}
}else{cdt<-TRUE;}
}else{cdt<-TRUE;}
}
}
#on remplace le numéro de visite par le jour lui correspondant
for(i in 1:146){
if(hdrs4[i,12]==1){
hdrs4[i,12]<-0;
}else{
if(hdrs4[i,12]==2){
hdrs4[i,12]<-4;
}else{
if(hdrs4[i,12]==3){
hdrs4[i,12]<-7;
}else{
if(hdrs4[i,12]==4){
hdrs4[i,12]<-14;
}else{
if(hdrs4[i,12]==5){
hdrs4[i,12]<-21;
}else{
if(hdrs4[i,12]==6){
hdrs4[i,12]<-28;
}else{
if(hdrs4[i,12]==7){
hdrs4[i,12]<-42;
}else{
if(hdrs4[i,12]==8){
hdrs4[i,12]<-56;
}}}}}}}}
}
table(hdrs4$baisse,hdrs4$SEXE)
#on vérifie la cohérence des données
summary(hdrs4)
hdrs4[c(1:10),]
hdrs4[hdrs4$baisse==0,]
#calcul de la fonction de survie
survie <- survfit(Surv(dvie,baisse)~SEXE,data=hdrs4); #fonction de survie
summary(survie)
#graph de kaplan-meier (pointillés = Femmes)
plot(survie,lty=1:2,col=c("#C20000","black"),xlab="Tps en
jours",ylab="Survie",axes=T,mark.time=F,conf.int=F)
legend("topright",lty=1:2,col=c("#C20000","black"),
c("Hommes","Femmes"),inset = .02)
#test du log-rank pour la comparaison de la survie dans les deux groupes
survdiff(Surv(dvie,baisse)~SEXE,data=hdrs4)
#modele de cox
cox <- coxph(Surv(dvie,baisse)~SEXE+j0,data=hdrs4);
summary(cox);
#validité du modèle
diag <- cox.zph(cox,transform="log")
diag
par(mfrow=c(1,2))
plot(diag)

Documents pareils