Document complémentaire au module 7 du cours SDD I de 2025-2026. Distribué sous licence CC BY-NC-SA 4.0.

Veuillez vous référer au cours en ligne pour les explications et les interprétations de cette analyse.

Installer un environnement R adéquat pour reproduire cette analyse.

# Initie le dialecte SciViews::R avec le module d'inférence
SciViews::R("infer", lang = "fr")

Distribution binomiale

# Table de la distribution binomiale avec size = 6 et p = 0.75
(binom_table <- dtx(succès = 0:6,
  probabilité = dbinom(0:6, size = 6, prob = 0.75)))
## # A data.trame: [7 Ă— 2]
##   succès probabilité
##    <int>       <dbl>
## 1      0    0.000244
## 2      1    0.00439 
## 3      2    0.0330  
## 4      3    0.132   
## 5      4    0.297   
## 6      5    0.356   
## 7      6    0.178
# Graphique de la distribution binomiale avec size = 6 et p = 0.75
bi <- dist_binomial(size = 6, prob = 0.75)
chart(bi) +
  ylab("Densité de probabilité")

# Graphique de la distribution binomiale avec size = 6 et p = 0.5
chart(dist_binomial(size = 6, prob = 0.5)) +
  ylab("Densité de probabilité")

Distribution de Poisson

# Distribution de Poisson avec lambda = 1
P <- dist_poisson(lambda = 1)
chart(P, xlim = c(0, 8))

# Distribution de Poisson avec lambda = 3
P <- dist_poisson(lambda = 3)
P
## <distribution[1]>
## [1] Pois(3)
quantile(P, p = 1/4)
## [1] 2
qpois(p = 1/4, lambda = 3)
## [1] 2

Distribution log-normale

# Distribution log-normale avec mu = 0 et sigma = 0.5
chart(dist_lognormal(mu = 0, sigma = 0.5), xlim = c(0, 4)) +
  ylab("Densité de probabilité")

# Calculs sur la distribution log-normale avec mu = 1 et sigma = 0.5
lN1 <- dist_lognormal(mu = 1, sigma = 0.5) # Arguments mu =, sigma =
lN1 # Attention: lN(mu, variance) 0.5^2 = 0.25
## <distribution[1]>
## [1] lN(1, 0.25)
quantile(lN1, p = 0.95)
## [1] 6.186855
qlnorm(p = 0.95, meanlog = 1, sdlog = 0.5) # Nom des arguments meanlog= / sdlog=
## [1] 6.186855

Graphique quantile-quantile

## Un **quantile** divise des données quantitatives en deux sous-groupes de telle manière que le groupe contenant les observations plus petites que ce quantile représente un effectif équivalent à la fraction considérée. Donc, un quantile 10% correspondra à la valeur qui sépare le jeu de données en 10% des observations les plus petites et 90% des observations les plus grandes.

# Lecture et remaniement des données zooplancton -> eggs
read("zooplankton", package = "data.io") %>.%
  sfilter(., class == "Egg_elongated") %>.%
  smutate(., log_area = log10(area)) %>.%
  sselect(., area, log_area) ->
  eggs
summary(eggs)
##       area           log_area      
##  Min.   :0.4121   Min.   :-0.3850  
##  1st Qu.:0.4714   1st Qu.:-0.3266  
##  Median :0.4950   Median :-0.3054  
##  Mean   :0.5100   Mean   :-0.2950  
##  3rd Qu.:0.5347   3rd Qu.:-0.2719  
##  Max.   :0.6718   Max.   :-0.1728
# Histogramme de la surface des œufs
chart(data = eggs, ~ area) +
  geom_histogram(bins = 12)

# Histogramme du log de la surface des œufs
chart(data = eggs, ~ log_area) +
  geom_histogram(bins = 12)

# Graphique quantile-quantile du log de la surface des œufs
car::qqPlot(eggs[["log_area"]], distribution = "norm",
  envelope = 0.95, col = "Black", ylab = "log(area [mm^2])")

## [1] 11 30

Test Chi carré

# Données concernant les bec-croisés
crossbill <- dtx(cb = c(rep("left", 1895), rep("right", 1752)))
tabularise$headtail(crossbill)

cb

left

left

left

left

left

...

right

right

right

right

right

Premières et dernières 5 lignes d'un total de 3647

# Tableau de contingence de crossbill
(crossbill_tab <- table(Cross = crossbill$cb))
## Cross
##  left right 
##  1895  1752
# Version formatée avec tabularise du tableau de contingence de crossbill
tabularise(crossbill_tab)

Cross

Count

Percent

left

1 895

52.0%

right

1 752

48.0%

Total

3 647

100.0%

# Test Chi^2 univarié sur le tableau de contingence de crossbill
chisq.test(crossbill_tab, p = c(left = 1/2, right = 1/2), rescale.p = FALSE)
## 
##  Chi-squared test for given probabilities
## 
## data:  crossbill_tab
## X-squared = 5.6071, df = 1, p-value = 0.01789
# Test Chi^2 univarié de crossbill formaté avec tabularise
chisq.test(crossbill_tab, p = c(left = 1/2, right = 1/2), rescale.p = FALSE) |>
  tabularise()

χobs.2\chi^{2}_{obs.}

Ddl

Valeur de p

5.61

1

0.0179

*

0 <= '***' < 0.001 < '**' < 0.01 < '*' < 0.05

# Distribution Chi^2 avec ddl = 3
chi2 <- dist_chisq(3)
chart(chi2) +
  ylab("Densité de probabilité")

