library(readxl)
Vin=read_xlsx("/home/nekui-tiefang/dataset/data3/vin.xlsx")

head(Vin)
## # A tibble: 6 × 6
##   Année Pluie_Hiver Temperature_moyenne Pluie_recolte   Age  Prix
##   <dbl>       <dbl>               <dbl>         <dbl> <dbl> <dbl>
## 1  1952         600                17.1           160    31 2248.
## 2  1953         690                16.7            80    30 2412.
## 3  1955         502                17.2           130    28 2306.
## 4  1957         420                16.1           110    26 2095.
## 5  1958         582                16.4           187    25 2033.
## 6  1959         485                17.5           187    24 2423.

deux même vin peuvent avoir dif prix sur le marche en fct de certain paramètres probleme: predire la qualité(prix) futur d’un vin sans y avoir goûté (plus besoin des gouteurs pro)

DESCRIPTION de la BD

“Année”:année de recolte “Pluie_Hiver” Niveau de pluies de l’hiver “Temperature_moyenne”:Temperature_moyennedurant la croissance des raisin “Pluie_recolte” Niveau au moment de la recolte “Age” consevation de vin
“Prix” vente

  1. Significativite des varibles
mod1=lm(Prix~.,data=Vin)
summary(mod1)
## 
## Call:
## lm(formula = Prix ~ ., data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -136.409  -72.819    2.256   59.318  160.912 
## 
## Coefficients: (1 not defined because of singularities)
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         13207.4580  4933.0371   2.677 0.014477 *  
## Année                  -7.1792     2.4291  -2.956 0.007819 ** 
## Pluie_Hiver             0.3227     0.1522   2.120 0.046694 *  
## Temperature_moyenne   182.1628    29.6107   6.152  5.2e-06 ***
## Pluie_recolte          -1.1915     0.2561  -4.652 0.000154 ***
## Age                         NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 88.49 on 20 degrees of freedom
## Multiple R-squared:  0.8286, Adjusted R-squared:  0.7943 
## F-statistic: 24.17 on 4 and 20 DF,  p-value: 2.036e-07
library(car)
## Loading required package: carData
#vif(mod1)

bizare Age !!!!

âge vs année ………………………………..

mod2=lm(Prix~.-Année,data = Vin)
summary(mod2)
## 
## Call:
## lm(formula = Prix ~ . - Année, data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -136.409  -72.819    2.256   59.318  160.912 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -1028.9941   529.7693  -1.942 0.066311 .  
## Pluie_Hiver             0.3227     0.1522   2.120 0.046694 *  
## Temperature_moyenne   182.1628    29.6107   6.152  5.2e-06 ***
## Pluie_recolte          -1.1915     0.2561  -4.652 0.000154 ***
## Age                     7.1792     2.4291   2.956 0.007819 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 88.49 on 20 degrees of freedom
## Multiple R-squared:  0.8286, Adjusted R-squared:  0.7943 
## F-statistic: 24.17 on 4 and 20 DF,  p-value: 2.036e-07

cool Age considéré

vif(mod2)
##         Pluie_Hiver Temperature_moyenne       Pluie_recolte                 Age 
##            1.241993            1.225811            1.113615            1.069950
                     Cours

Lorsque l’on a plusieurs variables, la fonction lm() reste pertinente. Il faut juste en maîtriser la syntaxe.

lm(y~x) : régression classique y = f(x) - affine - y = ax+b

lm(y~x+0) : régression linéaire y = f(x) sans intersection - y = ax

mod3=lm(Prix~.-Année+0,data = Vin)
summary(mod3)
## 
## Call:
## lm(formula = Prix ~ . - Année + 0, data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -156.019  -68.751   -1.844   62.644  195.901 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## Pluie_Hiver           0.1685     0.1382   1.220   0.2361    
## Temperature_moyenne 125.9774     6.7327  18.711 1.41e-14 ***
## Pluie_recolte        -1.3296     0.2618  -5.079 4.98e-05 ***
## Age                   7.9672     2.5482   3.127   0.0051 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 94.15 on 21 degrees of freedom
## Multiple R-squared:  0.9984, Adjusted R-squared:  0.998 
## F-statistic:  3190 on 4 and 21 DF,  p-value: < 2.2e-16
vif(mod3)
## Warning in vif.default(mod3): No intercept: vifs may not be sensible.
##         Pluie_Hiver Temperature_moyenne       Pluie_recolte                 Age 
##           20.628199           34.898571            5.293965            6.457457

Attention possible surajustemrnt

mod2=lm(Prix~.-Année+0,data = Vin)
summary(mod2)
## 
## Call:
## lm(formula = Prix ~ . - Année + 0, data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -156.019  -68.751   -1.844   62.644  195.901 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## Pluie_Hiver           0.1685     0.1382   1.220   0.2361    
## Temperature_moyenne 125.9774     6.7327  18.711 1.41e-14 ***
## Pluie_recolte        -1.3296     0.2618  -5.079 4.98e-05 ***
## Age                   7.9672     2.5482   3.127   0.0051 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 94.15 on 21 degrees of freedom
## Multiple R-squared:  0.9984, Adjusted R-squared:  0.998 
## F-statistic:  3190 on 4 and 21 DF,  p-value: < 2.2e-16
mod4=lm(Prix~Temperature_moyenne+Age+Pluie_recolte,data = Vin)
summary(mod4)
## 
## Call:
## lm(formula = Prix ~ Temperature_moyenne + Age + Pluie_recolte, 
##     data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -198.774  -68.858   -0.805   81.708  148.173 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)         -443.3459   488.2242  -0.908  0.37414    
## Temperature_moyenne  159.6877    29.8603   5.348 2.65e-05 ***
## Age                    7.5263     2.6175   2.875  0.00905 ** 
## Pluie_recolte         -1.3616     0.2627  -5.183 3.90e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 95.57 on 21 degrees of freedom
## Multiple R-squared:   0.79,  Adjusted R-squared:   0.76 
## F-statistic: 26.34 on 3 and 21 DF,  p-value: 2.596e-07

verifier aussi la multicoliéarite avec la variance inflexion factor (vif qui a une valeur très très limite de 10 mais meilleur lorsque nous avons la valeur 5) avec la librarie car si les standart error sont très grand notons que deux variables hypercorrellé portent la même information (donc il est preferable d’en éliminer une ) Si plusieurs valeurs ne sont pas significatives, commencer par supprimer la valeur dont la p-value est plus elevé

vif(mod3)
## Warning in vif.default(mod3): No intercept: vifs may not be sensible.
##         Pluie_Hiver Temperature_moyenne       Pluie_recolte                 Age 
##           20.628199           34.898571            5.293965            6.457457
mod4=lm(Prix~Temperature_moyenne+Age+Pluie_recolte+Age+0,data = Vin)
summary(mod4)
## 
## Call:
## lm(formula = Prix ~ Temperature_moyenne + Age + Pluie_recolte + 
##     Age + 0, data = Vin)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -182.674  -65.416   -6.962   81.881  172.478 
## 
## Coefficients:
##                     Estimate Std. Error t value Pr(>|t|)    
## Temperature_moyenne  132.794      3.796  34.984  < 2e-16 ***
## Age                    7.894      2.575   3.065  0.00567 ** 
## Pluie_recolte         -1.395      0.259  -5.386 2.08e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 95.19 on 22 degrees of freedom
## Multiple R-squared:  0.9982, Adjusted R-squared:  0.998 
## F-statistic:  4160 on 3 and 22 DF,  p-value: < 2.2e-16
vif(mod4)
## Warning in vif.default(mod4): No intercept: vifs may not be sensible.
## Temperature_moyenne                 Age       Pluie_recolte 
##           10.852725            6.453917            5.070372
cor(Vin)
##                           Année Pluie_Hiver Temperature_moyenne Pluie_recolte
## Année                1.00000000  0.01697002         -0.24691585    0.02800907
## Pluie_Hiver          0.01697002  1.00000000         -0.32109061   -0.27544085
## Temperature_moyenne -0.24691585 -0.32109061          1.00000000   -0.06449593
## Pluie_recolte        0.02800907 -0.27544085         -0.06449593    1.00000000
## Age                 -1.00000000 -0.01697002          0.24691585   -0.02800907
## Prix                -0.44776786  0.13665055          0.65956286   -0.56332190
##                             Age       Prix
## Année               -1.00000000 -0.4477679
## Pluie_Hiver         -0.01697002  0.1366505
## Temperature_moyenne  0.24691585  0.6595629
## Pluie_recolte       -0.02800907 -0.5633219
## Age                  1.00000000  0.4477679
## Prix                 0.44776786  1.0000000

parfait!! modèle 4 accepté

  1. établissement du modèle (droite de regresion et eqt de la droite ajuste)
VinSignf=data.frame(Vin$Age,Vin$Pluie_recolte,Vin$Temperature_moyenne,Vin$Prix)
library(scatterplot3d)
mod4=lm(Prix~Temperature_moyenne+Age+Pluie_recolte+Age+0,data = Vin)
scatterplot3d(VinSignf)
abline(mod4, col = "red")
## Warning in abline(mod4, col = "red"): only using the first two of 3 regression
## coefficients

