Analyse en Composantes Principales (ACP)

Format des données

On s’intéresse au climat des différents pays d’Europe. Pour cela, on a recueilli les températures moyennes mensuelles (en degrés Celsius) pour les principales capitales européennes ainsi que pour certaines grandes villes.

En plus des températures mensuelles, on a la température moyenne annuelle ainsi que l’amplitude thermique (différence entre la moyenne mensuelle maximum et la moyenne mensuelle minimum d’une ville). On a également deux variables de positionnement (la longitude et la latitude) ainsi qu’une variable (l’appartenance à une région d’Europe, variable à quatre modalités : Europe du nord, du sud, de l’est, de l’ouest).

library("FactoMineR")
library("factoextra")
## Loading required package: ggplot2
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
donnee = read.table("jeu_donnee_DM2.csv", header = TRUE, row.names = 1, check.names = FALSE, sep = ";", dec = ".")

*Tableau de données Il s’agit de 17 variables (16 quantitatives & 1 qualitative) et 35 observations :

head(donnee)
##            Janvier Février Mars Avril  Mai Juin Juillet Août Septembre
## Amsterdam      2.9     2.5  5.7   8.2 12.5 14.8    17.1 17.1      14.5
## Athènes        9.1     9.7 11.7  15.4 20.1 24.5    27.4 27.2      23.8
## Berlin        -0.2     0.1  4.4   8.2 13.8 16.0    18.3 18.0      14.4
## Bruxelles      3.3     3.3  6.7   8.9 12.8 15.6    17.8 17.8      15.0
## Budapest      -1.1     0.8  5.5  11.6 17.0 20.2    22.0 21.3      16.9
## Copenhague    -0.4    -0.4  1.3   5.8 11.1 15.4    17.1 16.6      13.3
##            Octobre Novembre Décembre Moyenne Amplitude Latitude Longitude
## Amsterdam     11.4      7.0      4.4     9.9      14.6     52.2       4.5
## Athènes       19.2     14.6     11.0    17.8      18.3     37.6      23.5
## Berlin        10.0      4.2      1.2     9.1      18.5     52.3      13.2
## Bruxelles     11.1      6.7      4.4    10.3      14.4     50.5       4.2
## Budapest      11.3      5.1      0.7    10.9      23.1     47.3      19.0
## Copenhague     8.8      4.1      1.3     7.8      17.5     55.4      12.3
##            Région
## Amsterdam   Ouest
## Athènes       Sud
## Berlin      Ouest
## Bruxelles   Ouest
## Budapest      Est
## Copenhague   Nord

Dans ce tableau on a gardé 12 variables, les mois de l’année, sans toucher aux observations :

donnee_acti = donnee[1:35, 1:12]

head(donnee_acti)
##            Janvier Février Mars Avril  Mai Juin Juillet Août Septembre
## Amsterdam      2.9     2.5  5.7   8.2 12.5 14.8    17.1 17.1      14.5
## Athènes        9.1     9.7 11.7  15.4 20.1 24.5    27.4 27.2      23.8
## Berlin        -0.2     0.1  4.4   8.2 13.8 16.0    18.3 18.0      14.4
## Bruxelles      3.3     3.3  6.7   8.9 12.8 15.6    17.8 17.8      15.0
## Budapest      -1.1     0.8  5.5  11.6 17.0 20.2    22.0 21.3      16.9
## Copenhague    -0.4    -0.4  1.3   5.8 11.1 15.4    17.1 16.6      13.3
##            Octobre Novembre Décembre
## Amsterdam     11.4      7.0      4.4
## Athènes       19.2     14.6     11.0
## Berlin        10.0      4.2      1.2
## Bruxelles     11.1      6.7      4.4
## Budapest      11.3      5.1      0.7
## Copenhague     8.8      4.1      1.3
  • Remarque :

L’ACP est particulièrement utile lorsque les variables sont fortement corrélées. La corrélation indique qu’il existe une redondance dans les données. En raison de cette redondance, l’ACP peut être utilisée pour réduire les variables d’origine en un nombre plus petit de nouvelles variables qu’on appelle composantes principales, ces dernières expliquant la plus grande partie de la variance contenue dans les variables d’origine.

  • Objectifs :

  • Identifier les “profils cachés”.
  • Réduire les dimensions des données en enlevant la redondance des données.
  • Identifier les variables corrélées.

Standardisation des données

Dans l’ACP, il est recommandé de normaliser les variables lorsqu’elles sont mesurées dans différentes unités (par exemple: Celsius, Kelvin, Fahrenheit.) sinon, le résultat de l’ACP obtenue sera fortement affecté. L’objectif est de rendre les variables comparables. Généralement, elles sont normalisées de manière qu’elles aient au final un écart type égal à 1 et une moyenne égale à 0. Techniquement, l’approche consiste à transformer les données en soustrayant à chaque valeur la moyenne et en la divisant par l’écart type de la variable associée. A l’issue de cette transformation les données obtenues sont dites données centrées réduites. L’ACP appliquée à ces données transformées est appelée ACP normée. Notons bien que la fonction PCA() qu’on va utiliser pour appliquer l’ACP normalise automatiquement les données.

ACP

L’objet créé avec la fonction PCA() contient de nombreuses informations stockées dans de nombreuses listes et matrices. Ces valeurs sont expliquées dans la section suivante.

ACP=PCA(donnee_acti, scale.unit=TRUE, graph = TRUE)

ACP
## **Results for the Principal Component Analysis (PCA)**
## The analysis was performed on 35 individuals, described by 12 variables
## *The results are available in the following objects:
## 
##    name               description                          
## 1  "$eig"             "eigenvalues"                        
## 2  "$var"             "results for the variables"          
## 3  "$var$coord"       "coord. for the variables"           
## 4  "$var$cor"         "correlations variables - dimensions"
## 5  "$var$cos2"        "cos2 for the variables"             
## 6  "$var$contrib"     "contributions of the variables"     
## 7  "$ind"             "results for the individuals"        
## 8  "$ind$coord"       "coord. for the individuals"         
## 9  "$ind$cos2"        "cos2 for the individuals"           
## 10 "$ind$contrib"     "contributions of the individuals"   
## 11 "$call"            "summary statistics"                 
## 12 "$call$centre"     "mean of the variables"              
## 13 "$call$ecart.type" "standard error of the variables"    
## 14 "$call$row.w"      "weights for the individuals"        
## 15 "$call$col.w"      "weights for the variables"

Interprétation des résultats

Valeurs propres

