Libre (Gratuit , licence GPL)
Code source ouvert (Open Source)
Multiplateforme (Windows , Mac , Linux)
Orienté calcul scientifique et statistique
Septembre 2020
Master Sciences du médicament
Omran.Allatif@ens-lyon.fr
Libre (Gratuit , licence GPL)
Code source ouvert (Open Source)
Multiplateforme (Windows , Mac , Linux)
Orienté calcul scientifique et statistique
Créer un nouveau dossier dans votre espace de travail: Clic droit => Nouveau => Dossier.
Nommer le dossier, par exemple, ‘TP R’.
Sous Windows 10, si aucun raccourci n’est disponible : => Program Files => R => bin => x64 => Rgui.exe
Ficher => Nouveau script
Ficher => Sauver sous…
Naviguer jusqu’à votre dossier ‘TP R’ et donner un nom au script, par exemple, “MonScript.R”.
Important: Les noms des scripts R doivent se terminer par .R
Nous écrirons dans le script créé, une à une, toutes les instructions ci-dessous, puis nous les exécuterons afin d’observer leurs actions.
# Exemple :
setwd("C:\\Users\\oallatif\\temp")
# À la place de "C:\\Users\\oallatif\\temp\\" écrire le chemin de votre dossier 'TP R'.
# Pour obtenir le chemin du dossier 'TP R', nous pouvons utiliser R déja : écrire dans la R console: choose.dir()
# et faire Entrée. Naviguer ensuite jusqu'au dossier 'TP R' => Faire Ok => le chemin s'affichera alors
# dans la R console.
# install.packages("openxlsx")
# Obligatoire pour les packages dont on a besoin. À faire une fois sur un même ordinateur.
library("openxlsx")
# Obligatoire pour les packages dont on a besoin pendant la session de travail.
NOTE: lorsque le texte de cette présentation est dans une bande de couleur violette c’est qu’il s’agit d’une instruction R, le texte qui suit un ‘#’ est interprété en tant que commentaire qui peut être inséré dans un programme R sans effet sur le programme, il permet cependant d’annoter et d’expliquer le code.
MaTableEnLigne <- read.table("https://git.io/vbiaS" , header = TRUE)
# J'affecte les données en ligne à un objet que je nomme 'MaTableEnLigne'.
# Les noms des objets ne doivent pas commencer par un chiffre ni contenir des espaces ou des caractères spéciaux.
# 'header=TRUE' signifie que la 1ère ligne contient les noms des colonnes. Plus généralement, pour avoir la
# description d'une fonction R et de ses arguments, il faut faire: help(nom de la fonction).
# Exemple: help(read.table)
write.table(MaTableEnLigne , "MaTableEnLocal.txt" , row.names = FALSE)
MaTableEnLocal <- read.table("MaTableEnLocal.txt" , header = TRUE)
identical(summary(MaTableEnLocal) , summary(MaTableEnLigne))
## [1] TRUE
write.xlsx(MaTableEnLigne , "MaTableEnLocal.xlsx")
CM1 <- read.xlsx("MaTableEnLocal.xlsx" , sheet = 1)
CM1 <- MaTableEnLigne # Je réaffecte à l'objet CM1 le contenu de la table distante.
head(CM1) #Montrer les 6 premières lignes de toutes les colonnes de la table MaTableEnLocal.
## x y ## 1 -0.1688613 8.935373 ## 2 0.9477892 6.523501 ## 3 4.6239681 18.649757 ## 4 5.3075947 22.613518 ## 5 6.1003234 15.965711 ## 6 6.6252482 16.377628
nrow(CM1) # Nombre d'observations (Le nombre de lignes de la table).
## [1] 20
ncol(CM1) # Nombre de variables (Le nombre de colonnes de la table).
## [1] 2
colnames(CM1) # Noms des variables de la table.
## [1] "x" "y"
CM1$y # l'opérateur '$' entre 'CM1' et 'y' permet d'extraire de la table 'CM1' la colonne 'y'.
## [1] 8.935373 6.523501 18.649757 22.613518 15.965711 16.377628 22.271611 ## [8] 19.426137 16.603166 25.587190 23.682441 26.848028 23.655190 30.597357 ## [15] 32.777300 32.020974 27.205078 33.229944 35.586207 42.126671
sum(CM1$y > 20) # Nombre de valeurs de y supérieures à 20.
## [1] 13
sum(CM1$y > 20)/nrow(CM1) # La proportion des valeurs>20 dans y.
## [1] 0.65
1- Extraction par position
CM1[ c(6 , 8) , ] # Extraire les lignes 6 et 8 de toutes les colonnes de la table CM1.
## x y ## 6 6.625248 16.37763 ## 8 7.087733 19.42614
CM1[ c(6 , 8) , 2 ] # Extraire les lignes 6 et 8 de la colonne 2 de la table CM1.
## [1] 16.37763 19.42614
2- Extraction par nom
CM1[ , "y"] # Extraire les valeurs de la colonne 'y' de la table CM1.
## [1] 8.935373 6.523501 18.649757 22.613518 15.965711 16.377628 22.271611 ## [8] 19.426137 16.603166 25.587190 23.682441 26.848028 23.655190 30.597357 ## [15] 32.777300 32.020974 27.205078 33.229944 35.586207 42.126671
plot(CM1$x , CM1$y) #Affichage graphique de 'x' en fonction de 'y'.
plot(CM1$x , CM1$y , col = ifelse(CM1$x < 10 , 'magenta' , 'gold') , pch = 19 , cex = 2 , main = 'Graphique avec R: couleur magenta pour les valeurs de x inf. à 10.') # Repérer les individus sur le graphique. text(CM1$x , CM1$y , rownames(CM1) , col ='white' , cex =0.7) #la fonction 'text()' superpose du texte sur le graph.
suppressPackageStartupMessages({library(plotly)})
library(plotly)
plot_ly(CM1 , x = ~x , y = ~y , type='scatter' , mode='markers')%>%
layout(title = "Ce paragraphe n'est pas au programme , c'est une démonstration")
Soit \(A\) un vecteur de valeurs numériques de taille \(n_A\) , de moyenne \(\mu_A\) et de variace \(Var_A\). Nous souhaitons savoir si \(\mu_A\) est différente d’une moyenne (une valeur) théorique \(\mu_{theo}\) donnée. Pour cela nous calculerons 2 statistiques : (1) \(t_{obs}\) à partir des données observées et (2) \(t_{critique}\) à partir , en partie , des données observées et du niveau de confiance dans notre résultat , un niveau que nous choissions.
Notre test est bilateral
Hypothèses :
\(H_0:\mu_A = \mu_{theo}\) vérifiée si \(t_{obs}<t_{critique} \quad ou \quad t_{obs} > -t_{critique}\)
\(H_1:\mu_A \neq \mu_{theo}\) vérifiée si \(t_{obs}>t_{critique} \quad ou \quad t_{obs} < -t_{critique}\)
A <- iris$Sepal.Width #l'opérateur '$' entre 'iris' et 'Sepal.Width' permet de sélectionner de la table 'iris' la colonne 'Sepal.Width'.
La statistique du test de Student pour un échantillon \(t_{obs}\) est calculée comme suit:
\[t_{obs} = \frac{\mu_A - \mu_{theo}}{\sqrt{\frac {Var_A} {n_A} }}\]
1- la taille de A
n_A <- length(A)
2- la moyenne de A \[\mu_A = \frac 1 n_A \sum_{i=1}^{n_A} A_i\]
mu_A <- sum(A)/n_A mu_A
## [1] 3.057333
3- la variance de A
\[Var_A = \frac1{n_A-1}\sum_{i=1}^{n_A}(A_i-\mu_A)^2 \]
var_A <- (1/(n_A-1))*sum((A-mu_A)^2) var_A
## [1] 0.1899794
Supposons que \(\mu_{theo}\) vaut 3 ,
mu_theo <- 3
Alors \(t_{obs}\) vaut :
\[t_{obs} = \frac{\mu_A - \mu_{theo}}{\sqrt{\frac {Var_A} {n_A} }}\]
t_obs <- (mu_A - mu_theo)/sqrt(var_A/n_A) t_obs
## [1] 1.611015
\(t_{critique}\) est un quantile de la loi de Student qui dépend des ddl et du risque \(\alpha\) que nous choissions. Nous recherchons traditionnellement cette valeur dans la table de la loi de Student.
\(t_{critique} : \quad t^{n_{A}-1 \quad ddl}_{1-\alpha/2}\)
Nous pouvons également la calculer avec la fonction \(qt\) dans R.
ddl <- n_A-1 alpha <- 0.05 t_critique <- qt(p = 1-alpha/2 , df = ddl) t_critique
## [1] 1.976013
Rappel : \(H_1:\mu_A \neq \mu_{theo}\) est vérifiée si \(t_{obs}>t_{critique} \quad ou \quad t_{obs} < -t_{critique}\)
Quelle conclusion ?
X<- rt(1e4 , df = ddl) ; Y <- dt(X , df = ddl)
plot(X , Y , col= adjustcolor('lightseagreen' , alpha.f = 0.2) , pch = 19 , xlim = c(-6 , 6) , cex = 2 ,
main = "Distribution de la loi de Student à n_A-1 degrés de liberté")
abline(v = c(-t_critique , t_critique ) , col = "blue")
text(x =c(-t_critique - 0.2 , t_critique+0.2 ) , y = c(0.2 , 0.2) , c("-t_critique" , "t_critique" ) ,
srt = 90 , col = "blue")
abline(v = c(-t_obs , t_obs ) , col = 'gold')
text(x =c( -t_obs+ 0.2 , t_obs- 0.2 ) , y = c(0.33) , c("-t_obs" , "t_obs") , srt = 90 , col = "gold")
p_valeur <- 2*pt(q = t_obs , df = ddl , lower.tail = F) p_valeur
## [1] 0.1092929
t.test(A , mu = mu_theo)
## ## One Sample t-test ## ## data: A ## t = 1.611, df = 149, p-value = 0.1093 ## alternative hypothesis: true mean is not equal to 3 ## 95 percent confidence interval: ## 2.987010 3.127656 ## sample estimates: ## mean of x ## 3.057333
Fin de la présentation