pas tres important ici

coef(mod4)
## Temperature_moyenne                 Age       Pluie_recolte 
##          132.793928            7.894430           -1.395241

l équation de la droite ajustest : \[ Ŷ_{i}=132.8*T_{i}+7.9*A_{i}-1.4P_{i}\]

  1. validité du model ce model est valide si les conditions suivantes sont respectées: 1-linéarité 2-normalité des residus 3-Homoscedasticité 4-indépendance des residus 5-absence de valeurs aberrantes

    3-1) linearité

HO: oui lineare H1: non lineaire

library(lmtest)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
raintest(mod4)
## 
##  Rainbow test
## 
## data:  mod4
## Rain = 1.5292, df1 = 13, df2 = 9, p-value = 0.2649

linearité accepté

3-2)normalité

hist(residuals.lm(mod4),col="yellow",freq=F)
densite <- density(residuals.lm(mod4)) # estimer la densité que line représente ces différentes  l'histogramme
lines(densite)

autre methodes recommandé

shapiro.test(residuals.lm(mod4))
## 
##  Shapiro-Wilk normality test
## 
## data:  residuals.lm(mod4)
## W = 0.97388, p-value = 0.7437

Normalité des residus Validé…!!!

library(performance)
check_normality(mod4)
## OK: residuals appear as normally distributed (p = 0.689).

3-3)indépendance des residus

library(lmtest)
dwtest(mod4)
## 
##  Durbin-Watson test
## 
## data:  mod4
## DW = 2.2757, p-value = 0.6843
## alternative hypothesis: true autocorrelation is greater than 0

il faut une p-value supérieure à 0,05 pour avoir indépendance.

conclusion: residus indépendant !!!

*On peut aussi visualiser l’indépendance avec ce graphique suivant :

library(stats)
acf(residuals(mod4), main="Regression Y = f(X)")

conclusion: residus indépendant !!!

L’interprétation de ce graphique se fait de la manière suivante : -Le premier bâtonnet est très élevé, c’est l’auto-corrélation des résidus avec eux-même ! -Le deuxième bâtonnet indique l’auto-corrélation entre les résidus et les résidus n+1 : il y a auto-corrélation dès que le bâtonnet (lag) dépasse les pointillés. -Le troisième bâtonnet entre les résidus n et les résidus n+2… etc.

check_autocorrelation(mod4) 
## OK: Residuals appear to be independent and not autocorrelated (p = 0.674).

3-4)homoscedasticité

library(car)
plot(mod4, which = 3)

On cherche ici une courbe rouge plane. L’homogénéité est à rejeter si celle-ci n’est pas horizontale.

*homoscedas possiblement rejeté

library("lmtest") ;
bptest(mod4) # librairie lmtest
## 
##  studentized Breusch-Pagan test
## 
## data:  mod4
## BP = 2.7681, df = 2, p-value = 0.2506
ncvTest(mod4) # librairie car
## Non-constant Variance Score Test 
## Variance formula: ~ fitted.values 
## Chisquare = 1.344836, Df = 1, p = 0.24618

L’homogénéité est rejeté si la p-value est inférieure à 0,05

gqtest(mod4)
## 
##  Goldfeld-Quandt test
## 
## data:  mod4
## GQ = 1.1396, df1 = 10, df2 = 9, p-value = 0.427
## alternative hypothesis: variance increases from segment 1 to 2

Vérification par le test de Goldfeld-Quandt (homogénéité : p-value > 0,05)

library(performance)
check_heteroscedasticity(mod4)
## OK: Error variance appears to be homoscedastic (p = 0.246).

Homoscedasticité des residus verifié !!!

3-5) absence de valeurs aberrantes (toute les valeurs doivent êtres présentes)

plot(mod4, which = 1) 

plot(mod4, which = 2) 

plot(mod4, which = 3) 

plot(mod4, which = 4)  

plot(mod4, which = 5) # ce qui m'interesse !!!!

plot(mod4, which = 6) 

le lien de la documentation de tout les cas: https://data.library.virginia.edu/diagnostic-plots/

aucune valeur en dehors de la cook’s distance Donc pas de valeur extrême

boxplot(residuals.lm(mod4))

limites de turkey bien aux limites de notre cadrant Donc pas de valeur extrême

CONCLUSION NOTRE MODELE \[ Ŷ_{i}=132.8*T_{i}+7.9*A_{i}-1.4P_{i}\] PEUT ETRE CONSIDERE COMME VALIDE PUISQUE TOUTES LES CONDITIONS SONT Verifié