PLS = partial least squares // moindre carré partiel

              jargon

construit: var latente (non observable) ex: la famine
modèle de mesure: lien entre var observé et leur var latente ex: avez vous fin ? et combien de fois avez vous mangé ? modèle de structure: relation entre une var latente et d’autre var latente ex: la famine qui viendra predire le bonheur modele formatif vs reflectif CB-SEM: covariance-based structural equation (eqution structurelle basé sur la covariance) CB-PLS

        Conditions d'application

les donneés ne respectent pas les hypothèses sous-jacentes aux equations structurelles: données non quanti quanti, resid pas normalisé, données de petite taille

library(seminr)
data=read.csv("/home/nekui-tiefang/Documents/mes codes R/reg pls/rintro-chapter10sat.csv")
summary(data)
##        q1             q2              q3              c1             c2       
##  Min.   :1.00   Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000  
##  1st Qu.:3.00   1st Qu.:3.000   1st Qu.:3.000   1st Qu.:3.00   1st Qu.:3.000  
##  Median :4.00   Median :3.000   Median :4.000   Median :4.00   Median :4.000  
##  Mean   :3.95   Mean   :3.535   Mean   :3.805   Mean   :4.34   Mean   :4.185  
##  3rd Qu.:5.00   3rd Qu.:4.000   3rd Qu.:4.000   3rd Qu.:5.00   3rd Qu.:5.000  
##  Max.   :7.00   Max.   :7.000   Max.   :7.000   Max.   :7.00   Max.   :7.000  
##        c3              v1              v2             v3             cs1       
##  Min.   :1.000   Min.   :1.000   Min.   :1.00   Min.   :1.000   Min.   :1.000  
##  1st Qu.:4.000   1st Qu.:4.000   1st Qu.:3.00   1st Qu.:4.000   1st Qu.:3.000  
##  Median :4.000   Median :5.000   Median :4.00   Median :5.000   Median :4.000  
##  Mean   :4.395   Mean   :4.565   Mean   :3.87   Mean   :4.595   Mean   :3.715  
##  3rd Qu.:5.000   3rd Qu.:5.000   3rd Qu.:5.00   3rd Qu.:5.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.000   Max.   :7.00   Max.   :7.000   Max.   :7.000  
##       cs2             cs3             r1             r2              r3       
##  Min.   :1.000   Min.   :1.00   Min.   :1.00   Min.   :1.000   Min.   :1.000  
##  1st Qu.:2.000   1st Qu.:3.00   1st Qu.:3.00   1st Qu.:3.000   1st Qu.:3.000  
##  Median :3.000   Median :4.00   Median :4.00   Median :4.000   Median :4.000  
##  Mean   :3.255   Mean   :3.59   Mean   :3.92   Mean   :3.895   Mean   :3.695  
##  3rd Qu.:4.000   3rd Qu.:4.25   3rd Qu.:5.00   3rd Qu.:5.000   3rd Qu.:5.000  
##  Max.   :7.000   Max.   :7.00   Max.   :7.00   Max.   :7.000   Max.   :7.000

description de la bd

C: coût Q: qualite CS: client satisfait R: repeat V:value

qui sont bien evidament les variables latente

TAF: ici on doit prédire la repetion de l’achat d’un consommateur sur la base du coût de la satisfaction de ce client, de la valeur qu’il persoit et la qualité du produit

              PLS-SEM
              

modele de mesure

mm= constructs(
  composite("Quality",multi_items("q", 1:3)),
  composite("Value",multi_items("v", 1:3)),
  composite("Cost",multi_items("c", 1:3)),
  composite("Csat",multi_items("cs", 1:3)),
  composite("Repeat",multi_items("r", 1:3))
                )

modele de structure

ms=relationships(
  paths("Cost",c("Value","Repeat")),
  paths("Quality",c("Value","Csat")),
  paths("Value","Csat"),
  paths("Csat","Repeat")
)

semir terminé

  estimation du modèle
  
  
modelPLS=estimate_pls(data,mm,ms)
## Generating the seminr model
## All 200 observations are valid.
sum=summary(modelPLS)
sum
## 
## Results from  package seminr (2.3.2)
## 
## Path Coefficients:
##          Value Repeat  Csat
## R^2      0.174  0.212 0.210
## AdjR^2   0.165  0.204 0.202
## Cost    -0.270 -0.317     .
## Quality  0.297      . 0.342
## Value        .      . 0.215
## Csat         .  0.289     .
## 
## Reliability:
##         alpha  rhoC   AVE  rhoA
## Cost    0.737 0.851 0.655 0.744
## Quality 0.685 0.826 0.612 0.695
## Value   0.773 0.868 0.686 0.779
## Csat    0.725 0.844 0.644 0.729
## Repeat  0.695 0.827 0.614 0.720
## 
## Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
plot(modelPLS)