Les valeurs propres mesurent la quantité de variance expliquée par chaque axe principal. Les valeurs propres sont grandes pour les premiers axes et petits pour les axes suivants. Autrement dit, les premiers axes correspondent aux directions portant la quantité maximale de variation contenue dans le jeu de données.

Nous examinons les valeurs propres pour déterminer le nombre de composantes principales à prendre en considération.

get_eigenvalue(ACP)
##          eigenvalue variance.percent cumulative.variance.percent
## Dim.1  1.042445e+01     86.870441346                    86.87044
## Dim.2  1.370499e+00     11.420823117                    98.29126
## Dim.3  1.205076e-01      1.004230241                    99.29549
## Dim.4  4.233298e-02      0.352774838                    99.64827
## Dim.5  2.292280e-02      0.191023370                    99.83929
## Dim.6  8.684234e-03      0.072368614                    99.91166
## Dim.7  4.178064e-03      0.034817200                    99.94648
## Dim.8  2.930325e-03      0.024419371                    99.97090
## Dim.9  1.475750e-03      0.012297915                    99.98320
## Dim.10 8.529732e-04      0.007108110                    99.99030
## Dim.11 7.862929e-04      0.006552441                    99.99686
## Dim.12 3.772122e-04      0.003143435                   100.00000

La somme de toutes les valeurs propres donne une variance totale de 12 (= nbre de variables). La proportion de variance expliquée par chaque valeur propre est donnée dans la deuxième colonne. Par exemple, 10.42 divisé par 12 est égal à 0.86, ou, environ 86.87% de la variation est expliquée par cette première valeur propre.

Le pourcentage cumulé expliqué est obtenu en ajoutant les proportions successives de variances expliquées. Par exemple, 86.87% plus 11.42% est égale à 98.29%, et ainsi de suite. Par conséquent, environ 98.29% de la variance totale est expliquée par les deux premières valeurs propres.

*Remarque

Malheureusement, il n’existe pas de méthode objective bien acceptée pour décider le nombre d’axes principaux à conserver. Cela dépendra du domaine d’application et du jeu de données. Dans la pratique, on a tendance à regarder les premiers axes principaux afin de trouver des profils intéressants dans les données.

Dans notre analyse, les deux premières composantes principales expliquent 98.29% de la variation. C’est un pourcentage très acceptable.

fviz_eig(ACP, addlabels = TRUE)

D’après Peres-Neto, Jackson et Somers, pour déterminer le nombre de composantes principales on peut regarder le graphique des valeurs propres. Le nombre d’axes est déterminé par le point, au-delà duquel les valeurs propres restantes sont toutes relativement petites et de tailles comparables. Du graphique ci-dessus, nous pourrions vouloir nous arrêter à la 2ème composante principale. ### Graphique des variables

Coordonnées

var = get_pca_var(ACP)
var$coord
##               Dim.1       Dim.2       Dim.3        Dim.4        Dim.5
## Janvier   0.8860755 -0.45751432  0.05206208  0.011585933  0.031138228
## Février   0.9155949 -0.39031905 -0.01935250 -0.053318034  0.071974199
## Mars      0.9584119 -0.24677942 -0.09436133 -0.099540248 -0.010720046
## Avril     0.9800993  0.05762190 -0.18288103 -0.037434910 -0.002314438
## Mai       0.9122675  0.35994808 -0.17566663  0.069231356 -0.025709333
## Juin      0.8777769  0.46805841 -0.01779077  0.058623751  0.074662743
## Juillet   0.8764329  0.45990165  0.12712857 -0.009623827  0.042037666
## Août      0.9133722  0.37081148  0.13473486 -0.086191791 -0.037955697
## Septembre 0.9877626  0.13646682  0.04623238 -0.021529403 -0.024664614
## Octobre   0.9928896 -0.07186248  0.03518855  0.025002780 -0.079007340
## Novembre  0.9653903 -0.24169454  0.04479545  0.069973424 -0.018172136
## Décembre  0.9073424 -0.40589958  0.06481038  0.079435500 -0.005350611

Chaque colonne représente les affixes des projetées orthogonaux des variables actives sur un axe principal.

Cercle de corrélation

La corrélation entre une variable et une composante principale est utilisée comme coordonnées de la variable sur la composante principale.

La représentation des variables diffère de celle des observations: les observations sont représentées par leurs projections, mais les variables sont représentées par leurs corrélations.

fviz_pca_var(ACP, col.var = "red", repel=TRUE)

Le graphique ci-dessus est connu sous le nom de graphique de corrélation des variables. Il montre les relations entre toutes les variables. Il peut être interprété comme suit:

  • Les variables positivement corrélées sont regroupées.
  • Les variables négativement corrélées sont positionnées sur les côtés opposés de l’origine.
  • La distance entre les variables et l’origine mesure la qualité de représentation des variables. Celles qui sont loin de l’origine sont bien représentées par l’ACP

Qualité de représentation

La qualité de représentation, cos², mesure le degré d’association entre lesvariables et les dimensions.

var$cos2
##               Dim.1       Dim.2        Dim.3        Dim.4        Dim.5
## Janvier   0.7851298 0.209319354 0.0027104597 1.342339e-04 9.695892e-04
## Février   0.8383139 0.152348962 0.0003745193 2.842813e-03 5.180285e-03
## Mars      0.9185534 0.060900080 0.0089040613 9.908261e-03 1.149194e-04
## Avril     0.9605946 0.003320284 0.0334454729 1.401372e-03 5.356625e-06
## Mai       0.8322320 0.129562620 0.0308587646 4.792981e-03 6.609698e-04
## Juin      0.7704924 0.219078672 0.0003165115 3.436744e-03 5.574525e-03
## Juillet   0.7681347 0.211509525 0.0161616730 9.261805e-05 1.767165e-03
## Août      0.8342488 0.137501154 0.0181534825 7.429025e-03 1.440635e-03
## Septembre 0.9756749 0.018623193 0.0021374326 4.635152e-04 6.083432e-04
## Octobre   0.9858298 0.005164216 0.0012382342 6.251390e-04 6.242160e-03
## Novembre  0.9319784 0.058416248 0.0020066327 4.896280e-03 3.302265e-04
## Décembre  0.8232703 0.164754466 0.0042003848 6.309999e-03 2.862903e-05
fviz_cos2(ACP, choice="var",axes=1:2)

