TP 2:Le modèle de régression linéaire multiple

#EXCERCICE 1 {r} eucalyp<-read.table("C:/Users/hp/Documents/DATA SCIENCE/marchine learning/DONNEES/eucalyptus.txt",header=T ) eucalyp=eucalyp[,-1] eucalyp nrow(eucalyp)# la taille de l'echantillon #question 1

le nuage de points {r} x=eucalyp$circ y=eucalyp$ht plot(x,y,xlab = "circonsference",ylab = "hauteur",main = "nuage de point",pch="+",col="red") on remarque que ce nuage de point ressemble à la courbe de la fonction racine carrée de la circonsference.donc on ajoute cette variable à notre jeu de donné

{r} rac=sqrt(eucalyp$circ) eucalyp=cbind(eucalyp,rac) eucalyp

je vais construire 3 models pour les comparer

```{r} model1=lm(ht~.,data=eucalyp[,-3])# sans la nouvelle variable rac model2=lm(ht~.,data=eucalyp)# ajout de la nouvelle variable rac model3=lm(ht~rac,data=eucalyp)# uniquement avec la variable rac

summary(model1) summary(model2) summary(model3)

avec les summary je remarque que peut impote la variable explicative que je prend, explique la hauteur mais quel est le meilleur modele d'oùl'intervention de anova

```{r}
anova(model1,model2)

la p_value est inferieur à 0,05 donc l’ajout de la nouvelle variable explique la variable à expliqué ce qui veut dire que c’est le model2 qui l’emporte ```{r} anova(model2,model3)# C’est le model2 qui l’emporte tjrs

#remarque cet anova enter model2 et model3 veut dire que le coefficient devant la variable circ est nulle ou pas

```{r}
anova(model1,model3)# on ne peut pas faire anova de model1 et model3 car ils n'ont rien en commun, on ne peut pas interprèter

en conclusion c’est le model2 qui semble etre meilleur. voyons avec les VC.

#QUESTION 2:VC holdout remarque:Jeu d’entraînement (dapp)** : Utilisé pour entraîner le modèle. - Jeu de test (dtest) : Utilisé pour évaluer le modèle, sans qu’il ait accès à ces données lors de l’entraînement. on fait permute pour que le modèle ne prenne pas seulement les premières lignes pour s’entrainer. ```{r} perm=sample(1429) dapp=eucalyp[perm[1:1200],] dtest=eucalyp[-perm[1:1200],]

construction de mes 3 modeles d’apprentisage

model1_dapp=lm(ht~circ,data=dapp) modeel2_dapp=lm(ht~.,data=dapp) model3_dapp=lm(ht~rac,data=dapp)

#construction de mes 3 predictions pred1=predict(model1_dapp,newdata=dtest,type=“response”) pred2=predict(modeel2_dapp,newdata=dtest, type=“response”) pred3=predict(model3_dapp,newdata=dtest,type=“response”)

#calcule des erreures mean((dtest\(ht-pred1)**2) mean((dtest\)ht-pred2)2)# je retient tjrs le model2 mean((dtest$ht-pred3)2)

#QUESTION 3: VC K-FOLD
JE vais reconstruire mes modele avec glm en faisant appel à la library glmnet et boot
```{r}
library(glmnet)
library(boot)

model1_bis=glm(ht~circ,eucalyp,family = "gaussian")# sans la nouvelle variable rac
model2_bis=glm(ht~.,eucalyp,family="gaussian")# ajout de la nouvelle variable rac
model3_bis=glm(ht~rac,eucalyp,family="gaussian")# uniquement avec la variable rac

# les erreures
cv.glm(eucalyp,model1_bis,K=10)$delta[1]
cv.glm(eucalyp,model2_bis,K=10)$delta[1]# je retient tjrs le model2
cv.glm(eucalyp,model3_bis,K=10)$delta[1]

#QUESTION 4:Etude (graphique) des résidus du modèle retenu(model2) {r} plot(model2_bis)

Évaluer le modèle retenu est une étape essentielle en machine learning et en statistique pour s’assurer que votre modèle fonctionne correctement et qu’il est adapté au problème à résoudre.celà me permet: 1. Vérifier la qualité des prédictions 2. Garantir la généralisation du modèle 3. Détecter les faiblesses du modèle Eventuellement, pour être plus précis, on peut lancer : -un test de linéarité -un test de normalité -un test d’homogénéité de la variance des résidus. -un test de décorrélation des résidus

```{r} library(zoo) library(lmtest)

