Reliablity-Corrected Single Items
If wanted, indicators for latent variables can be replaced with
reliablity corrected single items, using Chronbach’s
.
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
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.000The easiest approach however, is to use the rcs argument
in the modsem function to call
relcorr_single_item before estimating the model.
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