nous voyons la representation graphique d’un model pls entre chaque var observé et sa var latent, il doit y avoir au minimun un lien sup 0.708 pourqu’il soit significatif et s’il est en dessuq de 0.4 il vas falloir le supprimer

nous vayons aussi le r square qui est le pourcentage explique par le modelpls

              testons le bootstrap de model notre

calcul de l’échantillon avec remise a partir de l’echantillon gobal

btpls=bootstrap_model(modelPLS, rboot=1000)
## Bootstrapping model using seminr...
## SEMinR Model successfully bootstrapped
sumboot=summary(btpls, alpha=0.05)

representation du modèle complet avec IC et significativité

plot(btpls)

assessment: modele de mesure

sum$loadings**2 #fiabilité de l'indicateur
##      Cost Quality Value  Csat Repeat
## q1  0.000   0.571 0.000 0.000  0.000
## q2  0.000   0.592 0.000 0.000  0.000
## q3  0.000   0.673 0.000 0.000  0.000
## v1  0.000   0.000 0.672 0.000  0.000
## v2  0.000   0.000 0.676 0.000  0.000
## v3  0.000   0.000 0.709 0.000  0.000
## c1  0.620   0.000 0.000 0.000  0.000
## c2  0.709   0.000 0.000 0.000  0.000
## c3  0.636   0.000 0.000 0.000  0.000
## cs1 0.000   0.000 0.000 0.640  0.000
## cs2 0.000   0.000 0.000 0.632  0.000
## cs3 0.000   0.000 0.000 0.660  0.000
## r1  0.000   0.000 0.000 0.000  0.589
## r2  0.000   0.000 0.000 0.000  0.694
## r3  0.000   0.000 0.000 0.000  0.560
sum$reliability #fiabilité interne
##         alpha  rhoC   AVE  rhoA
## Cost    0.737 0.851 0.655 0.744
## Quality 0.685 0.826 0.612 0.695
## Value   0.773 0.868 0.686 0.779
## Csat    0.725 0.844 0.644 0.729
## Repeat  0.695 0.827 0.614 0.720
## 
## Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
sum$validity$fl_criteria #validité discriminante
##           Cost Quality Value  Csat Repeat
## Cost     0.809       .     .     .      .
## Quality -0.077   0.782     .     .      .
## Value   -0.293   0.318 0.828     .      .
## Csat    -0.153   0.410 0.324 0.803      .
## Repeat  -0.361   0.171 0.162 0.337  0.784
## 
## FL Criteria table reports square root of AVE on the diagonal and construct correlations on the lower triangle.

le sum$loadings**2 (nous elevons au carré pour nous epargner des valeurs négative) est utilisé pour savoir en pourcentage si le construit explique la variance de ces valeurs observable et il est significatif si sa valeur est au minimun de 40%( soit 63% dans la realité) lorsqu’il n’atteind pas cette valeur il faudre songer a le supprimer Dans notre exemple, nos pourcentage de significativité est acceptable

pour la commande sum$reliability qui conserne la fiabilité interne comme le resultat l’indique Alpha, rhoC, rhoA doit être sup a 0.7 tandis que AVE (variance moyenne extraite) quant ta lui toute les variable doivent exceder 0.5 sur sa colonne

pour la commande sum\(validity\)fl_critera (validité discriminante) il est question de verifier si chaque construit est differnt d’un autre construit ici la condition de validité est que les valeurs de la première bissectrice doit etre sup a toute les autre valeur de la colonne

MODELE DE MESURE VALIDÉ

    assessment: modele de structure
