Ce devoir évalué par les pairs consiste en l’analyse d’un dataframe d’enquête de satisfaction en hopital. Le format du présent fichier est le markdown pour R qui permet de mixer du code et du texte afin de produire un rapport de qualité. Ce format diffère légérement du format script R mais permet d’aboutir au même résultat.
“Pour les trois variables catégorielles du fichier (à vous de déterminer de quelles variables il s’agit), présentez les pourcentages de sujets relevant de chacune des modalités.”
1 variable catégorielle = variable qualitative = 1 facteur = 1 variable dont les valeurs ne mesurent rien de particulier mais permettent de définir des niveaux, des catégories, des modalités. Contrairement à des variables quantitatives qui mesurent des propriétés quantifiables
Les 3 variables catégorielles du fichier sont: service / profession / sexe
Pour effectuer des calculs quels qu’ils soient, il faut tout d’abord charger le fichier de données pour obtenir un dataframe utilisable par R
read.csv2("satisfaction_hopital.csv")->satpatient
Une fois le dataframe disponible, on utilise la fonction table qui permet de compter les occurences d’une modalité d’un dataframe. Par exemple pour la modalité sexe
table(satpatient$sexe)
##
## 0 1
## 268 266
prop.table permet de calculer les fréquences relatives pour une variable donnée
prop.table(table(satpatient$sexe))
##
## 0 1
## 0.5018727 0.4981273
Enfin, pour avoir un pourcentage plutot qu’une fréquence, il suffit de multiplier par 100. On peux également contrôler la précision avec la fonction round: ici 2 chiffres après la virgule
round(prop.table(table(satpatient$sexe))*100,2)
##
## 0 1
## 50.19 49.81
Finalement, la combinaison de table, prop.table et round permet de répondre à la question
round(prop.table(table(satpatient$sexe))*100,2)
##
## 0 1
## 50.19 49.81
round(prop.table(table(satpatient$service))*100,2)
##
## 1 2 3 4 5 6 7 8
## 12.17 11.05 13.11 12.92 13.30 11.99 12.55 12.92
round(prop.table(table(satpatient$profession))*100,2)
##
## 1 2 3 4 5 6 7 8
## 0.23 8.90 29.04 20.61 16.16 10.30 5.15 9.60
“Pour les autres variables, donnez de façon synthétique : moyenne, médiane, écart-type, minimum, maximum, nombre de données disponibles (non manquantes).”
Plusieurs fonctions R permettent de connaître en synthèse le contenu d’un dataframe parmi ces commandes, on trouve names, summary, describe La plus complet reste la fonction describle disponible après avoir chargé la library prettyR. Cette fonction affiche en ligne les modalités et en colonne moyenne, médiane, variance (var), écart-type (sd), le nb de valeurs non manquantes (valid.n)
library(prettyR)
describe(satpatient)
## Description of satpatient
##
## Numeric
## mean median var sd valid.n
## service 4.55 5 5.19 2.28 534
## sexe 0.50 0 0.25 0.50 534
## age 58.21 60 317.17 17.81 528
## profession 4.43 4 3.06 1.75 427
## amelioration.sante 2.23 2 0.59 0.77 376
## amelioration.moral 1.68 1 0.90 0.95 383
## recommander 1.62 2 0.31 0.56 405
## score.relation 35.22 36 21.38 4.62 349
## score.information 31.91 33 46.15 6.79 358
Pour ajouter la valeur min et max, il faut spécifier l’argument num.desc qui décrit l’ensemble des fonctions à excuter pour chaque modalité
describe(satpatient, num.desc=c("mean","median","max","var","sd","valid.n", "min", "max"))
## Description of satpatient
##
## Numeric
## mean median max var sd valid.n min max
## service 4.55 5 8 5.19 2.28 534 1 8
## sexe 0.50 0 1 0.25 0.50 534 0 1
## age 58.21 60 97 317.17 17.81 528 18 97
## profession 4.43 4 8 3.06 1.75 427 1 8
## amelioration.sante 2.23 2 3 0.59 0.77 376 0 3
## amelioration.moral 1.68 1 3 0.90 0.95 383 0 3
## recommander 1.62 2 2 0.31 0.56 405 0 2
## score.relation 35.22 36 40 21.38 4.62 349 13 40
## score.information 31.91 33 40 46.15 6.79 358 13 40
“Faites un histogramme du score de relation (score.relation).”
L’historgramme du score des relations est une représentaton graphique de la distribution de la modalité score.relation sur le nombre total de patients sondés
hist(satpatient$score.relation,xlab = "Qualité de la relation patient",ylab = "Nb. patient", main="Distribution du score des relations",col="grey")
"A l’aide de deux « boxplots », représentez côte à côte la distribution du score de relation chez les hommes et les femmes.
La représentation boite à moustache permet d’observer la distribution de variable quantitative score.relation * la boite contient 50% des données * il y a 25% des données entre la boite et la moustache supérieure * il y a 25% des données entre la boîte et la moustache inférieure La formule est plus complexe que cela c’est la raison pour laquelle on voit des valeurs en dessous de la moustache inférieure/supérieure. Ce sont des valeurs extremes
boxplot(satpatient$score.relation)
Si l’on souhaite connaître la distribution de cette variable quantitative en fonction du sexe du patient, alors il suffit d’utiliser la notation “~” NOTE: On remarque que cette distribution ne présente pas de différence notable: les hommes et les femmes ont noté de façon homogène la qualité de la relation
boxplot(satpatient$score.relation~satpatient$sexe, xlab="Sexe",ylab="Nb. patients", main="Distribution du score des relations par sexe", col="grey")
barplot(round(prop.table(table(satpatient$sexe))*100,1),main = "Pourcentages de sujets par sexe")
Si on souhaite avoir des libellés plus parlants, alors on créé 1 modalité avec des levels associés correspondant à des libellés parlants. On utilise la fonction factor. Ici pour la modalité sexe, on rajoute la modalité sexe.cat
satpatient$sexe.cat<- factor(satpatient$sexe,level=c(0,1), labels=c("homme", "femme"))
Il suffit ensuite d’appliquer barplot à cette nouvelle modalité
barplot(round(prop.table(table(satpatient$sexe.cat))*100,1),main = "Pourcentages de sujets par sexe")
Le partage de document est très convivial avec la fonction publish de Rstudio. Il faut créer un fichier R MarkDown au lieu d’un fichier R script et s’approprier la syntaxe markdown: voir R Markdown: The Definitive Guide. A titre d’exemple, le présent rapport a été publié sur bookdown.org à l’adresse : https://bookdown.org/connect/#/apps/1811/access/301. Pour cela, il a fallu installer 1 library et lancer 2 fois 1 commande.
install.packages("bookdown")
bookdown::publish_book()
bookdown::publish_book()