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.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
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