Nom : Terras
Prénom : Omar
Numéro étudiant : 22309268

Question 1

f22309268 <- function(labelx = "x",
                      titre = "Analyse bivariée des données",
                      labely = "y",
                      typevar2,
                      var1,
                      var2) {
  
  df <- data.frame(v1 = var1, v2 = var2)
  
  if (typevar2 == "numeric") {
    p <- ggplot(df, aes(x = v1, y = v2)) +
      geom_boxplot(fill = "skyblue", color = "black") +
      labs(title = titre, x = labelx, y = labely) +
      theme_minimal()
    
  } else if (typevar2 == "factor") {
    p <- ggplot(df, aes(x = v1, fill = v2)) +
      geom_bar(position = "fill") +
      labs(title = titre, x = labelx, y = "Proportion", fill = labely) +
      theme_minimal()
  }
  
  return(p)
}

Question 2

data1 <- read.csv("donnees1.csv", header = TRUE, sep = ";", dec = ".")
data2 <- read.table("donnees2.txt", header = TRUE, sep = "\t", dec = ".")

str(data1)
## 'data.frame':    100 obs. of  8 variables:
##  $ ID    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ age   : int  47 56 46 70 51 46 40 46 49 39 ...
##  $ poids : chr  "71,6" "58,65" "116,84" "96,45" ...
##  $ taille: int  158 164 208 186 195 188 193 165 164 196 ...
##  $ alcool: int  0 7 3 3 2 0 5 0 0 3 ...
##  $ sexe  : int  1 1 1 1 1 0 1 0 1 1 ...
##  $ ronfle: chr  "N" "O" "N" "N" ...
##  $ tabac : chr  "O" "N" "O" "O" ...
str(data2)
## 'data.frame':    100 obs. of  2 variables:
##  $ ID   : int  31 79 51 14 67 42 50 43 97 25 ...
##  $ sport: chr  "missing" "missing" "jamais " "régulier " ...

Question 3

data <- merge(data1, data2)
data <- na.omit(data)

cat("Le jeu de données contient", nrow(data), "individus après nettoyage.")
## Le jeu de données contient 100 individus après nettoyage.

Question 4

str(data)
## 'data.frame':    100 obs. of  9 variables:
##  $ ID    : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ age   : int  47 56 46 70 51 46 40 46 49 39 ...
##  $ poids : chr  "71,6" "58,65" "116,84" "96,45" ...
##  $ taille: int  158 164 208 186 195 188 193 165 164 196 ...
##  $ alcool: int  0 7 3 3 2 0 5 0 0 3 ...
##  $ sexe  : int  1 1 1 1 1 0 1 0 1 1 ...
##  $ ronfle: chr  "N" "O" "N" "N" ...
##  $ tabac : chr  "O" "N" "O" "O" ...
##  $ sport : chr  "jamais " "très régulier " "occasionnel " "occasionnel " ...
summary(data)
##        ID              age           poids               taille     
##  Min.   :  1.00   Min.   :23.00   Length:100         Min.   :158.0  
##  1st Qu.: 25.75   1st Qu.:43.00   Class :character   1st Qu.:166.0  
##  Median : 50.50   Median :52.00   Mode  :character   Median :186.0  
##  Mean   : 50.50   Mean   :52.27                      Mean   :181.1  
##  3rd Qu.: 75.25   3rd Qu.:62.25                      3rd Qu.:194.0  
##  Max.   :100.00   Max.   :74.00                      Max.   :208.0  
##      alcool           sexe         ronfle             tabac          
##  Min.   : 0.00   Min.   :0.00   Length:100         Length:100        
##  1st Qu.: 0.00   1st Qu.:0.75   Class :character   Class :character  
##  Median : 2.00   Median :1.00   Mode  :character   Mode  :character  
##  Mean   : 2.95   Mean   :0.75                                        
##  3rd Qu.: 4.25   3rd Qu.:1.00                                        
##  Max.   :15.00   Max.   :1.00                                        
##     sport          
##  Length:100        
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Réponse :
Les variables quantitatives sont numériques, par exemple age.
Les variables qualitatives sont catégorielles, par exemple sexe, filiere et ronfle.

Question 5

names(data)
## [1] "ID"     "age"    "poids"  "taille" "alcool" "sexe"   "ronfle" "tabac" 
## [9] "sport"
data$sexe <- as.factor(data$sexe)
data$ronfle <- as.factor(data$ronfle) 

levels(data$filiere)
## NULL

Question 6

data$age.classe <- cut(data$age,
                       breaks = c(23, 35.75, 48.5, 61.25, 74),
                       right = FALSE,
                       include.lowest = TRUE)

table(data$age.classe)
## 
##   [23,35.8) [35.8,48.5) [48.5,61.2)   [61.2,74] 
##           6          36          31          27

Question 7

f22309268(labelx = "Sexe",
          titre = "Répartition du ronflement selon le sexe",
          labely = "Ronflement",
          typevar2 = "factor",
          var1 = data$sexe,
          var2 = data$ronfle)

Question 8

Réponse :
Le graphique permet de comparer les proportions de ronfleurs selon le sexe.
Si les proportions sont différentes entre les modalités de sexe, alors les variables semblent liées.
Si les proportions sont proches, alors il ne semble pas y avoir de lien évident.

Question 9

tab_contingence <- table(data$sexe, data$ronfle)
prop.table(tab_contingence, margin = 1)
##    
##       N   O
##   0 0.8 0.2
##   1 0.6 0.4

Question 10

tab <- table(data$sexe, data$ronfle)

effectifs_theoriques <- outer(rowSums(tab), colSums(tab)) / sum(tab)

stat_chi2 <- sum((tab - effectifs_theoriques)^2 / effectifs_theoriques)

ddl <- (nrow(tab) - 1) * (ncol(tab) - 1)

seuil_critique <- qchisq(0.93, ddl)

if (stat_chi2 > seuil_critique) {
  resultat_test <- "On rejette l'hypothèse d'indépendance : les variables sexe et ronfle semblent liées au risque de 7%."
} else {
  resultat_test <- "On ne rejette pas l'hypothèse d'indépendance : on ne peut pas conclure à un lien entre sexe et ronfle au risque de 7%."
}

cat("Valeur du Chi2 :", stat_chi2, "\n")
## Valeur du Chi2 : 3.296703
cat("Degrés de liberté :", ddl, "\n")
## Degrés de liberté : 1
cat("Seuil critique :", seuil_critique, "\n")
## Seuil critique : 3.28302
cat("Conclusion :", resultat_test)
## Conclusion : On rejette l'hypothèse d'indépendance : les variables sexe et ronfle semblent liées au risque de 7%.