Les deux dimensions 1 & 2 portent 98.29% de l’inertie totale. Tous les points sont très bien représentés par ces deux dimensions.

  • Un cos² élevé indique une bonne représentation de la variable sur les axes principaux en considération. Dans ce cas, la variable est positionnée à proximité de la circonférence du cercle de corrélation.

  • Un faible cos² indique que la variable n’est pas parfaitement représentée par les axes principaux. Dans ce cas, la variable est proche du centre du cercle.

fviz_pca_var(ACP,col.var="cos2", gradient.cols = c("white","blue","red"), regel= TRUE)

Les variables à faible valeur de cos² sont colorées en blanc, celles à valeurs moyennes sont en bleu et celles à valeurs élevées sont en rouge.

Contribution des variables aux axes principaux

Les contributions des variables dans la définition d’un axe principal donné, sont exprimées en pourcentage.

var$contrib
##              Dim.1      Dim.2      Dim.3      Dim.4       Dim.5
## Janvier   7.531617 15.2732245  2.2492018  0.3170905  4.22980196
## Février   8.041803 11.1163151  0.3107848  6.7153618 22.59882892
## Mars      8.811526  4.4436435  7.3887947 23.4055358  0.50133217
## Avril     9.214820  0.2422683 27.7538220  3.3103562  0.02336811
## Mai       7.983460  9.4536838 25.6073120 11.3220957  2.88345966
## Juin      7.391202 15.9853242  0.2626485  8.1183609 24.31868764
## Juillet   7.368585 15.4330327 13.4113276  0.2187846  7.70920238
## Août      8.002806 10.0329279 15.0641770 17.5490238  6.28472360
## Septembre 9.359483  1.3588624  1.7736907  1.0949269  2.65387775
## Octobre   9.456898  0.3768129  1.0275152  1.4767186 27.23122185
## Novembre  8.940309  4.2624079  1.6651499 11.5661122  1.44060271
## Décembre  7.897492 12.0214968  3.4855759 14.9056328  0.12489325
fviz_contrib(ACP,choice="var",axes=1)

fviz_contrib(ACP,choice="var",axes=2)

Plus la valeur de la contribution est importante, plus la variable contribue à la composante principale en question

  • Les variables corrélées avec les deux premiers axes principaux sont les plus importantes pour expliquer la variabilité dans le jeu de données.
  • Les variables qui ne sont pas en corrélation avec un axe ou qui sont corrélées avec les derniers axes sont des variables à faible apport et peuvent être supprimées pour simplifier l’analyse globale.
fviz_pca_var(ACP, col.var="contrib", gradient.cols= c("white", "blue", "red"), repel = TRUE)

Les variables à faible contribution aux dimensions 1 & 2 sont colorées en blanc, celles à valeurs moyennes sont en bleu et celles à valeurs élevées sont en rouge.

Graphique des individus

Qualité et contribution:

Comme les variables, il est également possible de colorer les individus en fonction de leurs valeurs de cos².

fviz_pca_ind(ACP, col.ind="cos2", gradient.cols=c("white", "blue", "red"), repel = TRUE)

fviz_pca_ind(ACP, pointsiez="cos2", pointshape=21, fill = "blue", repel = TRUE)

Les villes qui ont des climats similaires sont regroupés sur le graphique.

fviz_contrib(ACP, choice = "ind", aces=1:2)

On remarque que Séville est l’individu qui contribue le plus aux deux premières composantes principales. _____________________

Régression des moindres carrés partiels (PLS)

La régression PLS (Partial Least Squares) est une technique qui généralise et combine des caractéristiques de l’analyse en composantes principales et de la régression multiple. Il est particulièrement utile lorsque nous avons besoin de prédire un ensemble de variables dépendantes à partir d’un (très) grand ensemble de variables indépendantes. C’est une méthode développée par Herman Wold pendant les années soixante du vingtième siècle.

Exemple d’application :

