reliability-corrected single items
relcorr_items.Rmd
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 =~ 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.230703252252833*composite_ATT_
#> composite_SN_ ~~ 0.219569422798239*composite_SN_
#> composite_PBC_ ~~ 0.269459429965901*composite_PBC_
#> composite_INT_ ~~ 0.0783705643995773*composite_INT_
#> composite_BEH_ ~~ 0.276556964349188*composite_BEH_
#>
#> Generated Items:
#> 'data.frame': 1169 obs. of 5 variables:
#> $ composite_ATT_: num 5.5 5 2 5.5 4.5 1 1 1 4.25 6.25 ...
#> $ composite_SN_ : num 6.5 4.75 3.5 6.5 5.25 3 2.25 4 4.5 6 ...
#> $ composite_PBC_: num 4 4.5 1.75 5.75 5.5 1 1 1 5 5.75 ...
#> $ composite_INT_: num 4 4.5 1 5.25 5.25 1 1 1 5 5 ...
#> $ composite_BEH_: num 1 3.75 1.25 2.75 5.25 1 1 1 2.5 5.5 ...
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", rcs.res.cov.xz = TRUE)
est_lms <- modsem(syntax, data = data, method="lms", nodes=32)
summary(est_lms)
#>
#> modsem (version 1.0.11):
#>
#> Estimator LMS
#> Optimization method EMA-NLMINB
#> Number of observations 1169
#> Number of iterations 101
#> Loglikelihood -7275.51
#> Akaike (AIC) 14589.02
#> Bayesian (BIC) 14685.24
#>
#> Numerical Integration:
#> Points of integration (per dim) 32
#> Dimensions 1
#> Total points of integration 32
#>
#> Fit Measures for Baseline Model (H0):
#> Loglikelihood -9352.47
#> Akaike (AIC) 18740.95
#> Bayesian (BIC) 18832.1
#> Chi-square 34.76
#> Degrees of Freedom (Chi-square) 2
#> P-value (Chi-square) 0.000
#> RMSEA 0.118
#>
#> Comparative Fit to H0 (LRT test):
#> Loglikelihood change 2076.96
#> Difference test (D) 4153.92
#> Degrees of freedom (D) 1
#> P-value (D) 0.000
#>
#> R-Squared Interaction Model (H1):
#> INT 0.855
#> BEH 0.933
#> R-Squared Baseline Model (H0):
#> INT 0.856
#> BEH 0.869
#> 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|)
#> PBC =~
#> cmpst_PBC_ 1.000
#> ATT =~
#> cmpst_ATT_ 1.000
#> SN =~
#> compst_SN_ 1.000
#> INT =~
#> cmpst_INT_ 1.000
#> BEH =~
#> cmpst_BEH_ 1.000
#>
#> Regressions:
#> Estimate Std.Error z.value P(>|z|)
#> INT ~
#> PBC 1.078 0.050 21.492 0.000
#> ATT -0.018 0.046 -0.385 0.700
#> SN 0.013 0.031 0.424 0.672
#> BEH ~
#> PBC 0.718 0.045 15.989 0.000
#> INT 0.285 0.038 7.468 0.000
#> PBC:INT 0.149 0.008 18.006 0.000
#>
#> Intercepts:
#> Estimate Std.Error z.value P(>|z|)
#> .cmpst_PBC_ 3.893 0.057 67.735 0.000
#> .cmpst_ATT_ 3.870 0.058 66.992 0.000
#> .compst_SN_ 4.430 0.048 93.181 0.000
#> .cmpst_INT_ 3.784 0.065 58.509 0.000
#> .cmpst_BEH_ 2.602 0.069 37.640 0.000
#>
#> Covariances:
#> Estimate Std.Error z.value P(>|z|)
#> PBC ~~
#> ATT 3.253 0.148 22.000 0.000
#> SN 2.132 0.112 19.013 0.000
#> ATT ~~
#> SN 2.028 0.111 18.263 0.000
#>
#> Variances:
#> Estimate Std.Error z.value P(>|z|)
#> .cmpst_PBC_ 0.269
#> .cmpst_ATT_ 0.231
#> .compst_SN_ 0.220
#> .cmpst_INT_ 0.078
#> .cmpst_BEH_ 0.277
#> PBC 3.595 0.160 22.509 0.000
#> ATT 3.673 0.161 22.753 0.000
#> SN 2.423 0.109 22.167 0.000
#> .INT 0.696 0.045 15.541 0.000
#> .BEH 0.325 0.031 10.387 0.000
The rcs.res.cov.xz
argument should be used when using
one of the PI approaches (excluding the constrained approach) to apply
reliability corrections to the generated product indicators (created
from reliability-corrected single-items) as well.
The 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.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.230703252252833*composite_ATT_
#> composite_SN_ ~~ 0.219569422798239*composite_SN_
#> composite_PBC_ ~~ 0.269459429965901*composite_PBC_
#> composite_INT_ ~~ 0.0783705643995773*composite_INT_
#>
#> Generated Items:
#> 'data.frame': 1169 obs. of 4 variables:
#> $ composite_ATT_: num 5.5 5 2 5.5 4.5 1 1 1 4.25 6.25 ...
#> $ composite_SN_ : num 6.5 4.75 3.5 6.5 5.25 3 2.25 4 4.5 6 ...
#> $ composite_PBC_: num 4 4.5 1.75 5.75 5.5 1 1 1 5 5.75 ...
#> $ composite_INT_: num 4 4.5 1 5.25 5.25 1 1 1 5 5 ...
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.11, approach = dblcent):
#>
#> Interaction Model Fit Measures (H1):
#> Loglikelihood -18109.33
#> Akaike (AIC) 36268.66
#> Bayesian (BIC) 36395.26
#> Chi-square 1326.31
#> 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 -18232.48
#> Akaike (AIC) 36512.97
#> Bayesian (BIC) 36634.50
#> Chi-square 1572.62
#> 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 246.303
#> Degrees of freedom diff 1
#> P-value (LRT) 0.000
#>
#> R-Squared Interaction Model (H1):
#> INT 0.858
#> BEH 0.914
#> R-Squared Baseline Model (H0):
#> INT 0.859
#> BEH 0.874
#> R-Squared Change (H1 - H0):
#> INT -0.001
#> BEH 0.040
#>
#> lavaan 0.6-19 ended normally after 61 iterations
#>
#> Estimator ML
#> Optimization method NLMINB
#> Number of model parameters 25
#>
#> Number of observations 1169
#>
#> Model Test User Model:
#>
#> Test statistic 1326.312
#> 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.481 0.000
#> beh1 0.822 0.019 43.580 0.000
#> beh4 0.811 0.019 42.331 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.001 0.045 0.033 0.973
#> SN -0.010 0.032 -0.317 0.751
#> PBC 1.075 0.050 21.574 0.000
#> BEH ~
#> INT 0.647 0.038 17.046 0.000
#> PBC 0.386 0.044 8.707 0.000
#> INTPBC 0.145 0.009 16.573 0.000
#>
#> Covariances:
#> Estimate Std.Err z-value P(>|z|)
#> ATT ~~
#> SN 2.028 0.111 18.255 0.000
#> PBC 3.242 0.148 21.898 0.000
#> INTPBC 0.262 0.199 1.317 0.188
#> SN ~~
#> PBC 2.148 0.113 19.072 0.000
#> INTPBC -0.178 0.164 -1.086 0.278
#> PBC ~~
#> INTPBC 0.401 0.197 2.041 0.041
#>
#> Variances:
#> Estimate Std.Err z-value P(>|z|)
#> .composite_ATT_ 0.231
#> .composite_SN_ 0.220
#> .composite_PBC_ 0.269
#> .composite_INT_ 0.078
#> .cmps_INT__PBC_ 1.627
#> .beh3 0.481 0.031 15.621 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.797 0.000
#> .BEH 0.456 0.033 13.656 0.000
#> ATT 3.673 0.161 22.748 0.000
#> SN 2.423 0.109 22.168 0.000
#> PBC 3.603 0.160 22.496 0.000
#> .INT 0.686 0.044 15.434 0.000
#> INTPBC 10.228 0.490 20.858 0.000