sum$vif_antecedents # probème de colinearité (pas sup a 5 )
## Value :
##    Cost Quality 
##   1.006   1.006 
## 
## Repeat :
##  Cost  Csat 
## 1.024 1.024 
## 
## Csat :
## Quality   Value 
##   1.112   1.112
sumboot$bootstrapped_paths #qualité des relations (pas de 0 dans IC)
##                    Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## Cost  ->  Value           -0.270         -0.276        0.070  -3.853  -0.408
## Cost  ->  Repeat          -0.317         -0.322        0.057  -5.584  -0.425
## Quality  ->  Value         0.297          0.296        0.072   4.105   0.154
## Quality  ->  Csat          0.342          0.349        0.060   5.672   0.232
## Value  ->  Csat            0.215          0.214        0.074   2.920   0.065
## Csat  ->  Repeat           0.289          0.292        0.060   4.838   0.169
##                    97.5% CI
## Cost  ->  Value      -0.135
## Cost  ->  Repeat     -0.213
## Quality  ->  Value    0.430
## Quality  ->  Csat     0.463
## Value  ->  Csat       0.356
## Csat  ->  Repeat      0.402
sumboot$bootstrapped_total_paths #qualité plus détaillé des relations (pas de 0 dans IC)  
##                     Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## Cost  ->  Value            -0.270         -0.276        0.070  -3.853  -0.408
## Cost  ->  Csat             -0.058         -0.059        0.026  -2.230  -0.116
## Cost  ->  Repeat           -0.334         -0.339        0.057  -5.908  -0.440
## Quality  ->  Value          0.297          0.296        0.072   4.105   0.154
## Quality  ->  Csat           0.406          0.413        0.054   7.551   0.302
## Quality  ->  Repeat         0.117          0.121        0.029   4.095   0.064
## Value  ->  Csat             0.215          0.214        0.074   2.920   0.065
## Value  ->  Repeat           0.062          0.062        0.023   2.702   0.021
## Csat  ->  Repeat            0.289          0.292        0.060   4.838   0.169
##                     97.5% CI
## Cost  ->  Value       -0.135
## Cost  ->  Csat        -0.014
## Cost  ->  Repeat      -0.235
## Quality  ->  Value     0.430
## Quality  ->  Csat      0.510
## Quality  ->  Repeat    0.178
## Value  ->  Csat        0.356
## Value  ->  Repeat      0.111
## Csat  ->  Repeat       0.402
sum$paths # R-carré
##          Value Repeat  Csat
## R^2      0.174  0.212 0.210
## AdjR^2   0.165  0.204 0.202
## Cost    -0.270 -0.317     .
## Quality  0.297      . 0.342
## Value        .      . 0.215
## Csat         .  0.289     .

le problème de colinearité est resolu les qualités des relations sont bonnes (pas de zero dans IC) par contre le R**2 carré est assez faible !!!

            MEDIATIONS 

**inspection des effets indirects sur le bootstrap du model

specific_effect_significance(btpls,from = "Quality",through = "Value", to="Csat")
##  Original Est. Bootstrap Mean   Bootstrap SD        T Stat.        2.5% CI 
##     0.06377068     0.06362046     0.02746821     2.32161776     0.01690380 
##       97.5% CI 
##     0.12070363
specific_effect_significance(btpls, from = "Cost",through = c("Value","Csat"),to="Repeat")
##  Original Est. Bootstrap Mean   Bootstrap SD        T Stat.        2.5% CI 
##   -0.016774775   -0.017166867    0.008171990   -2.052716009   -0.034133932 
##       97.5% CI 
##   -0.004094391

la premiere commande nous montre bien que le coefficient entre quality et csat est significatif (pas de 0 dans IC) ont conclu alors que quality influence csat a travers la mediatrice value pour la seconde scommande nous pouvons aussi dire que le cost influence directement et indirectement (mediations value et csat) repeat avec significacité dans les deux cas

**inspection des effets direct

sumboot$bootstrapped_paths
##                    Original Est. Bootstrap Mean Bootstrap SD T Stat. 2.5% CI
## Cost  ->  Value           -0.270         -0.276        0.070  -3.853  -0.408
## Cost  ->  Repeat          -0.317         -0.322        0.057  -5.584  -0.425
## Quality  ->  Value         0.297          0.296        0.072   4.105   0.154
## Quality  ->  Csat          0.342          0.349        0.060   5.672   0.232
## Value  ->  Csat            0.215          0.214        0.074   2.920   0.065
## Csat  ->  Repeat           0.289          0.292        0.060   4.838   0.169
##                    97.5% CI
## Cost  ->  Value      -0.135
## Cost  ->  Repeat     -0.213
## Quality  ->  Value    0.430
## Quality  ->  Csat     0.463
## Value  ->  Csat       0.356
## Csat  ->  Repeat      0.402

conclusion les deux relation de mediation sont complementaire des relation directe dans notre model du fait du même signe des Original Est et IC

          valeur predicte du modele

verifions si notre modèle est bon au dela de l’echantillon

