Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 9d638968 rédigé par Nathan's avatar Nathan
Parcourir les fichiers

Merge branch 'main' of gitlab.univ-nantes.fr:E224359T/tpinfo3a_nathan_titouan into nathan

parents 588be96c 6e3375e2
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!56Nathan
Fichier ajouté
Fichier ajouté
# Youssef Ibnouali INFO3 G3 #
# EXERCICE 1 #
# Chargement des données
data = read.table("C:/Users/ibnou/OneDrive/Bureau/chocolat.data", header = TRUE)
attach(data)
# Résumé du jeu de données
summary(data)
#1.1.1.1. Visualisation de la distribution des variables
x11()
par(mfrow=c(2,3)) # Pour organiser les graphiques
j <- 1
for (i in data) {
hist(i, main=colnames(data)[j]) #boxplots des variables
j <- j + 1
}
#En visualisant les histogrames, les variables Fondant, Cacao et OdeurCacao semblent avoire une distibution normale puisque l'histograme forme une cloche.
#1.1.1.2. Affichage du dataframe réduit aux 5 chocolats jugés les plus fondants.
# On va trier le dataframe par la variable Fondant et afficher les 5 premières lignes
top_5_fondants = data[order(Fondant, decreasing = TRUE), ][1:5, ]
top_5_fondants
#D'après le dataframe, les 5 les plus fondant sont: 105, 6, 89, 70, 127
#1.1.1.3. Calcul du coeff de variation sur Fondant
cv_Fondant = (sd(Fondant) / mean(Fondant)) * 100
cv_Fondant
#On obtient : 44.28145
#cet indicateur donne une idée de la variation relative de la variable
# Un coeff de variation plus élevé indique une grande dispersion par rapport à la moyenne, ce qui peut indiquer une grande variété de préférences.
#1.1.1.4. Détermination de la variable la plus compatible avec une distibution normale
#Effectuons un test de normalité et visualisons la p-valeur
shapiro.test(Fondant)$p.value
#On obtient une p-valeur de 0.001968748, inférieure à notre seuil (0.05), donc on rejette l'hypothèse nulle, alors Fondant a une distribution normale
shapiro.test(Amertume)$p.value
#On obtient une p-valeur de 1.70708e-06, inférieure à notre seuil (0.05), donc on rejette l'hypothèse nulle, alors Fondant a une distribution normale
#De plus, comme expliqué précédement, l'histogramme de Fondant represente une cloche contrairement à Amertume, donc on peut dire que Fondant esst la variable la plus compatible avec une distibution normale
#1.1.1.5. Calcul de proportion de chocolats amers
proportion_amers = sum(Amertume > 5) / length(Amertume)
proportion_amers
#On obtient 0.43 càd qu'il ya 43% de chocolats qui sont amers
#1.1.1.6. Les données remettent-elles en cause l’hypothèse qu’il y a autant de chocolats jugés amers et non amers dans la population ?
# Nombre attendu de chocolats amers sous H0 (proportion de 0.5)
n_attendu = 0.5 * length(Amertume)
chi2_stat = (sum(Amertume > 5) - n_attendu)^2 / n_attendu
# P-valeur
p_value <- 1 - pchisq(chi2_stat, df = 1)
p_value
#On obtient 0.08641073 comme p-valeur, qui est supérieure à 0.05, donc : Les données ne remettent pas en cause l'hypothèse qu'il y a autant de chocolats amers et non amers dans la population.
#1.1.1.7. Calcul de l'intervalle de confiance sur la note moyenne en Fondant
# Calcul de la moyenne et de l'écart-type de Sulphates
mean_Fondant <- mean(Fondant)
sd_Fondant <- sd(Fondant)
# Taille de l'échantillon
n <- length(Fondant)
# Quantile de la distribution de Student pour le niveau de confiance
t_value <- qt(1 - (1 - 0.90) / 2, df = n - 1)
# Calcul de l'intervalle de confiance
sup <- mean_Fondant + t_value * (sd_Fondant / sqrt(n))
inf <- mean_Fondant - t_value * (sd_Fondant / sqrt(n))
c(inf,sup)
#l’intervalle de confiance obtenu est [ 4.72587 , 5.14213 ]
# Utilisation de t.test pour vérifier l'intervalle de confiance
t.test(Fondant, conf.level = 0.90)$conf.int
#On obtient bien le même intervalle ( 4.72587 , 5.14213 )
t.test(Fondant, conf.level = 0.90)$p.value
#Avec une p-valeur de 1.30573e-119 inférieure au seuil, on rejette l'hypothèse H0
#1.1.2.1. Matrice de corrélation
matrice_correlation = cor(data[, c("OdeurCacao", "OdeurLait", "Amertume", "Cacao", "Lait", "Fondant")])
matrice_correlation
# les corrélations les plus fortes sont : OdeurLait et Lait, Amertume et Cacao, Cacao et OdeurCacao
#1.1.2.2. Visualisation 2D des distributions
#On pouvait utiliser des boxplot parralèlle pour chaque 2 variable.
#Mais, ici nous avons utiliser un Heatmap pour visulaiser
x11()
heatmap(matrice_correlation,Rowv = NA, Colv = NA,col = colorRampPalette(c("blue", "white", "red"))(50),symm = TRUE,margins = c(5, 5),main = "Heatmap de Corrélation")
#Le couple de variables qui semble proche de l’indépendance est Lait/OdeurLait
#1.1.2.3. Symétrie des nuages (Amertume, Lait)
#Il y a une forte concentration de chocolats jugés amers avec peu de lait et quelques cas de chocolats non amers avec beaucoup de lait.
#1.1.2.4. test de corrélation Fondant/OdeurCacao
#Calculons d’abord la corrélation de Pearson
cor(Fondant, OdeurCacao)
#Puis, faisons un test de significativité
cor.test(Fondant, OdeurCacao)$p.value
#Si la p-value est inférieure à ce seuil, on rejette l'hypothèse nulle et on conclut qu'il y a une corrélation significative entre les variables.
#Ce qui n'est pas le cas ici; on a obtenu une p-valeur de 0.06997833 qui est supérieure au seuil, alors il n'y a pas une corrélation significative entre Fondant et OdeurCacao
#1.1.2.5. Caclcul de p-valeur
cor_fo = cor(Fondant, OdeurCacao)
# Transformation de la corrélation en statistique de test t
t_stat = cor_fo * sqrt((length(Fondant) - 2) / (1 - cor_fo^2))
# Calcul de la p-valeur
p_value <- 2 * pnorm(-abs(t_stat))
p_value
#On obtient une p-valeur de 0.06897463
#1.2.1. Visulaisation des distribution des variables
NiveauFondant = cut(Fondant, breaks=quantile(Fondant, probs = seq(0, 1, 0.25), names=FALSE), labels=c("faiblement fondant","légèrement fondant","plutot fondant","très fondant"), include.lowest=TRUE)
NiveauAmertume = cut(Amertume, breaks=quantile(Amertume, probs = seq(0, 1, 0.25), names=FALSE), labels=c("faiblement amer","légèrement amer","plutot amer","très amer"), include.lowest=TRUE)
x11()
par(mfrow=c(1,2))
barplot(table(NiveauFondant), main = "Distribution du Niveau de Fondant")
barplot(table(NiveauAmertume), main = "Distribution du Niveau d'Amertume")
#On remarque que globalement les chocolats sont peu fondants et plus amers
#1.2.2. Visualisation du lien entre les deux variales
table_contingence = table(NiveauFondant, NiveauAmertume)
# Graphique en barres pour visualiser le lien entre eux
barplot(table_contingence, beside = TRUE, legend.text = TRUE, main = "Table de contingence entre NiveauFondant et NiveauAmertume", ylab = "Fréquence")
#1.2.3.
#La table de contigence qui croise les deux est :
table_contingence
#La table de contingence sous hypothèse d'indépendance
table_ind = margin.table(table_contingence, 1) %*% t(margin.table(table_contingence, 2)) / sum(table_contingence)
table_ind
#1.2.4. Calcul de mesure de chi2 san boucle
chi2_test = chisq.test(table(NiveauFondant, NiveauAmertume))
chi2_test
#1.2.5. Lien fort ou pas ?
cramer_coef = sqrt(chis2_test$statistic / (sum(table(NiveauFondant, NiveauAmertume))) - 1))
cramer_coef
#On obtient 0.3743694, donc on a un lien faible et non fort entre les deux variables
#1.2.6.
# Calcul de la région critique au seuil de risque de 5%
alpha = 0.05
df = (length(unique(NiveauFondant)) - 1) * (length(unique(NiveauAmertume)) - 1)
chi2_critique = qchisq(1 - alpha, df)
#On a chi2_test > chi2_critique, donc le lien entre les variables Niveau de Fondant et Niveau d'Amertume est significatif.
detach(data)
# EXERCICE 2 #
data = read.table("C:/Users/ibnou/OneDrive/Bureau/agro.data", header = TRUE)
attach(data)
#2.1.1. Nombre d'étudiant décrits
netu= nrow(data)
netu
#Le nombre d'etudiants est 75
#2.1.2. Visualisation nde distibution
x11()
par(mfrow=c(2,2))
hist(note, main = "Distribution des Notes")
boxplot(note, main = "Boxplot des Notes")
#LA médiane des notes est d'environ 14...
barplot(table(cursus), main = "Répartition des Etudiants par Cursus")
#montre la répartition des étudiants par formation.
barplot(table(genre), main = "Répartition des Etudiants par Genre")
#montre la répartition des étudiants par genre.
#2.1.3.
quantile_30 = quantile(note, probs = 0.30)
quantile_70 = quantile(note, probs = 0.70)
quantile_30
quantile_70
#on obtient 12.726 et 14.352
#2.1.4.
# Variance non corrigée
var(note) #3.781128
#2.1.5.
# Boxplot des notes selon le cursus
boxplot(note ~ cursus, main = "Distribution des Notes selon le Cursus")
# Boxplot des notes selon le genre
boxplot(note ~ genre, main = "Distribution des Notes selon le Genre")
#2.1.6.Test de l'effet du cursus sur les notes (ANOVA)
anova_cursus= aov(note ~ cursus)
summary(anova_cursus)
#2.1.7.Test de l'effet du genre sur les notes (ANOVA)
anova_genre=aov(note ~ genre)
summary(anova_genre)
#2.2.
# Calcul de T : nombre de valeurs supérieures à 15g
T <- sum(note > 12)
# Taille de l'échantillon
n <- length(note)
# Calcul de la moyenne et de l'écart-type de T sous H0
mean_T <- n / 2
sd_T <- sqrt(n / 4)
# Calcul de la z-statistique
z_stat <- (T - mean_T) / sd_T
# Calcul de la p-valeur
p_value <- 2 * pnorm(-abs(z_stat)) # test bilatéral
# Seuil de risque de 1%
alpha <- 0.01
# Calcul de la région critique
z_critique <- qnorm(alpha/2)
# Comparaison avec la région critique
if (z_stat < -z_critique | z_stat > z_critique) {
cat("On rejette H0 au niveau de 1% de signification.\n")
} else {
cat("On ne rejette pas H0 au niveau de 1% de signification.\n")
}
Fichier ajouté
# EXERCICE 1 #
# Chargement des données
```R
data = read.table("C:/Users/ibnou/OneDrive/Bureau/chocolat.data", header = TRUE)
attach(data)
```
# Résumé du jeu de données
```R
summary(data)
```
# 1.1.1
## 1.1.1.1. Visualisation de la distribution des variables
```R
x11()
par(mfrow=c(2,3)) # Pour organiser les graphiques
j <- 1
for (i in data) {
hist(i, main=colnames(data)[j]) #boxplots des variables
j <- j + 1
}
#En visualisant les histogrames, les variables Fondant, Cacao et OdeurCacao semblent avoire une distibution normale puisque l'histograme forme une cloche.
```
## 1.1.1.2. Affichage du dataframe réduit aux 5 chocolats jugés les plus fondants.
```R
# On va trier le dataframe par la variable Fondant et afficher les 5 premières lignes
top_5_fondants = data[order(Fondant, decreasing = TRUE), ][1:5, ]
top_5_fondants
#D'après le dataframe, les 5 les plus fondant sont: 105, 6, 89, 70, 127
```
## 1.1.1.3. Calcul du coeff de variation sur Fondant
```R
cv_Fondant = (sd(Fondant) / mean(Fondant)) * 100
cv_Fondant
#On obtient : 44.28145
#cet indicateur donne une idée de la variation relative de la variable
# Un coeff de variation plus élevé indique une grande dispersion par rapport à la moyenne, ce qui peut indiquer une grande variété de préférences.
```
## 1.1.1.4. Détermination de la variable la plus compatible avec une distibution normale
```R
#Effectuons un test de normalité et visualisons la p-valeur
shapiro.test(Fondant)$p.value
#On obtient une p-valeur de 0.001968748, inférieure à notre seuil (0.05), donc on rejette l'hypothèse nulle, alors Fondant a une distribution normale
shapiro.test(Amertume)$p.value
#On obtient une p-valeur de 1.70708e-06, inférieure à notre seuil (0.05), donc on rejette l'hypothèse nulle, alors Fondant a une distribution normale
#De plus, comme expliqué précédement, l'histogramme de Fondant represente une cloche contrairement à Amertume, donc on peut dire que Fondant esst la variable la plus compatible avec une distibution normale
```
## 1.1.1.5. Calcul de proportion de chocolats amers
```R
proportion_amers = sum(Amertume > 5) / length(Amertume)
proportion_amers
#On obtient 0.43 càd qu'il ya 43% de chocolats qui sont amers
```
## 1.1.1.6. Les données remettent-elles en cause l’hypothèse qu’il y a autant de chocolats jugés amers et non amers dans la population ?
```R
# Nombre attendu de chocolats amers sous H0 (proportion de 0.5)
n_attendu = 0.5 * length(Amertume)
chi2_stat = (sum(Amertume > 5) - n_attendu)^2 / n_attendu
# P-valeur
p_value <- 1 - pchisq(chi2_stat, df = 1)
p_value
#On obtient 0.08641073 comme p-valeur, qui est supérieure à 0.05, donc : Les données ne remettent pas en cause l'hypothèse qu'il y a autant de chocolats amers et non amers dans la population.
```
## 1.1.1.7. Calcul de l'intervalle de confiance sur la note moyenne en Fondant
```R
# Calcul de la moyenne et de l'écart-type de Sulphates
mean_Fondant <- mean(Fondant)
sd_Fondant <- sd(Fondant)
# Taille de l'échantillon
n <- length(Fondant)
# Quantile de la distribution de Student pour le niveau de confiance
t_value <- qt(1 - (1 - 0.90) / 2, df = n - 1)
# Calcul de l'intervalle de confiance
sup <- mean_Fondant + t_value * (sd_Fondant / sqrt(n))
inf <- mean_Fondant - t_value * (sd_Fondant / sqrt(n))
c(inf,sup)
#l’intervalle de confiance obtenu est [ 4.72587 , 5.14213 ]
# Utilisation de t.test pour vérifier l'intervalle de confiance
t.test(Fondant, conf.level = 0.90)$conf.int
#On obtient bien le même intervalle ( 4.72587 , 5.14213 )
t.test(Fondant, conf.level = 0.90)$p.value
#Avec une p-valeur de 1.30573e-119 inférieure au seuil, on rejette l'hypothèse H0
```
# 1.1.2
## 1.1.2.1. Matrice de corrélation
```R
matrice_correlation = cor(data[, c("OdeurCacao", "OdeurLait", "Amertume", "Cacao", "Lait", "Fondant")])
matrice_correlation
# les corrélations les plus fortes sont : OdeurLait et Lait, Amertume et Cacao, Cacao et OdeurCacao
```
## 1.1.2.2. Visualisation 2D des distributions
```R
#On pouvait utiliser des boxplot parralèlle pour chaque 2 variable.
#Mais, ici nous avons utiliser un Heatmap pour visulaiser
x11()
heatmap(matrice_correlation,Rowv = NA, Colv = NA,col = colorRampPalette(c("blue", "white", "red"))(50),symm = TRUE,margins = c(5, 5),main = "Heatmap de Corrélation")
#Le couple de variables qui semble proche de l’indépendance est Lait/OdeurLait
```
## 1.1.2.3. Symétrie des nuages (Amertume, Lait)
```R
#Il y a une forte concentration de chocolats jugés amers avec peu de lait et quelques cas de chocolats non amers avec beaucoup de lait.
```
## 1.1.2.4. test de corrélation Fondant/OdeurCacao
```R
#Calculons d’abord la corrélation de Pearson
cor(Fondant, OdeurCacao)
#Puis, faisons un test de significativité
cor.test(Fondant, OdeurCacao)$p.value
#Si la p-value est inférieure à ce seuil, on rejette l'hypothèse nulle et on conclut qu'il y a une corrélation significative entre les variables.
#Ce qui n'est pas le cas ici; on a obtenu une p-valeur de 0.06997833 qui est supérieure au seuil, alors il n'y a pas une corrélation significative entre Fondant et OdeurCacao
```
## 1.1.2.5. Caclcul de p-valeur
```R
cor_fo = cor(Fondant, OdeurCacao)
# Transformation de la corrélation en statistique de test t
t_stat = cor_fo * sqrt((length(Fondant) - 2) / (1 - cor_fo^2))
# Calcul de la p-valeur
p_value <- 2 * pnorm(-abs(t_stat))
p_value
#On obtient une p-valeur de 0.06897463
```
# 1.2
## 1.2.1. Visulaisation des distribution des variables
```R
NiveauFondant = cut(Fondant, breaks=quantile(Fondant, probs = seq(0, 1, 0.25), names=FALSE), labels=c("faiblement fondant","légèrement fondant","plutot fondant","très fondant"), include.lowest=TRUE)
NiveauAmertume = cut(Amertume, breaks=quantile(Amertume, probs = seq(0, 1, 0.25), names=FALSE), labels=c("faiblement amer","légèrement amer","plutot amer","très amer"), include.lowest=TRUE)
x11()
par(mfrow=c(1,2))
barplot(table(NiveauFondant), main = "Distribution du Niveau de Fondant")
barplot(table(NiveauAmertume), main = "Distribution du Niveau d'Amertume")
#On remarque que globalement les chocolats sont peu fondants et plus amers
```
## 1.2.2. Visualisation du lien entre les deux variales
```R
table_contingence = table(NiveauFondant, NiveauAmertume)
# Graphique en barres pour visualiser le lien entre eux
barplot(table_contingence, beside = TRUE, legend.text = TRUE, main = "Table de contingence entre NiveauFondant et NiveauAmertume", ylab = "Fréquence")
```
## 1.2.3. La table de contigence qui croise les deux est :
```R
table_contingence
#La table de contingence sous hypothèse d'indépendance
table_ind = margin.table(table_contingence, 1) %*% t(margin.table(table_contingence, 2)) / sum(table_contingence)
table_ind
```
## 1.2.4. Calcul de mesure de chi2 san boucle
```R
chi2_test = chisq.test(table(NiveauFondant, NiveauAmertume))
chi2_test
```
## 1.2.5. Lien fort ou pas ?
```R
cramer_coef = sqrt(chis2_test$statistic / (sum(table(NiveauFondant, NiveauAmertume))) - 1))
cramer_coef
#On obtient 0.3743694, donc on a un lien faible et non fort entre les deux variables
```
## 1.2.6.
```R
# Calcul de la région critique au seuil de risque de 5%
alpha = 0.05
df = (length(unique(NiveauFondant)) - 1) * (length(unique(NiveauAmertume)) - 1)
chi2_critique = qchisq(1 - alpha, df)
#On a chi2_test > chi2_critique, donc le lien entre les variables Niveau de Fondant et Niveau d'Amertume est significatif.
detach(data)
```
# EXERCICE 2 #
```R
data = read.table("C:/Users/ibnou/OneDrive/Bureau/agro.data", header = TRUE)
attach(data)
```
## 2.1.1. Nombre d'étudiant décrits
```R
netu= nrow(data)
netu
#Le nombre d'etudiants est 75
```
## 2.1.2. Visualisation nde distibution
```R
x11()
par(mfrow=c(2,2))
hist(note, main = "Distribution des Notes")
boxplot(note, main = "Boxplot des Notes")
#LA médiane des notes est d'environ 14...
barplot(table(cursus), main = "Répartition des Etudiants par Cursus")
#montre la répartition des étudiants par formation.
barplot(table(genre), main = "Répartition des Etudiants par Genre")
#montre la répartition des étudiants par genre.
```
## 2.1.3.
```R
quantile_30 = quantile(note, probs = 0.30)
quantile_70 = quantile(note, probs = 0.70)
quantile_30
quantile_70
#on obtient 12.726 et 14.352
```
## 2.1.4. Variance non corrigée
```R
var(note) #3.781128
```
## 2.1.5
```R
# Boxplot des notes selon le cursus
boxplot(note ~ cursus, main = "Distribution des Notes selon le Cursus")
# Boxplot des notes selon le genre
boxplot(note ~ genre, main = "Distribution des Notes selon le Genre")
```
## 2.1.6.Test de l'effet du cursus sur les notes (ANOVA)
```R
anova_cursus= aov(note ~ cursus)
summary(anova_cursus)
```
## 2.1.7.Test de l'effet du genre sur les notes (ANOVA)
```R
anova_genre=aov(note ~ genre)
summary(anova_genre)
```
## 2.2.
```R
# Calcul de T : nombre de valeurs supérieures à 15g
T <- sum(note > 12)
# Taille de l'échantillon
n <- length(note)
# Calcul de la moyenne et de l'écart-type de T sous H0
mean_T <- n / 2
sd_T <- sqrt(n / 4)
# Calcul de la z-statistique
z_stat <- (T - mean_T) / sd_T
# Calcul de la p-valeur
p_value <- 2 * pnorm(-abs(z_stat)) # test bilatéral
# Seuil de risque de 1%
alpha <- 0.01
# Calcul de la région critique
z_critique <- qnorm(alpha/2)
# Comparaison avec la région critique
if (z_stat < -z_critique | z_stat > z_critique) {
cat("On rejette H0 au niveau de 1% de signification.\n")
} else {
cat("On ne rejette pas H0 au niveau de 1% de signification.\n")
}
```
\ No newline at end of file
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter