Search code examples
rstructural-equation-model

R: semPLS redundancy() function


I don't have a clue about what the redundancy() function in the semPLS package does and could not find an explanation on the help pages or other semPLS papers.

Take the ecsi model for example: enter image description here

library(semPLS)
data(ECSImobi)
ecsi <- sempls(model=ECSImobi, data=mobi, wscheme="pathWeighting")

redundancy(ecsi)

Will give me:

             redundancy
Image                 .
Expectation        0.12
Quality            0.18
Value              0.29
Satisfaction       0.47
Complaints            .
Loyalty            0.24

    Average redundancy: 0.26 

Apparently as ckluss pointed out, the redundancy method is calculated as

as.matrix(communality(ecsi)[, 1] * rSquared(ecsi)[, 1])

communality is the AVE (Average Variance Extracted) and rSquared, the coefficient of determination, means how well the data fits the model. The question remains: how to interpret these indices.


Solution

  • I found the answer in

    Sanchez, G. (2013) PLS Path Modeling with R

    Trowchez Editions. Berkeley, 2013.

    http://www.gastonsanchez.com/PLS_Path_Modeling_with_R.pdf

    Since it is licensed under Creative Commons Attribution-NonCommercial-ShareAlike, I copied the text and added a reproducible code example.

    Redundancy measures the percent of the variance of indicators in an endogenous block that is predicted from the independent latent variables associated to the endogenous LV. Another definition of redundancy is the amount of variance in an endogenous construct explained by its independent latent variables. In other words, it reflects the ability of a set of independent latent variables to explain variation in the dependent latent variable.

    High redundancy means high ability to predict. In particular, the researcher may be inter- ested in how well the independent latent variables predict values of the indicators’ endogenous construct. Analogous to the communality index, one can calculate the mean redundancy, that is, the average of the redundancy indices of the endogenous blocks.

    # inner model summary
    satpls$inner_summary
    
               Type        R2 Block_Communality Mean_Redundancy       AVE
    IMAG  Exogenous 0.0000000         0.5822691       0.0000000 0.5822691
    EXPE Endogenous 0.3351937         0.6164199       0.2066200 0.6164199
    QUAL Endogenous 0.7196882         0.6585717       0.4739663 0.6585717
    VAL  Endogenous 0.5900844         0.6644156       0.3920612 0.6644156
    SAT  Endogenous 0.7073209         0.7588907       0.5367793 0.7588907
    LOY  Endogenous 0.5099226         0.6390517       0.3258669 0.6390517
    

    For each latent variable we have some descriptive information: type (exogenous or en- dogenous), measurement (reflective or formative), and number of indicators. The column R-square is only available for endogenous variables. The averga communality Av.Commu indicates how much of the block variability is reproducible by the latent variable. Next to the average communality we have the average redundancy Av.Redun which like the R2 is only available for endogenous constructs. Av.Redun represents the percentage of the variance in the endogenous block that is predicted from the indepedent LVs associated to the endogenous LV. High redundancy means high ability to predict. Let’s say that we are interested in checking how well the indepedent LVs predict values of endogenous indicators. In our example the average redundancy for LOY (Loyalty) represents that SAT (Satisfaction) and IMAG (Image) predict 33% of the variability of Loyalty indicators.

    The following Code shows the reproducible example:

    library(plspm)
    # load dataset satisfaction
    data(satisfaction)
    
    # path matrix
    IMAG = c(0,0,0,0,0,0)
    EXPE = c(1,0,0,0,0,0)
    QUAL = c(0,1,0,0,0,0)
    VAL = c(0,1,1,0,0,0)
    SAT = c(1,1,1,1,0,0)
    LOY = c(1,0,0,0,1,0)
    sat_path = rbind(IMAG, EXPE, QUAL, VAL, SAT, LOY)
    
    # plot diagram of path matrix
    innerplot(sat_path)
    
    # blocks of outer model
    sat_blocks = list(1:5, 6:10, 11:15, 16:19, 20:23, 24:27)
    
    # vector of modes (reflective indicators)
    sat_mod = rep("A", 6)
    
    # apply plspm
    satpls = plspm(satisfaction, sat_path, sat_blocks, modes = sat_mod,
                   scaled = FALSE)
    
    # show model
    innerplot(sat_path)
    
    # show inner model summary
    satpls$inner_summary