tests p-value

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(ggplot2)

mcdo <- read.csv("C:/Users/mathi/Downloads/mcdo.csv", sep = ",", header = TRUE)

Part 1 : Power of a test

H0 : u1 = u2 : pas de diff

H1 : u1 != u2

niveau de signification : alpha = 0.05

puissance = 0.8

erreur type 2 = 0.2

écart type = 1.7g

il faut détecter delta = 1g

Question 1

help("power.t.test")
démarrage du serveur d'aide httpd ... fini
power.t.test(delta = 1, sd = 1.7, sig.level = 0.05, power = 0.8, type = "two.sample", alternative = "two.sided")

     Two-sample t test power calculation 

              n = 46.34674
          delta = 1
             sd = 1.7
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number in *each* group

Il faut 47 indiv pour chaque, donc 94 hamburgers

Question 2 :

Si l’on diminue le niveau de risque \(\alpha\) , pour maintenir la même puissance de détection (80%) tout en réduisant le risque de se tromper, il faut réduire la variabilité de la moyenne estimée (𝜎/√𝑛). Cela nécessite d’augmenter la taille de l’échantillon 𝑛.

Si l’on augmente le niveau de risque \(\alpha\) (ex. passer de 5% à 10%) : On accepte un risque plus élevé de faux positifs. Il est plus facile de rejeter \(H_0\), donc on a besoin de moins de preuves statistiques pour atteindre la puissance souhaitée. Par conséquent, la taille de l’échantillon \(n\) diminue.

# Différents niveaux de risque alpha
alphas <- c(0.10, 0.05, 0.01, 0.001)

# Calcul du nombre d'individus requis par groupe
n_req <- sapply(alphas, function(a) {
  res <- power.t.test(delta = 1, sd = 1.7, sig.level = a, power = 0.80, type = "two.sample", alternative = "two.sided")
  return(ceiling(res$n))
})

# Résultat sous forme de tableau
data.frame(Niveau_de_risque_alpha = alphas, Taille_par_groupe = n_req, Taille_totale = n_req * 2)
  Niveau_de_risque_alpha Taille_par_groupe Taille_totale
1                  0.100                37            74
2                  0.050                47            94
3                  0.010                70           140
4                  0.001               102           204

Question 3 :

power.t.test(n = 20, delta = 1, sd = 1.7, sig.level = 0.05, type = "two.sample", alternative = "two.sided")

     Two-sample t test power calculation 

              n = 20
          delta = 1
             sd = 1.7
      sig.level = 0.05
          power = 0.4416243
    alternative = two.sided

NOTE: n is number in *each* group

Power of the test = 44.16%

Question 4 :

power.t.test(n = 20, power = 0.8, sd = 1.7, sig.level = 0.05, type = "two.sample", alternative = "two.sided")

     Two-sample t test power calculation 

              n = 20
          delta = 1.545522
             sd = 1.7
      sig.level = 0.05
          power = 0.8
    alternative = two.sided

NOTE: n is number in *each* group

The detectable mean difference = 1.55 g

Partie 2

Question 1

this dataset contains 77 commands of burger and other type of foods of a mc donald’s, with 12 columns with contains all the caracteristics of the products.

Question 2

type_of_food <- mcdo |> group_by(Type) |> summarise(Moyenne_Calories = mean(Energie.kcal, na.rm = TRUE),
                                                    Mediane_Calories = median(Energie.kcal, na.rm = TRUE),
                                                    Moyenne_MatGras = mean(MatGras.g, na.rm = TRUE),
                                                    Moyenne_SatMatGras = mean(SatMatGras.g, na.rm = TRUE),
                                                    Moyenne_Sucres = mean(Sucres.g, na.rm = TRUE),
                                                    Moyenne_Sodium = mean(Sodium.mg, na.rm = TRUE),
                                                    Moyenne_Proteines = mean(Proteines.g, na.rm = TRUE),
                                                    Moyenne_Fibres = mean(Fibres.g, na.rm = TRUE))

type_of_food |> arrange(Moyenne_Calories)
# A tibble: 4 × 9
  Type    Moyenne_Calories Mediane_Calories Moyenne_MatGras Moyenne_SatMatGras
  <chr>              <dbl>            <dbl>           <dbl>              <dbl>
1 Croque              260               260            10                 6   
2 Wrap                445               415            20.3               5.67
3 Burger              479.              490            22.8               7.90
4 Nuggets             611.              395            36.1               5.78
# ℹ 4 more variables: Moyenne_Sucres <dbl>, Moyenne_Sodium <dbl>,
#   Moyenne_Proteines <dbl>, Moyenne_Fibres <dbl>
ggplot(mcdo, aes(x = reorder(Type, Energie.kcal, FUN = median), y = Energie.kcal, fill = Type)) +
  geom_boxplot() +
  coord_flip() +
  labs(
    title = "Distribution de l'Énergie (kcal) selon le Type d'aliment",
    x = "Type d'aliment",
    y = "Énergie (kcal)"
  ) +
  theme_minimal() +
  theme(legend.position = "none")

The healthiest type of food seems to be “croque” but there is only one entries

Question 3 :

# 1. Filtrer les burgers américains (US)
burgers_us <- subset(mcdo, Pays == "US" & Type == "Burger")

# Extraire les données de matières grasses
fat_us <- burgers_us$MatGras.g
n <- length(fat_us)

# 2. Calcul des estimateurs du Maximum de Vraisemblance
mu_hat <- mean(fat_us)
var_hat <- sum((fat_us - mu_hat)^2) / n   # Variance EMV (divisée par n)
sd_hat <- sqrt(var_hat)                   # Écart-type EMV

# Affichage des estimations dans la console
cat("Moyenne estimée (EMV) :", mu_hat, "\n")
Moyenne estimée (EMV) : 22.67647 
cat("Variance estimée (EMV) :", var_hat, "\n")
Variance estimée (EMV) : 70.16003 
cat("Écart-type estimé (EMV) :", sd_hat, "\n")
Écart-type estimé (EMV) : 8.376159 
# 3. Tracé de l'histogramme de densité et de la loi normale
hist(fat_us, 
     probability = TRUE,                  # Pour afficher des densités (et non des effectifs)
     main = "Matières grasses des burgers US et densité ajustée (EMV)",
     xlab = "Matières grasses (g)",
     ylab = "Densité de probabilité",
     col = "lightblue",
     border = "white")

# Superposition de la courbe théorique de la loi normale N(mu_hat, sd_hat)
curve(dnorm(x, mean = mu_hat, sd = sd_hat), 
      add = TRUE, 
      col = "darkred", 
      lwd = 2)