library(tidyverse)
Notes de cours 2024
Polices dans markdown
Bonjour
Bonjour
Bonjour
Bonjour
Les sous-sections
Les sous-sous-sections
Allez regarder Quarto dans R sur youtube
Ce que vous voyez dans le bandeau grisé s’appelle un Chunk c’est dans cet espace que nous allons écrire les codes R
1+1 # Un simple calcul
[1] 2
# Afficher le data frame cars
speed dist
1 4 2
2 4 10
3 7 4
4 7 22
5 8 16
6 9 10
7 10 18
8 10 26
9 10 34
10 11 17
11 11 28
12 12 14
13 12 20
14 12 24
15 12 28
16 13 26
17 13 34
18 13 34
19 13 46
20 14 26
21 14 36
22 14 60
23 14 80
24 15 20
25 15 26
26 15 54
27 16 32
28 16 40
29 17 32
30 17 40
31 17 50
32 18 42
33 18 56
34 18 76
35 18 84
36 19 36
37 19 46
38 19 68
39 20 32
40 20 48
41 20 52
42 20 56
43 20 64
44 22 66
45 23 54
46 24 70
47 24 92
48 24 93
49 24 120
50 25 85
dim(cars) # Dimension du dataframe
[1] 50 2
names(cars) # Me donne le nom des colonnes (ou des variables
[1] "speed" "dist"
help(cars)
$speed # Afficher la variable speed cars
[1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
1] # Idem cars[,
[1] 4 4 7 7 8 9 10 10 10 11 11 12 12 12 12 13 13 13 13 14 14 14 14 15 15
[26] 15 16 16 17 17 17 18 18 18 18 19 19 19 20 20 20 20 20 22 23 24 24 24 24 25
28,1] # Afficher la 28 eme observation de la variable speed cars[
[1] 16
plot(cars)
%>%plot() cars
# Charger les données cars et sélectionner la variable speed
<-
speed_data
$speed%>%mean() # Moyenne
cars$speed%>%var() # Variance cars
[1] 27.95918
$speed%>%sum() # Somme cars
[1] 770
$speed%>%sd() # Ecart-type cars
[1] 5.287644
$speed%>%quantile() cars
0% 25% 50% 75% 100%
4 12 15 19 25
select(cars,speed)
speed
1 4
2 4
3 7
4 7
5 8
6 9
7 10
8 10
9 10
10 11
11 11
12 12
13 12
14 12
15 12
16 13
17 13
18 13
19 13
20 14
21 14
22 14
23 14
24 15
25 15
26 15
27 16
28 16
29 17
30 17
31 17
32 18
33 18
34 18
35 18
36 19
37 19
38 19
39 20
40 20
41 20
42 20
43 20
44 22
45 23
46 24
47 24
48 24
49 24
50 25
# Afficher les premières lignes du nouveau data frame contenant uniquement la variable speed
head(speed_data)
[1] 15.4
%>%mutate(vitesse = speed *1.60934,speed = NULL, distance = dist*1.60934, dist= NULL)->frcars
cars
frcars
vitesse distance
1 6.43736 3.21868
2 6.43736 16.09340
3 11.26538 6.43736
4 11.26538 35.40548
5 12.87472 25.74944
6 14.48406 16.09340
7 16.09340 28.96812
8 16.09340 41.84284
9 16.09340 54.71756
10 17.70274 27.35878
11 17.70274 45.06152
12 19.31208 22.53076
13 19.31208 32.18680
14 19.31208 38.62416
15 19.31208 45.06152
16 20.92142 41.84284
17 20.92142 54.71756
18 20.92142 54.71756
19 20.92142 74.02964
20 22.53076 41.84284
21 22.53076 57.93624
22 22.53076 96.56040
23 22.53076 128.74720
24 24.14010 32.18680
25 24.14010 41.84284
26 24.14010 86.90436
27 25.74944 51.49888
28 25.74944 64.37360
29 27.35878 51.49888
30 27.35878 64.37360
31 27.35878 80.46700
32 28.96812 67.59228
33 28.96812 90.12304
34 28.96812 122.30984
35 28.96812 135.18456
36 30.57746 57.93624
37 30.57746 74.02964
38 30.57746 109.43512
39 32.18680 51.49888
40 32.18680 77.24832
41 32.18680 83.68568
42 32.18680 90.12304
43 32.18680 102.99776
44 35.40548 106.21644
45 37.01482 86.90436
46 38.62416 112.65380
47 38.62416 148.05928
48 38.62416 149.66862
49 38.62416 193.12080
50 40.23350 136.79390
# Créer une variable vitesse en kmh
::summarise(cars, Vitesse_moyenne_mph = mean(speed),Distance_moyenne_m = mean(dist),
dplyrVitesse_sd_mph = sd(speed),Distance_sd_m = sd(dist)
)
Vitesse_moyenne_mph Distance_moyenne_m Vitesse_sd_mph Distance_sd_m
1 15.4 42.98 5.287644 25.76938
Tidyverse
Pipe
Cheat sheet Importer des données excel
library(readxl)
<- read_excel("Exercice4.xlsx")
Exercice4 %>%table() # Table de fréquence Exercice4
Vote
A B
512 488
Vecteurs
c(12,15,17)%>%mean()
[1] 14.66667
<-c(12,15,17)
age%>%mean() age
[1] 14.66667
+5)%>%mean() (age
[1] 19.66667
#c(1,2,3,..)
1:100
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
[19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
[37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
[55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
[73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
[91] 91 92 93 94 95 96 97 98 99 100
Les probabilités dans R
La loi binomiale
On réplique une expérience \(n\) fois une expérience de manière indépendante qui peut conduire à un succès ou un échec avec une même probabilté \(p\). A la fin de l’expérience on compte le nombre de succès. Le nombre de succès peut varier pour tous les entiers entre \(0\) à \(n\), i.e. \(0, 1,\cdots,n\). On les appelle mles modalités possibles.
Comme le résultat de cet expérience est aléatoire, on le note en utilsant une variable dite aléatoire. On les notes généralement avec des lettres majuscules, en général \(X,Y,Z,\cdots\). Appelons-là \(X\) dans notre contexte. Dans notre expérience, on dit que \(X\) suit une loi binomiale de paramètres \(n\) et \(p\). On utilise cette notation mathématique \(X\sim\mathcal{B}(n,p)\).
Nous devons rappeler les probabilités de chaque modalité. On sait que \[ \Pr(X=x)=\binom{n}{x}p^{x}(1-p)^{n-x},\:x=0,\cdots,n. \] ## La loi binomiale sur R
Les coefficient binomaiaux dans R. Combien à t’on de manières de choisir \(2\) personnes parmi \(10\).
# Les paramètres
<- 10
n <- 2
x choose(n,x)
[1] 45
# Si je fais la somme de 9 à 1
9:1%>%sum()
[1] 45
# 9+8+...+1
Allons plus loins, je veux afficher le nomnre de façons de choisir \(x\) objets parmi 10 pour toutes les valeurs de \(x\).
choose(n,0:10)
[1] 1 10 45 120 210 252 210 120 45 10 1
%>%choose(0:10) n
[1] 1 10 45 120 210 252 210 120 45 10 1
La fonction pour calculer les probabilités pour une loi binomiale
<-0.5
pdbinom(0:10,n,p)
[1] 0.0009765625 0.0097656250 0.0439453125 0.1171875000 0.2050781250
[6] 0.2460937500 0.2050781250 0.1171875000 0.0439453125 0.0097656250
[11] 0.0009765625
dbinom(0:10,10,.5)%>%sum()
[1] 1
CDF
Quelle est la probabilité d’avoir 5 ou moins de 5 succès (au plus 5 succès) \[ \Pr(X\leq 5) \]
dbinom(0:5,10,0.5)%>%sum() # Manière non élégante
[1] 0.6230469
pbinom(5,10,0.5) # Manière plus élégante
[1] 0.6230469
Quelle est la probabilité plus de 5 \[ \Pr(X> 5)=1-\Pr(X\leq 5) \]
dbinom(6:10,10,0.5)%>%sum() # Manière non élégante
[1] 0.3769531
1-pbinom(5,10,0.5) # Manière intermédiaire
[1] 0.3769531
pbinom(5,10,0.5,lower.tail=FALSE) # Manière plus élégante
[1] 0.3769531
Faire un beau tableau avec deux colonnes x et les probas
Utilisation de Stargazer
Je vais illustrer l’utilisation de Stargazer et autres avec un exemple simple sur la loi binomiale.
# Définir les paramètres de la loi binomiale
<- 5 # nombre d'expériences
n <- 0.2 # probabilité de succès
p
<-tibble(x = 0:n)%>%mutate(Pr= dbinom(x,n,p))
reslibrary(stargazer)
Please cite as:
Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
%>%stargazer(type = "text",summary = F,title = "Distribution de probabilité de la Loi Binomiale",header = FALSE) res
Distribution de probabilité de la Loi Binomiale
===========
x Pr
-----------
1 0 0.32768
2 1 0.4096
3 2 0.2048
4 3 0.0512
5 4 0.0064
6 5 0.00032
-----------
# Calculer les probabilités et créer un dataframe
<- tibble(Modalités = 0:n) %>%
data mutate(Probabilités = dbinom(Modalités, size = n, prob = p))
# Charger Stargazer pour la mise en forme du tableau
library(stargazer)
# Générer le tableau en LaTeX
stargazer(data, type = "latex", title = "Distribution de probabilité de la Loi Binomiale", summary = FALSE, header = FALSE)
Espérance mathématique
# Ajouter l'espérance à la fin du dataframe
res
# A tibble: 6 × 2
x Pr
<int> <dbl>
1 0 0.328
2 1 0.410
3 2 0.205
4 3 0.0512
5 4 0.00640
6 5 0.00032
<-1:5
x<-seq(10,18,2)
y x
[1] 1 2 3 4 5
y
[1] 10 12 14 16 18
*y)%>%sum() (x
[1] 230
%*%y x
[,1]
[1,] 230
Je vais écrire dans le texte $ 230
35.2941176
=10^(-(1:5))
x
paste0("$","10^",log10(x))
[1] "$10^-1" "$10^-2" "$10^-3" "$10^-4" "$10^-5"
# Création des chaînes de caractères avec les puissances en exposant
<- paste0("$10^{", -(1:5), "}$")
chaînes_exposant
chaînes_exposant
[1] "$10^{-1}$" "$10^{-2}$" "$10^{-3}$" "$10^{-4}$" "$10^{-5}$"
Génération de variables aléatoires avec R
Nous allons explorer la génération de variables aléatoires avec R, en nous concentrant sur l’utilisation de la loi binomiale comme illustration. Vous devrez l’adapter au cas du Keno avec la loi hypegéométrique.
Utilisation de la fonction rbinom()
La fonction rbinom()
permet de générer des échantillons aléatoires à partir d’une distribution binomiale. Elle prend en paramètres le nombre de tirages (N
), le nombre d’essais (size = n
), et la probabilité de succès (prob = p
). Par exemple :
# Génération de 100 échantillons aléatoires à partir d'une loi binomiale de paramètres n=
set.seed(123)
<- rbinom(1000, size = 50, prob = 0.5)
echantillon |>mean() echantillon
[1] 24.951
# Par exemple 100 personnes lancent chacun 10 fois une pièce de monnaie
hist(echantillon)
En générant un grand nombre d’échantillons aléatoires et en calculant la moyenne, nous pouvons observer la convergence vers l’espérance théorique de la distribution binomiale. Cela illustre la loi des grands nombres, qui stipule que la moyenne empirique converge vers l’espérance lorsque la taille de l’échantillon tend vers l’infini.
Première rencontre avec ggplot2
<- rbinom(10000, size = 10, prob = 0.5)
echantillons_binomiaux <-data.frame(x=echantillons_binomiaux)
df|>ggplot(aes(x=x))+
dfgeom_histogram(binwidth = 1, fill = "red", color = "black", alpha = 0.7)+
ggtitle("Distribution des échantillons binomiaux") +
xlab("Nombre de succès") + ylab("Nombre d'échantillons")
Keno
Explication du jeu
Nous expliquons la version du Keno utilisée dans l’article.
Il y a \(80\) numéros, de \(1\) à \(80\). Le joueur coche sur un bulletin \(15\) numéros de son choix. Ensuite, l’organisateur du jeu (casino ou autre institution), tire au hasard \(20\) numéros parmi les \(80\), numéros désignés comme “gagnants”. Le gain du joueur dépend du nombre de numéros gagnants qui figurent sur son bulletin.
On veut calculer la probabilité que le joueur ait, par exemple, exactement \(10\) des numéros sélectionnés qui fassent partie des numéros gagnants.
Nous commençons d’abord par un peu de combinatoire. Calculez le nombre de façons de sélectionner les \(15\) numéros. C’est le nombre de manières de sélectionner \(15\) objets parmi \(80\). Mathématiquement, on note ce nombre \[ \binom{80}{15} \]
Nous pouvons le calculer avec R en utilisant le code suivant
choose(80,15)
[1] 6.63587e+15
C’est un nombre très grand qu’il est inutilile de calculer pour des raisons évidentes.
Pour calculer la probabilité demandée, nous devons effectuer deux tâches :
Calculer le nombre de manières de sélectionner 10 numéros parmi les \(20\) gagnants, ce qui donne \(\binom{20}{10}\);
Calculer le nombre de manières de sélectionner les \(5\) numéros restants parmi les 60 perdants, ce qui fait \(\binom{60}{5}\).
La probabilté peut à présent être obtenue en effectuant le calcul suivant
\[ \frac{\binom{20}{10}\binom{60}{5}}{\binom{80}{15}} \]
Nous allons tenter de le faire avec R.
choose(20,10)*choose(60,5)/choose(80,15)
[1] 0.0001520595
Le joueur a une probabilité qui vaut environ \(1.5\) chances pour \(10000\).
Le nombre de numéros gagnants parmi ceux du joueur peuvent varier entre \(0\) à \(15\). Si nous appellons \(r\) le nombre de bons numéros, la probabilité d’obtenir \(r\) bons numéros sera donné plus généralement par
\[ \frac{\binom{20}{r}\binom{60}{15-r}}{\binom{80}{15}},\:r=0,\cdots,15. \]
library(tidyverse)
<-0:15
rchoose(20,r)%>%length()
[1] 16
choose(60,15-r)%>%length()
[1] 16
choose(20,r)*choose(60,15-r)/choose(80,15)
[1] 8.016144e-03 5.227920e-02 1.479390e-01 2.404009e-01 2.502132e-01
[6] 1.761501e-01 8.634808e-02 2.988972e-02 7.331441e-03 1.267163e-03
[11] 1.520595e-04 1.234249e-05 6.496049e-07 2.067708e-08 3.504590e-10
[16] 2.336393e-12