predicpls=predict_pls(model = modelPLS, technique = predict_DA, noFolds = 10, reps = 10)
summary(predicpls)
## 
## PLS in-sample metrics:
##         v1    v2    v3    r1    r2    r3   cs1   cs2   cs3
## RMSE 1.231 1.060 1.070 1.150 1.201 1.323 1.180 1.128 1.217
## MAE  0.983 0.860 0.845 0.917 0.963 1.086 0.943 0.913 0.972
## 
## PLS out-of-sample metrics:
##         v1    v2    v3    r1    r2    r3   cs1   cs2   cs3
## RMSE 1.253 1.078 1.081 1.163 1.220 1.339 1.209 1.154 1.247
## MAE  1.002 0.874 0.856 0.928 0.981 1.100 0.968 0.935 0.996
## 
## LM in-sample metrics:
##         v1    v2    v3    r1    r2    r3   cs1   cs2   cs3
## RMSE 1.189 1.019 1.025 1.106 1.166 1.283 1.142 1.058 1.114
## MAE  0.954 0.818 0.825 0.903 0.933 1.060 0.937 0.865 0.898
## 
## LM out-of-sample metrics:
##         v1    v2    v3    r1    r2    r3   cs1   cs2   cs3
## RMSE 1.297 1.109 1.105 1.185 1.257 1.383 1.251 1.158 1.209
## MAE  1.046 0.893 0.894 0.967 1.016 1.142 1.034 0.949 0.975

**analyser la distribution des erreurs

par(mfrow=c(1,3))
plot(summary(predicpls),indicator="r1")
plot(summary(predicpls),indicator="r2")
plot(summary(predicpls),indicator="r3")

lorsque les distributions des erreurs sont symétrique par rapport a ZERO on n’utilise le RMSE et dans le cas contraire on n’utilise le MAE. Lorsque les valeurs du PLS out-of-sample metrics sont inferieur aux valeurs de LM out-sample metrics nous dirons alors que le model a une valeur de prediction excellant et moyen lorsque une var observable ne respecte condition enoncé prédament et si aucune la valeur observable ne respecte la condition nous concluons alors que le model n’a aucune valeur de prediction

pour notre cas, notre modele a une tres bonne valeur de prediction

passons aux modeles alternatifs ici on cherche a avoir un R**2 meilleur avec le moin de lien possible

ms2=relationships(
  paths("Quality","Value"),
  paths("Value","Csat"),
  paths("Csat","Repeat"),
  paths("Cost",c("Value","Repeat"))
)

modele2

modelPLS2=estimate_pls(data,mm,ms2)
## Generating the seminr model
## All 200 observations are valid.
modelPLS2=estimate_pls(data, mm, ms2)
## Generating the seminr model
## All 200 observations are valid.
summary(modelPLS2)
## 
## Results from  package seminr (2.3.2)
## 
## Path Coefficients:
##          Value  Csat Repeat
## R^2      0.174 0.105  0.212
## AdjR^2   0.166 0.100  0.204
## Quality  0.298     .      .
## Value        . 0.324      .
## Csat         .     .  0.289
## Cost    -0.268     . -0.317
## 
## Reliability:
##         alpha  rhoC   AVE  rhoA
## Quality 0.685 0.826 0.612 0.690
## Value   0.773 0.868 0.686 0.779
## Csat    0.725 0.844 0.644 0.729
## Cost    0.737 0.851 0.655 0.744
## Repeat  0.695 0.827 0.614 0.720
## 
## Alpha, rhoC, and rhoA should exceed 0.7 while AVE should exceed 0.5
plot(modelPLS2)

comparons les avec leur BIC même interpretation que l’AIC connus depuis il faut inspecter it_criteria a l’exeption prêt qu’il pénalise les modele qui ont plus de relation

sum1=summary(modelPLS)
sum2=summary(modelPLS2)
sum1$it_criteria
##       Value  Repeat    Csat
## AIC -33.120 -42.629 -42.150
## BIC -23.225 -32.734 -32.255
sum2$it_criteria
##       Value    Csat  Repeat
## AIC -33.245 -19.165 -42.719
## BIC -23.350 -12.568 -32.824

BIC1 -32.734 BIC2 -32.824

le modele 2 est plus interessant que le modele 1 (très très marginale) que se soit pour l’AIC ou pou le BIC

une autre methide d’affichage

it_criteria=c(sum1$it_criteria["BIC","Repeat"],
sum2$it_criteria["BIC","Repeat"])
names(it_criteria)=c("modele 1","modele 2")
it_criteria
##  modele 1  modele 2 
## -32.73364 -32.82434

NTB: il est a noter que les suppressions des liens obeit a une certaine logique de vie même si le BIC nous fait comprendre qu’il ya amelioration du model