Skip to contents
library(modsem)
#> This is modsem (1.0.12). Please report any bugs!

Reliablity-Corrected Single Items

If wanted, indicators for latent variables can be replaced with reliablity corrected single items, using Chronbach’s α\alpha. This can either be done using the relcorr_single_item function, returning the altered model syntax and data, or via the rcs argument in modsem. Here we can see an example using the relcorr_single_item function:

tpb_uk <- "
# Outer Model (Based on Hagger et al., 2007)
 ATT =~ att3 + att2 + att1 + att4
 SN =~ sn4 + sn2 + sn3 + sn1
 PBC =~ pbc2 + pbc1 + pbc3 + pbc4
 INT =~ int2 + int1 + int3 + int4
 BEH =~ beh3 + beh2 + beh1 + beh4

# Inner Model (Based on Steinmetz et al., 2011)
 INT ~ ATT + SN + PBC
 BEH ~ INT + PBC
 BEH ~ INT:PBC
"

corrected <- relcorr_single_item(syntax = tpb_uk, data = TPB_UK)
corrected
#> Average Variance Extracted:
#>   ATT:    0.773
#>   SN:     0.759
#>   PBC:    0.765
#>   INT:    0.790
#>   BEH:    0.769
#> 
#> Chronbach's Alpha:
#>   ATT:    0.941
#>   SN:     0.917
#>   PBC:    0.931
#>   INT:    0.984
#>   BEH:    0.942
#> 
#> Generated Syntax:
#>   INT ~ ATT
#>   INT ~ SN
#>   INT ~ PBC
#>   BEH ~ INT
#>   BEH ~ PBC
#>   BEH ~ INT:PBC
#>   ATT =~ 1*composite_ATT_
#>   SN =~ 1*composite_SN_
#>   PBC =~ 1*composite_PBC_
#>   INT =~ 1*composite_INT_
#>   BEH =~ 1*composite_BEH_
#>   composite_ATT_ ~~ 0.261238305705924*composite_ATT_
#>   composite_SN_ ~~ 0.168932578899161*composite_SN_
#>   composite_PBC_ ~~ 0.339024670490075*composite_PBC_
#>   composite_INT_ ~~ 0.0800211390420975*composite_INT_
#>   composite_BEH_ ~~ 0.36503257276914*composite_BEH_
#>   
#> Generated Items:
#>   'data.frame':  1169 obs. of  5 variables:
#>     $ composite_ATT_: num  6.03 5.49 2.19 6.03 4.94 ...
#>     $ composite_SN_ : num  5.57 4.07 3 5.57 4.5 ...
#>     $ composite_PBC_: num  4.44 5 1.94 6.39 6.11 ...
#>     $ composite_INT_: num  4.06 4.56 1.01 5.32 5.32 ...
#>     $ composite_BEH_: num  1.11 4.17 1.39 3.06 5.84 ...

Here we can see that relcorr_single_item returns a new model syntax, and a new data.frame containing the generated items. Additionally, it also returns the Chronbach’s α\alpha and average variance extraced (AVE) for the different constructs in the model. The syntax and data can be extracted using the $ operator, and used to estimate the model.

syntax <- corrected$syntax
data   <- corrected$data