# quantile Ă  partir duquel on rejette H0 lorsque ddl = 1
qchisq(0.05, df = 1, lower.tail = FALSE)
## [1] 3.841459
# P-value du test (aire à droite du quantile observé ave ddl = 1)
pchisq(5.61, df = 1, lower.tail = FALSE)
## [1] 0.01785826
# Test Chi^2 sur crossbill : proportions équivalentes, échantillon 10x plus petit
(crossbill_tab2 <- as.table(c(left = 190, right = 175)))
##  left right 
##   190   175
chisq.test(crossbill_tab2, p = c(left = 1/2, right = 1/2), rescale.p = FALSE)
## 
##  Chi-squared test for given probabilities
## 
## data:  crossbill_tab2
## X-squared = 0.61644, df = 1, p-value = 0.4324
# Jeu de données timolol
timolol <- dtx(
  traitement = c(
    rep("timolol", 160), rep("placebo", 147)),
  patient = c(
    rep("sain", 44), rep("malade", 116), 
    rep("sain", 19), rep("malade", 128))
  )
  tabularise$headtail(timolol)

traitement

patient

timolol

sain

timolol

sain

timolol

sain

timolol

sain

timolol

sain

...

...

placebo

malade

placebo

malade

placebo

malade

placebo

malade

placebo

malade

Premières et dernières 5 lignes d'un total de 307

# Table de contingence à deux entrées pout timolol
(timolol_table <- table(Traitement = timolol$traitement, Résultat = timolol$patient))
##           Résultat
## Traitement malade sain
##    placebo    128   19
##    timolol    116   44
# Formatage du tableau de contingence à deux entrées de timolol avec tabularise
(tabularise(timolol_table))

Traitement

Résultat

malade

sain

Total

placebo

Count

128 (41.7%)

19 (6.2%)

147 (47.9%)

Mar. pct (1)

52.5% ; 87.1%

30.2% ; 12.9%

timolol

Count

116 (37.8%)

44 (14.3%)

160 (52.1%)

Mar. pct

47.5% ; 72.5%

69.8% ; 27.5%

Total

Count

244 (79.5%)

63 (20.5%)

307 (100.0%)

(1) Columns and rows percentages

# Test Chi^2 d'indépendance sur timolol
(chi2_timolol <- chisq.test(timolol_table))
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  timolol_table
## X-squared = 9.1046, df = 1, p-value = 0.00255
cat("Expected frequencies:\n"); chi2_timolol[["expected"]]
## Expected frequencies:
##           Résultat
## Traitement   malade     sain
##    placebo 116.8339 30.16612
##    timolol 127.1661 32.83388
# Mise en forme du test Chi^2 d'indépendance sur timolol
tabularise(chi2_timolol)

χobs.2\chi^{2}_{obs.}

Ddl

Valeur de p

9.1

1

0.00255

**

0 <= '***' < 0.001 < '**' < 0.01 < '*' < 0.05

Métriques

# Préparation de R et lecture des données crabs du package MASS
SciViews::R("infer", lang = "fr")
crabs <- read("crabs", package = "MASS")

# Table de contingence espèces - sexes pour crabs
table(Espèce = crabs$species, Sexe = crabs$sex)
##       Sexe
## Espèce  F  M
##      B 50 50
##      O 50 50
# Table de contingence formaté avec tabularise
table(Espèce = crabs$species, Sexe = crabs$sex) |>
  tabularise()

Espèce

Sexe

F

M

Total

B

Count

50 (25.0%)

50 (25.0%)

100 (50.0%)

Mar. pct (1)

50.0% ; 50.0%

50.0% ; 50.0%

O

Count

50 (25.0%)

50 (25.0%)

100 (50.0%)

Mar. pct

50.0% ; 50.0%

50.0% ; 50.0%

Total

Count

100 (50.0%)

100 (50.0%)

200 (100.0%)

(1) Columns and rows percentages

# Graphe en violon de front
chart(data = crabs, front ~ species %fill=% sex) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75), trim = FALSE)

# Graphe en violon de rear
chart(data = crabs, rear ~ species %fill=% sex) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

# Graphe en violon de length
chart(data = crabs, length ~ species %fill=% sex) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

# Graphe en violon de width
chart(data = crabs, width ~ species %fill=% sex) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

# Graphe en violon de depth
chart(data = crabs, depth ~ species %fill=% sex) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

# Graphique en nuage de points de rear en fonction de length
chart(data = crabs, rear ~ length %shape=% species %col=% sex) +
  geom_point()

# Graphique en nuage de points de front en fonction de width
chart(data = crabs, front ~ width %shape=% species %col=% sex) +
  geom_point()

# Calcul et graphique de la métrique (ratio) rear / length
crabs %>.%
  smutate(., rear_length = rear / length) %>.%
  chart(data = ., rear_length ~ species %fill=% sex) +
    geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
    ylab("Ratio largeur arrière/longueur")

# Calcul et graphique de rear_length2
crabs %>.%
  mutate(., rear_length2 = rear / (0.3 * length + 2.4)) %>.%
  chart(data = ., rear_length2 ~ species %fill=% sex) +
    geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
    ylab("Ratio largeur arrière/(0.3*longueur + 2.4)")

# Calcul et graphique de front_width
crabs %>.%
  mutate(., front_width = front / (0.43 * width)) %>.%
  chart(data = ., front_width ~ species %fill=% sex) +
    geom_violin(draw_quantiles = c(0.25, 0.5, 0.75)) +
    ylab("Ratio lobe frontal/(0.43*largeur)")