Skip to contents
library(modsem)
#> This is modsem (1.0.24). 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 =~ att1 + att2 + att3 + att4 + att5
 SN =~ sn1 + sn2 + sn3
 PBC =~ pbc1 + pbc2 + pbc3 + pbc4
 INT =~ int1 + int2 + int3 + int4
 BEH =~ beh1 + beh2 + beh3

# 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.695
#>   SN:     0.796
#>   PBC:    0.504
#>   INT:    0.931
#>   BEH:    0.881
#> 
#> Chronbach's Alpha:
#>   ATT:    0.921
#>   SN:     0.917
#>   PBC:    0.786
#>   INT:    0.982
#>   BEH:    0.955
#> 
#> 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.19391723*composite_ATT_
#>   composite_SN_ ~~ 0.15072929*composite_SN_
#>   composite_PBC_ ~~ 0.06217143*composite_PBC_
#>   composite_INT_ ~~ 0.07815740*composite_INT_
#>   composite_BEH_ ~~ 0.14644270*composite_BEH_
#>   
#> Generated Items:
#>   'data.frame':  1894 obs. of  5 variables:
#>     $ composite_ATT_: num  3.73 3.73 5.68 1.95 1.78 ...
#>     $ composite_SN_ : num  3.114 4.247 5.38 0.849 3.398 ...
#>     $ composite_PBC_: num  1.62 1.62 2.23 1.62 1.62 ...
#>     $ composite_INT_: num  0.978 3.423 3.912 0.978 0.978 ...
#>     $ composite_BEH_: num  0.872 0.872 0.872 0.872 0.872 ...

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 (1.0.24) ended normally after 54 iterations
#> 
#>   Estimator                                        LMS
#>   Optimization method                       EMA-NLMINB
#>   Number of model parameters                        19
#> 
#>   Number of observations                          1894
#> 
#> Loglikelihood and Information Criteria:
#>   Loglikelihood                              -12151.28
#>   Akaike (AIC)                                24340.56
#>   Bayesian (BIC)                              24445.94
#>  
#> Numerical Integration:
#>                                               Standard  Effective
#>   Points of integration (per dim)                   32        175
#>   Dimensions                                         1          1
#>   Total points of integration                       32        175
#> 
#> Fit Measures for Baseline Model (H0):
#>                                               Standard
#>   Chi-square                                     21.06
#>   Degrees of Freedom (Chi-square)                    2
#>   P-value (Chi-square)                           0.000
#>   RMSEA                                          0.071
#>                                                       
#>   Loglikelihood                              -12272.68
#>   Akaike (AIC)                                24581.36
#>   Bayesian (BIC)                              24681.19
#>  
#> Comparative Fit to H0 (LRT test):
#>   Loglikelihood change                          121.40
#>   Difference test (D)                           242.80
#>   Degrees of freedom (D)                             1
#>   P-value (D)                                    0.000
#>  
#> R-Squared Interaction Model (H1):
#>   INT                                            0.853
#>   BEH                                            0.867
#> R-Squared Baseline Model (H0):
#>   INT                                            0.852
#>   BEH                                            0.828
#> R-Squared Change (H1 - H0):
#>   INT                                            0.002
#>   BEH                                            0.039
#> 
#> 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.703      0.041   17.236    0.000
#>     SN             -0.168      0.033   -5.028    0.000
#>     PBC             1.970      0.115   17.120    0.000
#>   BEH ~         
#>     PBC             0.431      0.109    3.961    0.000
#>     INT             0.707      0.028   25.507    0.000
#>     INT:PBC         0.338      0.021   15.731    0.000
#> 
#> Intercepts:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .cmpst_PBC_      1.935      0.014  138.669    0.000
#>    .cmpst_ATT_      3.895      0.037  106.550    0.000
#>    .compst_SN_      3.917      0.032  121.767    0.000
#>    .cmpst_INT_      3.796      0.048   79.361    0.000
#>    .cmpst_BEH_      2.427      0.048   50.922    0.000
#> 
#> Covariances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>   ATT ~~        
#>     SN              1.591      0.063   25.297    0.000
#>   PBC ~~        
#>     ATT             0.714      0.028   25.889    0.000
#>     SN              0.551      0.023   23.660    0.000
#> 
#> Variances:
#>                  Estimate  Std.Error  z.value  P(>|z|)
#>    .cmpst_PBC_      0.062                             
#>    .cmpst_ATT_      0.194                             
#>    .compst_SN_      0.151                             
#>    .cmpst_INT_      0.078                             
#>    .cmpst_BEH_      0.146                             
#>     ATT             2.337      0.082   28.415    0.000
#>     SN              1.810      0.064   28.407    0.000
#>     PBC             0.307      0.012   25.570    0.000
#>    .INT             0.624      0.034   18.392    0.000
#>    .BEH             0.471      0.023   20.877    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)

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.695
#>   SN:     0.796
#>   PBC:    0.504
#>   INT:    0.931
#> 
#> Chronbach's Alpha:
#>   ATT:    0.921
#>   SN:     0.917
#>   PBC:    0.786
#>   INT:    0.982
#> 
#> Generated Syntax:
#>   INT ~ ATT
#>   INT ~ SN
#>   INT ~ PBC
#>   BEH ~ INT
#>   BEH ~ PBC
#>   BEH ~ INT:PBC
#>   BEH =~ beh1
#>   BEH =~ beh2
#>   BEH =~ beh3
#>   ATT =~ 1*composite_ATT_
#>   SN =~ 1*composite_SN_
#>   PBC =~ 1*composite_PBC_
#>   INT =~ 1*composite_INT_
#>   composite_ATT_ ~~ 0.19371228*composite_ATT_
#>   composite_SN_ ~~ 0.15076687*composite_SN_
#>   composite_PBC_ ~~ 0.06212051*composite_PBC_
#>   composite_INT_ ~~ 0.07817114*composite_INT_
#>   
#> Generated Items:
#>   'data.frame':  1894 obs. of  4 variables:
#>     $ composite_ATT_: num  3.73 3.73 5.68 1.95 1.78 ...
#>     $ composite_SN_ : num  3.12 4.25 5.38 0.85 3.4 ...
#>     $ composite_PBC_: num  1.62 1.62 2.23 1.62 1.62 ...
#>     $ composite_INT_: num  0.977 3.42 3.909 0.977 0.977 ...

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.24, approach = dblcent):
#> 
#> Interaction Model Fit Measures (H1):
#>   Loglikelihood                              -20717.06 
#>   Akaike (AIC)                                41480.13 
#>   Bayesian (BIC)                              41607.70 
#>   Chi-square                                    229.55 
#>   Degrees of Freedom                                13 
#>   P-value (Chi-square)                           0.000 
#>   RMSEA                                          0.094 
#>   CFI                                            0.986 
#>   SRMR                                           0.028 
#> 
#> Fit Measures for Baseline Model (H0):
#>   Loglikelihood                              -20800.88 
#>   Akaike (AIC)                                41645.76 
#>   Bayesian (BIC)                              41767.78 
#>   Chi-square                                    397.18 
#>   Degrees of Freedom                                14 
#>   P-value (Chi-square)                           0.000 
#>   RMSEA                                          0.120 
#>   CFI                                            0.975 
#>   SRMR                                           0.060 
#> 
#> Comparative Fit to H0 (LRT test):
#>   Chi-square diff                              167.631 
#>   Degrees of freedom diff                            1 
#>   P-value (LRT)                                  0.000 
#> 
#> R-Squared Interaction Model (H1):
#>   INT                                            0.851 
#>   BEH                                            0.852 
#> R-Squared Baseline Model (H0):
#>   INT                                            0.853 
#>   BEH                                            0.831 
#> R-Squared Change (H1 - H0):
#>   INT                                           -0.002 
#>   BEH                                            0.021 
#> 
#> lavaan 0.6-20 ended normally after 54 iterations
#> 
#>   Estimator                                         ML
#>   Optimization method                           NLMINB
#>   Number of model parameters                        23
#> 
#>   Number of observations                          1894
#> 
#> Model Test User Model:
#>                                                       
#>   Test statistic                               229.549
#>   Degrees of freedom                                13
#>   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 =~                                              
#>     beh1              1.000                           
#>     beh2              1.203    0.017   72.565    0.000
#>     beh3              1.228    0.016   77.324    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.764    0.039   19.400    0.000
#>     SN               -0.183    0.033   -5.465    0.000
#>     PBC               1.823    0.110   16.545    0.000
#>   BEH ~                                               
#>     INT               0.718    0.026   27.248    0.000
#>     PBC               0.369    0.099    3.741    0.000
#>     INTPBC            0.310    0.022   13.826    0.000
#> 
#> Covariances:
#>                     Estimate  Std.Err  z-value  P(>|z|)
#>  .composite_PBC_ ~~                                    
#>    .cmps_INT__PBC_     0.001                           
#>  .composite_INT_ ~~                                    
#>    .cmps_INT__PBC_     0.001                           
#>   ATT ~~                                               
#>     SN                 1.593    0.063   25.323    0.000
#>     PBC                0.710    0.028   25.733    0.000
#>     INTPBC             0.048    0.041    1.167    0.243
#>   SN ~~                                                
#>     PBC                0.554    0.023   23.691    0.000
#>     INTPBC            -0.128    0.037   -3.473    0.001
#>   PBC ~~                                               
#>     INTPBC            -0.028    0.016   -1.807    0.071
#> 
#> Variances:
#>                    Estimate  Std.Err  z-value  P(>|z|)
#>    .composite_ATT_    0.194                           
#>    .composite_SN_     0.151                           
#>    .composite_PBC_    0.062                           
#>    .composite_INT_    0.078                           
#>    .cmps_INT__PBC_    0.291                           
#>    .beh1              0.727    0.028   25.849    0.000
#>    .beh2              0.603    0.028   21.785    0.000
#>    .beh3              0.400    0.023   17.063    0.000
#>    .BEH               0.495    0.025   19.805    0.000
#>     ATT               2.334    0.082   28.416    0.000
#>     SN                1.811    0.064   28.408    0.000
#>     PBC               0.309    0.012   25.628    0.000
#>    .INT               0.633    0.034   18.808    0.000
#>     INTPBC            1.009    0.042   23.881    0.000