est_dca <- modsem(syntax, data = data, method = "dblcent")
est_lms <- modsem(syntax, data = data, method="lms", nodes=32)
summary(est_lms)
#> 
#> modsem (version 1.0.12):
#> 
#>   Estimator                                         LMS
#>   Optimization method                        EMA-NLMINB
#>   Number of observations                           1169
#>   Number of iterations                              103
#>   Loglikelihood                                -9397.25
#>   Akaike (AIC)                                  18832.5
#>   Bayesian (BIC)                               18928.72
#>  
#> Numerical Integration:
#>   Points of integration (per dim)                    32
#>   Dimensions                                          1
#>   Total points of integration                        32
#>  
#> Fit Measures for Baseline Model (H0):
#>   Loglikelihood                                -9543.07
#>   Akaike (AIC)                                 19122.14
#>   Bayesian (BIC)                               19213.29
#>   Chi-square                                      34.39
#>   Degrees of Freedom (Chi-square)                     2
#>   P-value (Chi-square)                            0.000
#>   RMSEA                                           0.118
#>  
#> Comparative Fit to H0 (LRT test):
#>   Loglikelihood change                           145.82
#>   Difference test (D)                            291.63
#>   Degrees of freedom (D)                              1
#>   P-value (D)                                     0.000
#>  
#> R-Squared Interaction Model (H1):
#>   INT                                             0.857
#>   BEH                                             0.937
#> R-Squared Baseline Model (H0):
#>   INT                                             0.858
#>   BEH                                             0.873
#> R-Squared Change (H1 - H0):
#>   INT                                            -0.001
#>   BEH                                             0.064
#> 
#> Parameter Estimates:
#>   Coefficients                           unstandardized
#>   Information                                  observed
#>   Standard errors                              standard
#>  
#> Latent Variables:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT =~        
#>     cmpst_ATT_      1.000                             
#>   SN =~         
#>     compst_SN_      1.000                             
#>   PBC =~        
#>     cmpst_PBC_      1.000                             
#>   INT =~        
#>     cmpst_INT_      1.000                             
#>   BEH =~        
#>     cmpst_BEH_      1.000                             
#> 
#> Regressions:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   INT ~         
#>     ATT            -0.022      0.042   -0.528    0.597
#>     SN              0.015      0.037    0.390    0.697
#>     PBC             0.991      0.046   21.712    0.000
#>   BEH ~         
#>     PBC             0.726      0.045   16.005    0.000
#>     INT             0.307      0.042    7.262    0.000
#>     INT:PBC         0.148      0.008   18.024    0.000
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .cmpst_PBC_      4.323      0.064   67.722    0.000
#>    .cmpst_ATT_      4.246      0.063   66.982    0.000
#>    .compst_SN_      3.797      0.041   93.173    0.000
#>    .cmpst_INT_      3.835      0.066   58.497    0.000
#>    .cmpst_BEH_      2.891      0.077   37.603    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT ~~        
#>     SN              1.907      0.104   18.262    0.000
#>   PBC ~~        
#>     ATT             3.964      0.180   21.998    0.000
#>     SN              2.028      0.107   19.004    0.000
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .cmpst_PBC_      0.339                             
#>    .cmpst_ATT_      0.261                             
#>    .compst_SN_      0.169                             
#>    .cmpst_INT_      0.080                             
#>    .cmpst_BEH_      0.365                             
#>     ATT             4.438      0.194   22.837    0.000
#>     SN              1.773      0.080   22.071    0.000
#>     PBC             4.427      0.197   22.473    0.000
#>    .INT             0.709      0.046   15.353    0.000
#>    .BEH             0.376      0.039    9.694    0.000

The easiest approach however, is to use the rcs argument in the modsem function to call relcorr_single_item before estimating the model.

est_dca <- modsem(tpb_uk, data = TPB_UK, method = "dblcent", rcs = TRUE)
est_lms <- modsem(tpb_uk, data = TPB_UK, method = "lms", rcs = TRUE)
#> Warning: It is recommended that you have at least 32 nodes for interaction
#> effects between exogenous and endogenous variables in the lms approach 'nodes =
#> 24'

Choosing Variables

If you don’t want to use reliablity-corrected single items for all of the latent variables in the model, you can use the choose argument in relcorr_single_item (orrcs.choose in modsem) to select which set of indicators to replace.

relcorr_single_item(syntax = tpb_uk, data = TPB_UK,
                    choose = c("ATT", "SN", "PBC", "INT"))
#> Average Variance Extracted:
#>   ATT:    0.773
#>   SN:     0.759
#>   PBC:    0.764
#>   INT:    0.790
#> 
#> Chronbach's Alpha:
#>   ATT:    0.941
#>   SN:     0.917
#>   PBC:    0.931
#>   INT:    0.984
#> 
#> Generated Syntax:
#>   INT ~ ATT
#>   INT ~ SN
#>   INT ~ PBC
#>   BEH ~ INT
#>   BEH ~ PBC
#>   BEH ~ INT:PBC
#>   BEH =~ beh3
#>   BEH =~ beh2
#>   BEH =~ beh1
#>   BEH =~ beh4
#>   ATT =~ 1*composite_ATT_
#>   SN =~ 1*composite_SN_
#>   PBC =~ 1*composite_PBC_
#>   INT =~ 1*composite_INT_
#>   composite_ATT_ ~~ 0.260738732478629*composite_ATT_
#>   composite_SN_ ~~ 0.168948358411046*composite_SN_
#>   composite_PBC_ ~~ 0.342113416284625*composite_PBC_
#>   composite_INT_ ~~ 0.0800796081525879*composite_INT_
#>   
#> Generated Items:
#>   'data.frame':  1169 obs. of  4 variables:
#>     $ composite_ATT_: num  6.03 5.48 2.19 6.03 4.93 ...
#>     $ composite_SN_ : num  5.57 4.07 3 5.57 4.5 ...
#>     $ composite_PBC_: num  4.45 5.01 1.95 6.4 6.13 ...
#>     $ composite_INT_: num  4.05 4.56 1.01 5.32 5.32 ...