options(warn=0)
library(knitr)
## Warning: package 'knitr' was built under R version 3.4.4
library(ggplot2) # Data visualization
library(plyr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:plyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(corrplot)
## Warning: package 'corrplot' was built under R version 3.4.4
## corrplot 0.84 loaded
library(caret) 
## Warning: package 'caret' was built under R version 3.4.4
## Loading required package: lattice
library(gridExtra)
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(scales)
library(Rmisc)
## Warning: package 'Rmisc' was built under R version 3.4.4
library(ggrepel)
library(psych)
## Warning: package 'psych' was built under R version 3.4.4
## 
## Attaching package: 'psych'
## The following objects are masked from 'package:scales':
## 
##     alpha, rescale
## The following objects are masked from 'package:ggplot2':
## 
##     %+%, alpha
library(readr) # CSV file I/O, e.g. the read_csv function
## Warning: package 'readr' was built under R version 3.4.4
## 
## Attaching package: 'readr'
## The following object is masked from 'package:scales':
## 
##     col_factor
library(gplots)
## Warning: package 'gplots' was built under R version 3.4.4
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
library(repr)
## Warning: package 'repr' was built under R version 3.4.4
train <- read.csv("train.csv")

Dans cette base de données, il y a 1460 observations avec 79 variables explicatives décrivant tous(ou presque) les aspects des maisons résidentielles. Parmi les variables explicatives, il y a 37 variables entières, telles que??? Id???," MSSubClass???," LotFrontage??? et 43 variables factorielles, telles que “MSZoning???,” Street???, et" LotShape???. L’analyse descriptive et l’analyse quantitative en utiliseront des sous-ensembles en fonction des modèles.

Les variables sont descriptives dans un dossier txt en jointure.

Nous traiterons cela en deux parties :

  1. Première partie: Analyse descriptive et exploratoire.
  2. Deuxième partie : MLR et PLS : prédiction et modélisation.

Vérification des données manquantes :

# list des collones qui ont ne valeur manquante
missing_row <- train[!complete.cases(train),]
head(missing_row)
##   Id MSSubClass MSZoning LotFrontage LotArea Street Alley LotShape
## 1  1         60       RL          65    8450   Pave  <NA>      Reg
## 2  2         20       RL          80    9600   Pave  <NA>      Reg
## 3  3         60       RL          68   11250   Pave  <NA>      IR1
## 4  4         70       RL          60    9550   Pave  <NA>      IR1
## 5  5         60       RL          84   14260   Pave  <NA>      IR1
## 6  6         50       RL          85   14115   Pave  <NA>      IR1
##   LandContour Utilities LotConfig LandSlope Neighborhood Condition1
## 1         Lvl    AllPub    Inside       Gtl      CollgCr       Norm
## 2         Lvl    AllPub       FR2       Gtl      Veenker      Feedr
## 3         Lvl    AllPub    Inside       Gtl      CollgCr       Norm
## 4         Lvl    AllPub    Corner       Gtl      Crawfor       Norm
## 5         Lvl    AllPub       FR2       Gtl      NoRidge       Norm
## 6         Lvl    AllPub    Inside       Gtl      Mitchel       Norm
##   Condition2 BldgType HouseStyle OverallQual OverallCond YearBuilt
## 1       Norm     1Fam     2Story           7           5      2003
## 2       Norm     1Fam     1Story           6           8      1976
## 3       Norm     1Fam     2Story           7           5      2001
## 4       Norm     1Fam     2Story           7           5      1915
## 5       Norm     1Fam     2Story           8           5      2000
## 6       Norm     1Fam     1.5Fin           5           5      1993
##   YearRemodAdd RoofStyle RoofMatl Exterior1st Exterior2nd MasVnrType
## 1         2003     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 2         1976     Gable  CompShg     MetalSd     MetalSd       None
## 3         2002     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 4         1970     Gable  CompShg     Wd Sdng     Wd Shng       None
## 5         2000     Gable  CompShg     VinylSd     VinylSd    BrkFace
## 6         1995     Gable  CompShg     VinylSd     VinylSd       None
##   MasVnrArea ExterQual ExterCond Foundation BsmtQual BsmtCond BsmtExposure
## 1        196        Gd        TA      PConc       Gd       TA           No
## 2          0        TA        TA     CBlock       Gd       TA           Gd
## 3        162        Gd        TA      PConc       Gd       TA           Mn
## 4          0        TA        TA     BrkTil       TA       Gd           No
## 5        350        Gd        TA      PConc       Gd       TA           Av
## 6          0        TA        TA       Wood       Gd       TA           No
##   BsmtFinType1 BsmtFinSF1 BsmtFinType2 BsmtFinSF2 BsmtUnfSF TotalBsmtSF
## 1          GLQ        706          Unf          0       150         856
## 2          ALQ        978          Unf          0       284        1262
## 3          GLQ        486          Unf          0       434         920
## 4          ALQ        216          Unf          0       540         756
## 5          GLQ        655          Unf          0       490        1145
## 6          GLQ        732          Unf          0        64         796
##   Heating HeatingQC CentralAir Electrical X1stFlrSF X2ndFlrSF LowQualFinSF
## 1    GasA        Ex          Y      SBrkr       856       854            0
## 2    GasA        Ex          Y      SBrkr      1262         0            0
## 3    GasA        Ex          Y      SBrkr       920       866            0
## 4    GasA        Gd          Y      SBrkr       961       756            0
## 5    GasA        Ex          Y      SBrkr      1145      1053            0
## 6    GasA        Ex          Y      SBrkr       796       566            0
##   GrLivArea BsmtFullBath BsmtHalfBath FullBath HalfBath BedroomAbvGr
## 1      1710            1            0        2        1            3
## 2      1262            0            1        2        0            3
## 3      1786            1            0        2        1            3
## 4      1717            1            0        1        0            3
## 5      2198            1            0        2        1            4
## 6      1362            1            0        1        1            1
##   KitchenAbvGr KitchenQual TotRmsAbvGrd Functional Fireplaces FireplaceQu
## 1            1          Gd            8        Typ          0        <NA>
## 2            1          TA            6        Typ          1          TA
## 3            1          Gd            6        Typ          1          TA
## 4            1          Gd            7        Typ          1          Gd
## 5            1          Gd            9        Typ          1          TA
## 6            1          TA            5        Typ          0        <NA>
##   GarageType GarageYrBlt GarageFinish GarageCars GarageArea GarageQual
## 1     Attchd        2003          RFn          2        548         TA
## 2     Attchd        1976          RFn          2        460         TA
## 3     Attchd        2001          RFn          2        608         TA
## 4     Detchd        1998          Unf          3        642         TA
## 5     Attchd        2000          RFn          3        836         TA
## 6     Attchd        1993          Unf          2        480         TA
##   GarageCond PavedDrive WoodDeckSF OpenPorchSF EnclosedPorch X3SsnPorch
## 1         TA          Y          0          61             0          0
## 2         TA          Y        298           0             0          0
## 3         TA          Y          0          42             0          0
## 4         TA          Y          0          35           272          0
## 5         TA          Y        192          84             0          0
## 6         TA          Y         40          30             0        320
##   ScreenPorch PoolArea PoolQC Fence MiscFeature MiscVal MoSold YrSold
## 1           0        0   <NA>  <NA>        <NA>       0      2   2008
## 2           0        0   <NA>  <NA>        <NA>       0      5   2007
## 3           0        0   <NA>  <NA>        <NA>       0      9   2008
## 4           0        0   <NA>  <NA>        <NA>       0      2   2006
## 5           0        0   <NA>  <NA>        <NA>       0     12   2008
## 6           0        0   <NA> MnPrv        Shed     700     10   2009
##   SaleType SaleCondition SalePrice
## 1       WD        Normal    208500
## 2       WD        Normal    181500
## 3       WD        Normal    223500
## 4       WD       Abnorml    140000
## 5       WD        Normal    250000
## 6       WD        Normal    143000
nrow(missing_row)
## [1] 1460

On a 1460 lignes avec des valeurs manquantes dans notre base de données.

Séléction des variables

*Cette partie ce décompose en deux étapes : + Étape 1: sélectionnez les variables qui peuvent avoir un impact plus important sur le prix de la maison. + Étape 2: créer un sous-ensemble des données.

Le nom de toutes les varibales contenu dans notre jeu de données est le suivant:

## montrer le nom de tout les variables
var_name <- names(train)
var_name
##  [1] "Id"            "MSSubClass"    "MSZoning"      "LotFrontage"  
##  [5] "LotArea"       "Street"        "Alley"         "LotShape"     
##  [9] "LandContour"   "Utilities"     "LotConfig"     "LandSlope"    
## [13] "Neighborhood"  "Condition1"    "Condition2"    "BldgType"     
## [17] "HouseStyle"    "OverallQual"   "OverallCond"   "YearBuilt"    
## [21] "YearRemodAdd"  "RoofStyle"     "RoofMatl"      "Exterior1st"  
## [25] "Exterior2nd"   "MasVnrType"    "MasVnrArea"    "ExterQual"    
## [29] "ExterCond"     "Foundation"    "BsmtQual"      "BsmtCond"     
## [33] "BsmtExposure"  "BsmtFinType1"  "BsmtFinSF1"    "BsmtFinType2" 
## [37] "BsmtFinSF2"    "BsmtUnfSF"     "TotalBsmtSF"   "Heating"      
## [41] "HeatingQC"     "CentralAir"    "Electrical"    "X1stFlrSF"    
## [45] "X2ndFlrSF"     "LowQualFinSF"  "GrLivArea"     "BsmtFullBath" 
## [49] "BsmtHalfBath"  "FullBath"      "HalfBath"      "BedroomAbvGr" 
## [53] "KitchenAbvGr"  "KitchenQual"   "TotRmsAbvGrd"  "Functional"   
## [57] "Fireplaces"    "FireplaceQu"   "GarageType"    "GarageYrBlt"  
## [61] "GarageFinish"  "GarageCars"    "GarageArea"    "GarageQual"   
## [65] "GarageCond"    "PavedDrive"    "WoodDeckSF"    "OpenPorchSF"  
## [69] "EnclosedPorch" "X3SsnPorch"    "ScreenPorch"   "PoolArea"     
## [73] "PoolQC"        "Fence"         "MiscFeature"   "MiscVal"      
## [77] "MoSold"        "YrSold"        "SaleType"      "SaleCondition"
## [81] "SalePrice"

Pour mieux comprendre ce jeu de données, nous avons résumés toutes les variables importantes en termes de minimum, premier quartile, médiane, moyenne, troisième quantile et valeur maximale. Ce sont ces variables là qu’on va considérer pour notre modèle.

# Ici nous selectinos les variables importante en créant un vecteur conteant le nom de ces variables.
select_var <- c('Id','MSZoning','Utilities', 'Neighborhood','BldgType','HouseStyle',
                'OverallQual','OverallCond','YearBuilt', 'ExterQual','ExterCond',
                'BsmtQual','BsmtCond','TotalBsmtSF','Heating','HeatingQC', 
                'CentralAir','Electrical','GrLivArea','BedroomAbvGr','KitchenAbvGr',
                'KitchenQual','TotRmsAbvGrd','Functional','Fireplaces','FireplaceQu',
               'GarageArea','GarageQual','GarageCond','OpenPorchSF','PoolArea',
                'Fence','MoSold','YrSold','SaleType','SaleCondition','SalePrice')

# Cntruction du sous ensemble de notre jeu de donnée qu'on va utiliser pour l'analyse, la modélisation et la prédiction.
select_train <- train[,select_var]
summary(select_train)
##        Id            MSZoning     Utilities     Neighborhood   BldgType   
##  Min.   :   1.0   C (all):  10   AllPub:1459   NAmes  :225   1Fam  :1220  
##  1st Qu.: 365.8   FV     :  65   NoSeWa:   1   CollgCr:150   2fmCon:  31  
##  Median : 730.5   RH     :  16                 OldTown:113   Duplex:  52  
##  Mean   : 730.5   RL     :1151                 Edwards:100   Twnhs :  43  
##  3rd Qu.:1095.2   RM     : 218                 Somerst: 86   TwnhsE: 114  
##  Max.   :1460.0                                Gilbert: 79                
##                                                (Other):707                
##    HouseStyle   OverallQual      OverallCond      YearBuilt    ExterQual
##  1Story :726   Min.   : 1.000   Min.   :1.000   Min.   :1872   Ex: 52   
##  2Story :445   1st Qu.: 5.000   1st Qu.:5.000   1st Qu.:1954   Fa: 14   
##  1.5Fin :154   Median : 6.000   Median :5.000   Median :1973   Gd:488   
##  SLvl   : 65   Mean   : 6.099   Mean   :5.575   Mean   :1971   TA:906   
##  SFoyer : 37   3rd Qu.: 7.000   3rd Qu.:6.000   3rd Qu.:2000            
##  1.5Unf : 14   Max.   :10.000   Max.   :9.000   Max.   :2010            
##  (Other): 19                                                            
##  ExterCond BsmtQual   BsmtCond     TotalBsmtSF      Heating     HeatingQC
##  Ex:   3   Ex  :121   Fa  :  45   Min.   :   0.0   Floor:   1   Ex:741   
##  Fa:  28   Fa  : 35   Gd  :  65   1st Qu.: 795.8   GasA :1428   Fa: 49   
##  Gd: 146   Gd  :618   Po  :   2   Median : 991.5   GasW :  18   Gd:241   
##  Po:   1   TA  :649   TA  :1311   Mean   :1057.4   Grav :   7   Po:  1   
##  TA:1282   NA's: 37   NA's:  37   3rd Qu.:1298.2   OthW :   2   TA:428   
##                                   Max.   :6110.0   Wall :   4            
##                                                                          
##  CentralAir Electrical     GrLivArea     BedroomAbvGr    KitchenAbvGr  
##  N:  95     FuseA:  94   Min.   : 334   Min.   :0.000   Min.   :0.000  
##  Y:1365     FuseF:  27   1st Qu.:1130   1st Qu.:2.000   1st Qu.:1.000  
##             FuseP:   3   Median :1464   Median :3.000   Median :1.000  
##             Mix  :   1   Mean   :1515   Mean   :2.866   Mean   :1.047  
##             SBrkr:1334   3rd Qu.:1777   3rd Qu.:3.000   3rd Qu.:1.000  
##             NA's :   1   Max.   :5642   Max.   :8.000   Max.   :3.000  
##                                                                        
##  KitchenQual  TotRmsAbvGrd    Functional    Fireplaces    FireplaceQu
##  Ex:100      Min.   : 2.000   Maj1:  14   Min.   :0.000   Ex  : 24   
##  Fa: 39      1st Qu.: 5.000   Maj2:   5   1st Qu.:0.000   Fa  : 33   
##  Gd:586      Median : 6.000   Min1:  31   Median :1.000   Gd  :380   
##  TA:735      Mean   : 6.518   Min2:  34   Mean   :0.613   Po  : 20   
##              3rd Qu.: 7.000   Mod :  15   3rd Qu.:1.000   TA  :313   
##              Max.   :14.000   Sev :   1   Max.   :3.000   NA's:690   
##                               Typ :1360                              
##    GarageArea     GarageQual  GarageCond   OpenPorchSF    
##  Min.   :   0.0   Ex  :   3   Ex  :   2   Min.   :  0.00  
##  1st Qu.: 334.5   Fa  :  48   Fa  :  35   1st Qu.:  0.00  
##  Median : 480.0   Gd  :  14   Gd  :   9   Median : 25.00  
##  Mean   : 473.0   Po  :   3   Po  :   7   Mean   : 46.66  
##  3rd Qu.: 576.0   TA  :1311   TA  :1326   3rd Qu.: 68.00  
##  Max.   :1418.0   NA's:  81   NA's:  81   Max.   :547.00  
##                                                           
##     PoolArea         Fence          MoSold           YrSold    
##  Min.   :  0.000   GdPrv:  59   Min.   : 1.000   Min.   :2006  
##  1st Qu.:  0.000   GdWo :  54   1st Qu.: 5.000   1st Qu.:2007  
##  Median :  0.000   MnPrv: 157   Median : 6.000   Median :2008  
##  Mean   :  2.759   MnWw :  11   Mean   : 6.322   Mean   :2008  
##  3rd Qu.:  0.000   NA's :1179   3rd Qu.: 8.000   3rd Qu.:2009  
##  Max.   :738.000                Max.   :12.000   Max.   :2010  
##                                                                
##     SaleType    SaleCondition    SalePrice     
##  WD     :1267   Abnorml: 101   Min.   : 34900  
##  New    : 122   AdjLand:   4   1st Qu.:129975  
##  COD    :  43   Alloca :  12   Median :163000  
##  ConLD  :   9   Family :  20   Mean   :180921  
##  ConLI  :   5   Normal :1198   3rd Qu.:214000  
##  ConLw  :   5   Partial: 125   Max.   :755000  
##  (Other):   9

Analyse descriptive et exploratoire de la variable à prédire “SalePrice”"

???SalePrice??? est notre variable cible et aussi la variable dépendante pour la prédiction. Selon les hypothèses de régression linéaire, les données devraient être normalement distribuées (suivent la loi normale). En vérifiant la distribution de" SalePrice???, nous pouvons décider si nous avons besoin d’une transformation non-linéaire, comme avec la fonction logarithme, pour faire une meilleure prédiction. ##### Statistique déscrptive et distribution de la variable cible:“SalePrice???

summary(select_train$SalePrice)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   34900  129975  163000  180921  214000  755000
# histogramme de la distribution de la varible SalePrice
options(scipen=10000)
ggplot(select_train, aes(x = SalePrice, fill = ..count..)) +
  geom_histogram(binwidth = 5000) +
  ggtitle("Histograme de SalePrice") +
  ylab("Nombre des maisons") +
  xlab("prix de la maison") + 
  theme(plot.title = element_text(hjust = 0.5))

D’après l’histogramme ci-dessus, la distribution de notre variable cible“SalePrice??? est biaisée vers la droite. Ainsi, un terme de journal de”SalePrice??? devrait être généré pour la régression linéaire. Ici, nous l’appelons“lSalePrice???.

#le Log de SalePrice
select_train$lSalePrice <- log(select_train$SalePrice)
# Distribtion du log de SalePrice

ggplot(select_train, aes(x = lSalePrice, fill = ..count..)) +
  geom_histogram(binwidth = 0.05) +
  ggtitle("Histograme du log de SalePrice") +
  ylab("Nombre des maisons") +
  xlab("prix de la maison") + 
  theme(plot.title = element_text(hjust = 0.5))

Après la ransformation,“lSalePrice??? est normalement distribué. Nous utiliserons ce terme de”SalePrice??? plus tard dans les modèles.

Exploration de la distribution de“SalePrice??? par”MSZoning???

Quand il s’agit du prix du logement, la valeur de la maison est généralement liée à deux types d’éléments: interne et externe. Les éléments internes sont les principales caractéristiques de la maison, comme la surface totale, le nombre de chambres. En ce qui concerne les éléments externes, l’environnement est l’un des facteurs clés.

“MSZoning”: Identifie la classification générale de zone de vente.

  • A : Agriculture
  • C : Commercial
  • FV: Village flottant Résidentiel
  • I: Industrielle
  • Rh: Densité hausse résidentielle
  • RL : Densité résidentielle
  • RP : Parc résidentiel à faible densité
  • RM : Densité moyenne résidentielle

Par conséquent, dans cette section, nous explorerons la relation entre “MSZoning”" et notre variable cible “SalePrice”.

Tout d’abord, jetons un coup d’oil à “MSZoning” car c’est une variable muette, il nous permettra de connaître le nombre total de maisons dans chaque catégorie.

# Compte des maison par MSZoning
options(repr.plot.width=5, repr.plot.height=4)
ggplot(select_train, aes(x = MSZoning, fill = MSZoning )) + 
geom_bar()+ 
scale_fill_hue(c = 80)+
ggtitle(" Distribution de MSZoning")+
theme(plot.title = element_text(hjust = 0.5),legend.position="right", legend.background = element_rect(fill="grey90",
                                                                                                           size=0.5, linetype="solid", 
                                                                                                           colour ="black"))+
geom_text(stat='count',aes(label=..count..),vjust=-0.25)

# statisques descrptive de MSZoning
table(select_train$MSZoning)
## 
## C (all)      FV      RH      RL      RM 
##      10      65      16    1151     218

D’après le graphique et le tableau ci-dessus, il est évident que la plupart des maisons de ces données sont construites dans la zone de faible densité résidentielle (1151 maisons), et les densités de leurs lois est une densité résidentielle moyenne (218 maisons). Peu de maisons sont construites dans les zones commerciales, flottantes et résidentielles à haute densité.

Étant donné qu’une grande quantité de maisons appartiennent aux catégories de la densité résidentielle et de la densité résidentielle moyenne, ces deux secteurs devraient faire l’objet d’une plus grande attention pour l’analyse du prix du logement.

En plus, ajoutons notre variable cible dans l’analyse. À quoi ressemble-il le prix du logement dans chaque catégorie? Ici, nous utilisons des boite à moustache pour montrer la distribution des prix dans chaque catégorie de la variable“MSZoning???.

# changer la dimension du graphe 9 x 6
options(repr.plot.width=9, repr.plot.height=6)
#Boite à moustache de SalePrice par MSZoning
#ajout de la valeur moyenne de SalePrice comme point rouge
ggplot(select_train, aes(x=MSZoning, y=SalePrice, fill=MSZoning)) + 
  geom_boxplot(alpha=0.3) +
  stat_summary(fun.y=mean, geom="point", shape=20, size=4, color="red", fill="red")+
  theme(legend.position="none")+
  ggtitle("Boite à moustache de SalePrice par MSZoning")+
  theme(plot.title = element_text(hjust = 0.5))

Le graphique ci-dessus montre la distribution de “SalePrice” par “MSZoning”. Les ventes dans la zone “Floating Village Residential” ont le prix de vente moyen le plus élevé, suivies de “Residential Density”“, alors que les ventes”commercial“” ont le prix de vente moyen le plus bas.

Il est assez étrange que la zone commerciale ait le prix de vente moyen le plus bas tandis que la zone du village a le plus haut. Une explication possible pourrait être “SalePrice”" est également liée à la taille des maisons. Pour confirmer, explorons la taille moyenne dans ces domaines.

La variable indique la taille est “GrLivArea” ; laSurface habitable au-dessus du sol.

# Visualisation de la moyenne de taille de masion par MSZoning
library(plyr)

ddply(train, .(MSZoning), summarize,  size=mean(GrLivArea))
##   MSZoning     size
## 1  C (all) 1191.400
## 2       FV 1574.538
## 3       RH 1510.125
## 4       RL 1551.646
## 5       RM 1322.073

Il est évident que la taille moyenne des maisons dans la zone commerciale est beaucoup plus petite que la zone du village, ce qui a confirmé notre hypothèse ci-dessus.

Exploration de la distribution de “SalePrice” par “BldfTyp”

Ensuite, nous allons décrire “SalePrice” par différentes catégories de “BldType” ;“BldgType”: Type de logement . Pour avoir une brève idée de “BldgType”, nous utilisons une table ici pour compter les maisons dans chaque catégorie et également afficher les prix maximum et minimum.

ddply(train, .(BldgType), summarize,Total = length(BldgType),Max_price=max(SalePrice),Min_price=min(SalePrice))
##   BldgType Total Max_price Min_price
## 1     1Fam  1220    755000     34900
## 2   2fmCon    31    228950     55000
## 3   Duplex    52    206300     82000
## 4    Twnhs    43    230000     75000
## 5   TwnhsE   114    392500     75500

Précédemment, nous utilisons des boites à moustaches pour décrire “MSZoning”“, tandis que pour”BldgType" nous utiliserons l’histogramme puisque nous nous intéressons plus à la distribution qu’aux nombres récapitulatifs.

Nos réfléxions sur le graphique ci-dessus:

  • Pour les maisons avec “Single-family Detached”, la plupart de leurs prix sont dans la gamme de 50000 à 300000
  • Le prix le plus élevé et le plus bas de la maison viennent des maisons de type “Single-family Detached”.

Exploration de la distribution de “SalePrice” par “OverallQual” :

La dernière variable à explorer est “OverallQual”:

“OverallQual” est le montant de destruction de la maison. “OverallQual” est une note dans une échelle de 1 à 10.

ggplot(select_train, aes(x = SalePrice,fill = as.factor(OverallQual))) +
  geom_histogram(position = "stack", binwidth = 10000) +
  ggtitle("Histograme de SalePrice par OverallQual") +
  ylab("Nombre") +
  xlab("Prix de la maison") + 
  scale_fill_discrete(name="OverallQual")+
  theme(plot.title = element_text(hjust = 0.5), legend.position=c(0.9,0.7), legend.background = element_rect(fill="grey90",
                                                                                                           size=0.5, linetype="solid", 
                                                                                                           colour ="black"))

Quel genre de maison sera vendu à un prix plus élevé ?

Corrélation de variables

Voici la liste que nous choisissons pour une exploration de corrélation :

  • ‘SalePrice’
  • ‘OverallQual’
  • ‘OverallCond’
  • ‘YearBuilt’
  • ‘ExterCond2’
  • ‘TotalBsmtSF’
  • ‘HeatingQC2’
  • ‘CentralAir2’
  • ‘GrLivArea’
  • ‘BedroomAbvGr’
  • ‘KitchenAbvGr’
  • ‘TotRmsAbvGrd’
  • ‘Fireplaces’
  • ‘GarageArea’
  • ‘OpenPorchSF’
  • ‘PoolArea’
  • ‘YrSold’

Afin d’avoir une vision claire de la relation entre les variables clés et“SalePrice???, nous allons utiliser un mélange entre n matrice de corrélation et une carte de chaleur pour tracer la coorélation entre les varibales dont est cella est spérieure à 0.2 ou inférieure a -0.2.

# convertir les fateurs à des nombres
select_train$ExterCond2 <- as.numeric(factor(select_train$ExterCond, 
                                  levels = c("Ex", "Fa","Gd", "TA","Po"),
                                  labels = c(5,2,4,3,1) ,ordered = TRUE))
select_train$HeatingQC2 <- as.numeric(factor(select_train$HeatingQC, 
                                  levels = c("Ex", "Fa","Gd", "TA","Po"),
                                  labels = c(5,2,4,3,1) ,ordered = TRUE))
select_train$CentralAir2 <- as.numeric(factor(select_train$CentralAir, 
                                  levels = c("N", "Y"),
                                  labels = c(0,1) ,ordered = TRUE))
cor_numVar <- cor(heat, use="pairwise.complete.obs") 

cor_sorted <- as.matrix(sort(cor_numVar[,'SalePrice'], decreasing = TRUE))
CorHigh <- names(which(apply(cor_sorted, 1, function(x) abs(x)>0.2)))
cor_numVar <- cor_numVar[CorHigh, CorHigh]

corrplot.mixed(cor_numVar, tl.col="black", tl.pos = "lt")

Dans ce graphe, la couleur bleu indique une corrélation positive parfaite, et la couleur rouge indique une corrélation négative parfaite.

Corrélation entre “SalePrice” et certaines variables numériques

Dans cette section, on va analyser la corrélation entre “SalePrice” et les variables numériques :“GrLivArea”“,”TotalBsmtSF“,”TotRmsAbvGrd" et “GarageArea”.

#  Nuage de point de GrLiveArea
options(repr.plot.width=9, repr.plot.height=6)
p1 <- ggplot(select_train, aes(x=GrLivArea, y=SalePrice)) + 
  geom_point(shape=1) +  
  geom_smooth(method=lm , color="red", se=FALSE)+
  ggtitle("Nuage de points de SalePrice et GrLivArea") +
  theme(plot.title = element_text(hjust = 0.4))

# Nuage de points de TotalBsmtSF
p2 <- ggplot(select_train, aes(x=TotalBsmtSF, y=SalePrice)) + 
  geom_point(shape=1) +  
  geom_smooth(method=lm , color="red", se=FALSE)+
  ggtitle("Nuage de points de SalePrice et TotalBsmtSF") +
  theme(plot.title = element_text(hjust = 0.4))

#Nuage de points de TotRmsAbvGrd
p3 <- ggplot(select_train, aes(x=TotRmsAbvGrd, y=SalePrice)) + 
  geom_point(shape=1) +  
  geom_smooth(method=lm , color="red", se=FALSE)+
  ggtitle("Nuage de points de SalePrice et  TotRmsAbvGrd") +
  theme(plot.title = element_text(hjust = 0.4))

#Nuage de points de GarageArea
p4 <- ggplot(select_train, aes(x=GarageArea, y=SalePrice)) + 
  geom_point(shape=1) +  
  geom_smooth(method=lm , color="red", se=FALSE)+
  ggtitle("Nuage de points de SalePrice et GarageArea") +
  theme(plot.title = element_text(hjust = 0.4))
library(gridExtra)
grid.arrange(p1, p2,p3,p4)

Quelques réflexions sur ces graphes:

  • “GrLivArea” ,“TotalBsmtSF”,“TotRmsAbvGrd” et“GarageArea” ont une corrélation positive avec et“SalePrice???. Ce qui signifie qu’une augmentation de ces variables augmente le prix des maisons.

  • “TotalBsmtSF” a une distribution plus concentrée que les autres.

Modélisation et Validation :

Après l’analyse descriptive, nous passons à la section Analyse prédictive. Le modèle qu’on utilisera ici est le modèle PLS.

Dans ce modèle, nous sélectionnons 16 variables pour s’adapter à ce modèle :

SalePrice, OverallQual, OverallCond, YearBuilt, ExterQual2, ExterCond2, TotalBsmtSF, HeatingQC2, CentralAir2, GrLivArea, BedroomAbvGr, KitchenAbvGr, TotRmsAbvGrd, Fireplaces, GarageArea, OpenPorchSF, PoolArea,YrSold.

  • Etape 1: choisir les variables et transformer “SalePrice” avec la fonction logarithme.
  • Etape 2: diviser les ensembles de données en cinq parties pour utiliser une stratégie de validation croisée 5-Fold
  • Etape 3: Visualiser le graphe des valuer prédite par le modèle contre les vrais valeurs pendant chaque itération de la validation croisée

Choix des composantes principales

library(pls)
## Warning: package 'pls' was built under R version 3.4.4
## 
## Attaching package: 'pls'
## The following object is masked from 'package:caret':
## 
##     R2
## The following object is masked from 'package:corrplot':
## 
##     corrplot
## The following object is masked from 'package:stats':
## 
##     loadings
model_lin <- select_train[, model_var]
model_lin$lSalePrice <- log(model_lin$SalePrice)
model1 <- plsr(lSalePrice~.-SalePrice, data = model_lin, ncomp = 15, validation = "LOO")
summary(model1)
## Data:    X dimension: 1460 16 
##  Y dimension: 1460 1
## Fit method: kernelpls
## Number of components considered: 15
## 
## VALIDATION: RMSEP
## Cross-validated using 1460 leave-one-out segments.
##        (Intercept)  1 comps  2 comps  3 comps  4 comps  5 comps  6 comps
## CV          0.3996   0.2456   0.2352   0.2312   0.2143    0.208   0.1996
## adjCV       0.3996   0.2456   0.2352   0.2312   0.2143    0.208   0.1996
##        7 comps  8 comps  9 comps  10 comps  11 comps  12 comps  13 comps
## CV      0.1707   0.1664   0.1652    0.1649     0.165    0.1648    0.1648
## adjCV   0.1707   0.1664   0.1652    0.1649     0.165    0.1648    0.1648
##        14 comps  15 comps
## CV       0.1647    0.1647
## adjCV    0.1647    0.1647
## 
## TRAINING: % variance explained
##             1 comps  2 comps  3 comps  4 comps  5 comps  6 comps  7 comps
## X             69.60    80.14    98.81    99.16    99.70   100.00   100.00
## lSalePrice    63.21    67.03    67.84    73.77    75.39    75.61    83.59
##             8 comps  9 comps  10 comps  11 comps  12 comps  13 comps
## X            100.00   100.00    100.00    100.00    100.00    100.00
## lSalePrice    84.46    84.67     84.73     84.77     84.83     84.85
##             14 comps  15 comps
## X             100.00    100.00
## lSalePrice     84.86     84.86

Le tableau indique que 3 composantes expliquent 88.81% de la variance de X qui est la matrice de nos varibles explicatives séléctionnées et 67.84% de la variance lSalePrice qui notre variable cible. On pourrait considérer que ces 3 premières composantes nous suffisent pour la suite de l’analyse. Une autre façon de mieux décider du nombre de composante à retenir est le graphe RSMEP.

Le RMSEP étant au plus bas avec 7 composantes et ceux pour les 16 variables nous décidons donc de retenir 5 composantes. Par conséquent, les 5 premières composantes nous permettent donc d’expliquer 100% de la variance de X et 83,59% de la variance de lSalePrice.

Définition des principales composantes

plot(model1, plottype = "loadings",labels="name")

plot(model1, plottype = "correlation", labels="name")

Scores

Le graphe suivant montre les nuages de points de notre population par rapport aux compansantes principale. Ceci peut aider à observer notre jeu donées au cas ou il y un données abbérante.

 plot(model1, plottype = "scores", comps = 1:5)

### Prédiction le graphe des valeurs prédites par le modèle de 5 composantes principales contre les vrais valeurs pendant chaque itération de la validation croisée est le sivant :

plot(model1, ncomp = 5, asp = 1, line = TRUE)

Coefficients de la régression

plot(model1, plottype = "coef", ncomp=1:5, legendpos = "bottomleft",labels="name")

En théorie, le PLS devrait avoir un avantage sur la PCR. On pourrait imaginer une situation où une composante mineure dans X est fortement corrélée avec Y, ne pas sélectionner assez de composantes conduirait alors à de très mauvaises prédictions. En PLS, une telle composante serait automatiquement présente dans le premier LV. En pratique, cependant, il n’y a pratiquement aucune différence entre l’utilisation du PLS et celle de la PCR, Dans la plupart des cas, les méthodes permettent d’obtenir des précisions de prédiction similaires, bien que le PLS nécessite généralement moins de variables latentes que la PCR. En sens inverse: avec le même nombre de variables latentes, PLS couvrira une plus grande partie de la variation de Y et la PCR couvrira plus de X. À leur tour, les deux se comportent très bien comme une régression de crête (Frank et Friedman 1993).