raintest(model2) #Test de linéarité du modèle,les coefficients estimé sont stable? n’a_t_on pas la variation des coefficient à chaque segment de donnée? on regarde la p-value (valeur élevé oui ,valeur faible non)

#test de shapiro# shapiro.test(resid(model2)) #Test de normalité des résidus,les residus sont normalementdistribué?(proche de 1 oui , proche de 0 NON)aussi Si p-valeur > 0.05 : Les résidus sont normalement distribués et p-valeur ≤ 0.05 : Les résidus ne suivent pas une loi normale

#test de Goldfeld-Quandt (gqtest)# gqtest(model2) #Test d’homogénéité de la variance des résidus,p-valeur > 0.05 :il y a homoscédasticité (les variances des résidus sont constantes).p-valeur ≤ 0.05 :les résidus présentent une hétéroscédasticité (les variances diffèrent)

#Durbin-Watson# dwtest(model2) #Test de décorrélation des résidus, Hypothèse nulle (H0) : Les résidus ne présentent pas d’autocorrélation (indépendance). La statistique DW varie entre 0 et 4. #Si DW ≈ 2, il n’y a pas d’autocorrélation. #Si DW < 2, il y a une autocorrélation positive. #Si DW > 2, il y a une autocorrélation négative.


#question 5: On prédit la hauteur d'un nouvel arbre avec circ=50. On prend model2 issu de la fonction lm
```{r}

predict(model2,data.frame(rac=sqrt(50),circ=50), interval="prediction",level=0.95)

avec le model2_bis {r} predict(model2_bis,newdata=data.frame(rac=sqrt(50),circ=50))

#EXERCICE 2

```{r}

body<-read.table(“C:/Users/hp/Documents/DATA SCIENCE/R/DONNEES/bodyfat.txt”,header = T) body



```{r}


model1<-lm(Weight~Density+Pct.BF+Height,data=body)
summary(model1)

model2=lm(Weight~Age+Height+Chest+Abdomen+Hip,data=body)
summary(model2)

model_complet<-lm(Weight~.,data=body)
summary(model_complet)

#choix de modele avec anova ```{r} anova(model1,model_complet)#je retient le model_complet

anova(model2,model_complet)#je retient tjrs le model_complet



#comparaison des erreures k-fold

```{r}

library(glmnet)
library(boot)
model1_bis<-glm(Weight~Density+Pct.BF+Height,body,family="gaussian")
model2_bis=glm(Weight~Age+Height+Chest+Abdomen+Hip,data=body,family = "gaussian")
model_complet_bis<-glm(Weight~.,body,family="gaussian")

cv.glm(body,model1_bis,K=10)$delta[1]
cv.glm(body,model2_bis,K=10)$delta[1] # ici je retient le model2
cv.glm(body,model_complet_bis,K=10)$delta[1]

REMARQUE: dans anova j’ai retenue le model_complet mais dans VC k-fold je retient le model2 ce qui deveint très compliquer à choisir mon bestmodèdele. POUR TRancher je vais regarder leur AIC et BIC mais cela ne fait pas partir de l’exo

```{r} c(AIC(model_complet),AIC(model2))# JE retient le model_complet

c(BIC(model_complet),BIC(model2))#tjrs le model_complet ``` je suis bien rasuré que c’est le model_complet qui l’emporte