est_dca <- modsem(tpb_uk, data = TPB_UK, method = "dblcent", rcs = TRUE,
                  rcs.choose = c("ATT", "SN", "PBC", "INT", "INT:PBC"))
summary(est_dca)
#> Estimating baseline model (H0)
#> modsem (version 1.0.12, approach = dblcent):
#> 
#> Interaction Model Fit Measures (H1):
#>   Loglikelihood                              -18320.48 
#>   Akaike (AIC)                                36690.95 
#>   Bayesian (BIC)                              36817.55 
#>   Chi-square                                   1326.23 
#>   Degrees of Freedom                                20 
#>   P-value (Chi-square)                           0.000 
#>   RMSEA                                          0.236 
#>   CFI                                            0.891 
#>   SRMR                                           0.051 
#> 
#> Fit Measures for Baseline Model (H0):
#>   Loglikelihood                              -18443.43 
#>   Akaike (AIC)                                36934.87 
#>   Bayesian (BIC)                              37056.40 
#>   Chi-square                                   1572.15 
#>   Degrees of Freedom                                21 
#>   P-value (Chi-square)                           0.000 
#>   RMSEA                                          0.251 
#>   CFI                                            0.871 
#>   SRMR                                           0.075 
#> 
#> Comparative Fit to H0 (LRT test):
#>   Chi-square diff                              245.919 
#>   Degrees of freedom diff                            1 
#>   P-value (LRT)                                  0.000 
#> 
#> R-Squared Interaction Model (H1):
#>   INT                                            0.859 
#>   BEH                                            0.913 
#> R-Squared Baseline Model (H0):
#>   INT                                            0.860 
#>   BEH                                            0.874 
#> R-Squared Change (H1 - H0):
#>   INT                                           -0.001 
#>   BEH                                            0.040 
#> 
#> lavaan 0.6-19 ended normally after 62 iterations
#> 
#>   Estimator                                         ML
#>   Optimization method                           NLMINB
#>   Number of model parameters                        25
#> 
#>   Number of observations                          1169
#> 
#> Model Test User Model:
#>                                                       
#>   Test statistic                              1326.233
#>   Degrees of freedom                                20
#>   P-value (Chi-square)                           0.000
#> 
#> Parameter Estimates:
#> 
#>   Standard errors                             Standard
#>   Information                                 Expected
#>   Information saturated (h1) model          Structured
#> 
#> Latent Variables:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   BEH =~                                              
#>     beh3              1.000                           
#>     beh2              0.986    0.013   74.480    0.000
#>     beh1              0.822    0.019   43.589    0.000
#>     beh4              0.811    0.019   42.339    0.000
#>   ATT =~                                              
#>     composite_ATT_    1.000                           
#>   SN =~                                               
#>     composite_SN_     1.000                           
#>   PBC =~                                              
#>     composite_PBC_    1.000                           
#>   INT =~                                              
#>     composite_INT_    1.000                           
#>   INTPBC =~                                           
#>     cmps_INT__PBC_    1.000                           
#> 
#> Regressions:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   INT ~                                               
#>     ATT              -0.006    0.041   -0.150    0.881
#>     SN               -0.015    0.038   -0.393    0.694
#>     PBC               0.988    0.046   21.721    0.000
#>   BEH ~                                               
#>     INT               0.635    0.038   16.802    0.000
#>     PBC               0.351    0.040    8.714    0.000
#>     INTPBC            0.128    0.008   16.566    0.000
#> 
#> Covariances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>   ATT ~~                                              
#>     SN                1.907    0.104   18.255    0.000
#>     PBC               3.958    0.181   21.898    0.000
#>     INTPBC            0.322    0.246    1.306    0.191
#>   SN ~~                                               
#>     PBC               2.051    0.108   19.069    0.000
#>     INTPBC           -0.171    0.158   -1.077    0.281
#>   PBC ~~                                              
#>     INTPBC            0.509    0.247    2.062    0.039
#> 
#> Variances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .composite_ATT_    0.261                           
#>    .composite_SN_     0.169                           
#>    .composite_PBC_    0.342                           
#>    .composite_INT_    0.080                           
#>    .cmps_INT__PBC_    1.967                           
#>    .beh3              0.481    0.031   15.623    0.000
#>    .beh2              0.535    0.032   16.690    0.000
#>    .beh1              1.784    0.079   22.696    0.000
#>    .beh4              1.863    0.082   22.796    0.000
#>    .BEH               0.458    0.033   13.702    0.000
#>     ATT               4.433    0.194   22.833    0.000
#>     SN                1.774    0.080   22.074    0.000
#>     PBC               4.461    0.199   22.456    0.000
#>    .INT               0.697    0.046   15.186    0.000
#>     INTPBC           13.140    0.625   21.028    0.000