Projet Quarto
1 Introduction
Pour présenter Quarto, nous allons nous référer à l’article suivant : Evans (2025).
L’auteur montre un exemple de formules mathematiques en Latex.Nous avons reproduit son exemple (Figure 2. de l’article) ci-dessous
2 L’inteligence et la progammation en R
Let \(Y \sim \text{Bin}(n,p)\), where \(n \ge 1\) and \(0 \le p \le 1\), then the probability mass function of \(Y\) is given by
\[ P(Y = y) = \binom{n}{y} p^y (1-p)^{n-y}, \quad y = 0, 1, \dots, n. \]
Source : Evans (2025)
2.1 Les chunks R dans Quarto
2.2 Rappel sur la loi de Poisson
On dit que \(X\) suit une loi de Poisson de paramètre \(\lambda > 0\) si
\[ P(X=x)=\frac{\lambda^x}{x!}e^{-\lambda}, \quad x \in \mathbb{N}. \]
On peut utiliser R pour calculer ces probabilites par exemple \(\lambda = 3\)
[1] 2.996693
On trouve environ 3 qui est le paramètre \(\lambda\).
On peut aussi exécuter les chunks directement à l’intérieur d’une phrase :
La somme vaut environ 3, représentant le paramètre \(\lambda\).
2.3 Des chunks en python
Mean: 3.0
Median: 3.0
2.4 Application Shiny
<– rsconnect::deployApp() –>
library(readr)
library(dplyr)
Attachement du package : 'dplyr'
Les objets suivants sont masqués depuis 'package:stats':
filter, lag
Les objets suivants sont masqués depuis 'package:base':
intersect, setdiff, setequal, union
library(tidyr)
library(ggplot2)
install.packages("ggplot2")Warning: le package 'ggplot2' est en cours d'utilisation et ne sera pas
installé
# 1. IMPORT DONNÉES KENO
keno_202511_6 <- read_delim(
"keno_202511 6.csv",
delim = ";",
escape_double = FALSE,
trim_ws = TRUE
) |>
select(-devise, -...23, -numero_jokerplus, -multiplicateur, -date_de_forclusion) |>
mutate(date_de_tirage = as.Date(date_de_tirage, format = "%d/%m/%Y"))New names:
• `` -> `...23`
Rows: 100 Columns: 23
── Column specification ────────────────────────────────────────────────────────
Delimiter: ";"
chr (4): date_de_tirage, date_de_forclusion, numero_jokerplus, devise
dbl (18): annee_numero_de_tirage, boule1, boule2, boule3, boule4, boule5, bo...
lgl (1): ...23
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# 2. TRANSFORMATION EN FORMAT LONG
loto_long <- keno_202511_6 |>
pivot_longer(
cols = starts_with("boule"),
names_to = "numero",
values_to = "valeur",
names_prefix = "boule"
) |>
select(date_de_tirage, numero, valeur)
# 3. FONCTION PROP.TABLE ADAPTÉE
prop_keno <- function(data) {
tab <- table(data$valeur)
prop <- prop.table(tab)
data.frame(
valeur = as.numeric(names(tab)),
count = as.vector(tab),
freq = as.vector(prop)
) |>
arrange(valeur)
}
# 4. APPEL DE LA FONCTION
prop_keno(loto_long) valeur count freq
1 1 30 0.018750
2 2 26 0.016250
3 3 28 0.017500
4 4 32 0.020000
5 5 17 0.010625
6 6 21 0.013125
7 7 37 0.023125
8 8 23 0.014375
9 9 33 0.020625
10 10 30 0.018750
11 11 28 0.017500
12 12 28 0.017500
13 13 38 0.023750
14 14 35 0.021875
15 15 21 0.013125
16 16 23 0.014375
17 17 33 0.020625
18 18 19 0.011875
19 19 38 0.023750
20 20 24 0.015000
21 21 29 0.018125
22 22 20 0.012500
23 23 29 0.018125
24 24 29 0.018125
25 25 27 0.016875
26 26 28 0.017500
27 27 36 0.022500
28 28 33 0.020625
29 29 26 0.016250
30 30 35 0.021875
31 31 29 0.018125
32 32 24 0.015000
33 33 24 0.015000
34 34 25 0.015625
35 35 29 0.018125
36 36 24 0.015000
37 37 29 0.018125
38 38 31 0.019375
39 39 27 0.016875
40 40 27 0.016875
41 41 38 0.023750
42 42 30 0.018750
43 43 25 0.015625
44 44 30 0.018750
45 45 25 0.015625
46 46 32 0.020000
47 47 31 0.019375
48 48 30 0.018750
49 49 32 0.020000
50 50 30 0.018750
51 51 30 0.018750
52 52 29 0.018125
53 53 32 0.020000
54 54 24 0.015000
55 55 33 0.020625
56 56 24 0.015000
# 5. FRÉQUENCE PAR DATE (version alternative)
nombre_dates <- length(unique(loto_long$date_de_tirage))
freq_par_date <- loto_long |>
group_by(valeur) |>
summarise(
count = n(),
freq = count / nombre_dates,
.groups = "drop"
) |>
arrange(valeur)
# 6. CALCUL DU KHI-DEUX SUR LES COUNTS
df <- freq_par_date # tableau contenant valeur + count
expected <- (16/56) * 100 # ton attendu en pourcentage
df <- df |>
mutate(
chi2 = (count - expected)^2 / expected
)
chi2_total <- sum(df$chi2)
chi2_total[1] 45.14
set.seed(123)
res <- c()
ech <- c()
for (i in 1:10000) {
for (t in 1:100) {
ech <- c(ech, sample(1:56, 16, replace = FALSE))
}
res <- c(res, min(table(ech)))
ech <- c()
}
# Transformation en tibble
res_tbl <- tibble(value = res)
# Bar plot rouge
res_tbl %>%
ggplot(aes(x = value)) +
geom_bar(fill = "red") +
scale_x_continuous(breaks = 12:25) +
labs(x = "Minimum des tirages", y = "Fréquence", title = "Distribution du minimum des tirages") +
theme_minimal()# Compter combien de valeurs de res sont <= 17
res %>%
as_tibble() %>%
filter(value <= 17) %>%
summarise(count = n())# A tibble: 1 × 1
count
<int>
1 2615