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
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é
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}\]
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é