Commit 63d4d846 authored by Laurence Viry's avatar Laurence Viry
Browse files

ajout l'exemple introR - MOOC

parent 3b1209f8
Pipeline #9254 passed with stages
in 23 seconds
%% Cell type:markdown id: tags:
# Introduction au language R
L'exemple utilisé dans ce résumé de cours est issu du MOOC "Introduction à la statistique avec R" de l'Université Paris-Sud avec Christophe Lalanne & Bruno Falissard (FUN).
On considère le fichier de données "smp1.csv" relatif à l'étude santé mentale en prison, réalisée en 2004 et
financée par le Ministère de la Justice et le Ministère de la Santé. Cette étude a porté sur 799 détenus masculins tirés au sort dans les prisons de France métropolitaine. Nous avons un extrait de 9 variables avec :
* l'âge,<br\>
* la profession du détenu,<br\>
* l'existence d'un diagnostic de dépression, de schizophrénie, réalisé par 2 cliniciens, c'est
un diagnostic consensuel,<br\>
* le niveau de gravité éventuelle de la pathologie du détenu, ici gravité consensuelle également,<br\>
* le nombre d'enfants du détenu.<br\>
et 3 variables représentant la personnalité du détenu:
* le niveau de recherche de sensation (**rs**)<br\>
* le niveau d'évitement du danger (**ed**)<br\>
* et le niveau de dépendance à la récompense (**dr**)<br\>
## Importation des données et manipulation des variables
Le chargement du fichier **smp1.csv** se fait à l’aide de la fonction **read.csv()**, qui permet de lire des fichiers
CSV. Le *séparateur de champ* est un point-virgule, et *le séparateur décimal* une virgule. Les données seront associées à la variable **smp** à l’aide de l’opérateur d’affectation **"<-"**.
On considère le répertoire contenant le fichier smp1.csv comme répertoire de travail, en utilisant la fonction **setwd()**.
%% Cell type:code id: tags:
``` R
setwd('/home/viryl/notebooks/CED-IntroR/TP/data')
smp <- read.csv("smp1.csv",header=TRUE,sep=";",dec=",")
```
%% Cell type:markdown id: tags:
Une fois que les données sont importées, la variable **smp** sera disponible dans l’espace de travail(“workspace” ou "Environment"), comme on peut le vérifier avec la commande **ls()**.
Les dimensions du tableau de données peuvent être obtenues à l’aide de la fonction **dim()**, et la fonction
**names()** fournit le nom des variables.
%% Cell type:code id: tags:
``` R
ls()
dim(smp)
names(smp)
```
%% Cell type:markdown id: tags:
La commande **str()** fournit un résumé de l’ensemble des variables avec leurtype(ou mode de représentation)
- *int*: pour les variables numériques,
- *factor*: pour les variables catégorielles
- et un aperçu des 10 premières observations.
%% Cell type:code id: tags:
``` R
str(smp)
summary(smp)
```
%% Cell type:markdown id: tags:
Une autre commande utile pour inspecter la structure de données est la commande **summary()** qui fournit un résumé descriptif univarié pour chaque variable.
Dans le cas **des variables numériques**, R indique les principaux
indicateurs de tendance centrale(moyenne et médiane) et de dispersion(étendue,intervalle inter-quartile), ainsi
que le nombre de valeurs manquantes représentées par le symbole NA.
Dans le cas **des variables catégorielles**, R fournit un tableau d’effectifs, c’est-à-dire le nombre d’observations associées à chacune des modalités de la variable.
%% Cell type:code id: tags:
``` R
summary(smp)
```
%% Cell type:markdown id: tags:
### Travailler avec des variables numériques
Pour afficher l’ensemble des observations recueillies pour une variable donnée, on tapera le nom de cette variable préfixé du nom du dataframe suivi du signe **$**. L’expression **smp$age** désignera ainsi les valeurs prises par la variable "age" dans le dat-frame **smp**.
Plutôt que d’afficher l’ensemble des valeurs, on peut vouloir limiter l’affichage à certaines observations, que l’on désignera par leur numéro. On peut ainsi choisir d’afficher, la première, les deux premières, ou la première et la troisième observation à l’aide des instructions suivantes:
%% Cell type:code id: tags:
``` R
smp$age[1]
smp$age[c(1,2)]
smp$age[c(1,3)]
```
%%%% Output: display_data
31
31
%%%% Output: display_data
1. 31
2. 49
\begin{enumerate*}
\item 31
\item 49
\end{enumerate*}
%%%% Output: display_data
1. 31
2. 50
\begin{enumerate*}
\item 31
\item 50
\end{enumerate*}
%% Cell type:markdown id: tags:
ou un ensemble d’observations consécutives en utilisant la notation **[i:j]** Pour afficher les 10 premières observations.
%% Cell type:code id: tags:
``` R
smp$age[1:10]
```
%%%% Output: display_data
1. 31
2. 49
3. 50
4. 47
5. 23
6. 34
7. 24
8. 52
9. 42
10. 45
\begin{enumerate*}
\item 31
\item 49
\item 50
\item 47
\item 23
\item 34
\item 24
\item 52
\item 42
\item 45
\end{enumerate*}
%% Cell type:markdown id: tags:
La commande **summary()** fonctionne également avec une variable et fournit, comme dans le cas d’un dataframe,
un résumé numérique de la distribution de la variable selon son type.
%% Cell type:code id: tags:
``` R
summary(smp$age)
min(smp$age)
```
%%%% Output: display_data
%%%% Output: display_data
%% Cell type:markdown id: tags:
Eneffet,danslecasoùunevariablecontientdesdonnéesmanquantes,ilfautindiquerexplicitementàRcequel’on
souhaitefairedesvaleursmanquantes.Pardéfaut,Rnesupprimepaslesvaleursmanquantes,commeonpeutle
vérifierdansl’aideenligne(
na.rm = FALSE
),etsecontentederenvoyerlavaleur
NA
poursignaleràl’utilisateur
quecertainesdonnéessontmanquantes.
%% Cell type:code id: tags:
``` R
min(smp$age,na.rm=TRUE)
```
%% Cell type:markdown id: tags:
L’étenduedesvaleursobservéess’obtientavec
range()
qui,contrairementà
min()
,estunecommandequi
renvoiedesrésultatsmultiples(danscecas,leminimumetlemaximumdelavariable
age
).
%% Cell type:code id: tags:
``` R
range(smp$age,na.rm=TRUE)
rg_age <- range(smp$age,na.rm=TRUE)
class(rg_age)
length(rg_age)
rg_age[1]
rg_age[2]
```
%%%% Output: display_data
1. 19
2. 83
\begin{enumerate*}
\item 19
\item 83
\end{enumerate*}
%%%% Output: display_data
'integer'
'integer'
%%%% Output: display_data
2
2
%%%% Output: display_data
19
19
%%%% Output: display_data
83
83
%% Cell type:markdown id: tags:
### Travailler avec les variables binaires
%% Cell type:markdown id: tags:
### Représentation des variables qualitatives
%% Cell type:markdown id: tags:
### Recodage des variables
Considéronslavariable
n.enfant
,quireprésentelenombred’enfantsdanslafamilledurépondant.Unsimple
tableaud’effectifsconfirmeralanaturediscrètedecettevariable,et
%% Cell type:code id: tags:
``` R
table(smp$n.enfant,useNA ="always")
```
%%%% Output: display_data
%% Cell type:markdown id: tags:
onnoteraquel’onpeuttrèsbieneffectuerun
tableaud’effectifsàpartird’uneconditionlogique,parexempledénombrerlesindividusayant4enfantsoumoinset
ceuxayantplusde4enfants,commeillustréci-dessous:
%% Cell type:code id: tags:
``` R
table(smp$n.enfant >4)
```
%%%% Output: display_data
%% Cell type:markdown id: tags:
Supposons à présent que l’on souhaite regrouper dans une même classe les individus ayant 5 enfants ou plus. Pour
cela, il suffit de convertir la variable **n.enfant** en facteur, puis d’agréger ces derniers niveauxgrâce à la commande levels().
%% Cell type:code id: tags:
``` R
smp$n.enfant.cat <-factor(smp$n.enfant)
levels(smp$n.enfant.cat)[6:13] <-"5+"
nlevels(smp$n.enfant.cat)
# table de frequences
table(smp$n.enfant.cat)
```
%%%% Output: display_data
6
6
%%%% Output: display_data
%% Cell type:markdown id: tags:
Il est également possible de recoder en variable qualitative des variables continues à l’origine. Par exemple, avec la
variable age, il serait tout à fait possible de créer une variable **age.cat** à 4 classes d’effectifs à peu près équilibrés à l’aide de la commande **cut()**. Avec cette commande, il est important de préciser l’option **"include.lowest = TRUE"** pour ne pas oublier d’inclure l’observation dont l’âge vaut l’âge minimal, puisque pardéfaut les intervalles ont des bornes ouvertes(c’est-à-dire n’incluant pas) à gauche.
%% Cell type:code id: tags:
``` R
smp$age.cat <-cut(smp$age,breaks =c(19, 25, 35, 45, 83),include.lowest =TRUE)
table(smp$age.cat)
```
%%%% Output: display_data
%% Cell type:markdown id: tags:
### Sauvegarde de données
Il est tout à fait possible de sauvegarder des données au format **RData**, qui est un format propre au logiciel R. Cela facilite l’archivage de résultats intermédiaires ou l’enregistrement d’un tableau de données nettoyé(recodage de
valeurs manquantes ou modalités de variables qualitatives,correction des erreurs de saisie,etc.)ou augmenté de
variables auxiliaires. Pour cela, on utilisera la commande **save()**. La commande **load()** permet quant à elle de
recharger des données sauvegardées au format **RData**. L’extension du ficher peu-être indifféremment **RData** ou **rda**.
%% Cell type:code id: tags:
``` R
save(smp,file ="smp_v1.rda")
dir(pattern ="rda")
```
%% Cell type:code id: tags:
``` R
load("smp_v1.rda")
```
%% Cell type:markdown id: tags:
### Enregistrement des commandes
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment