Composite Reliability

The alternatives method for calculating internal consistency that we’ll cover is composite reliability. Where possible, my personal preference is to use this approach. Although it’s not perfect, it takes care of many inappropriate assumptions that measures like Cronbach’s alpha make. If the specificities interest you, I suggest reading this post.

Composite reliability is based on the factor loadings in a confirmatory factor analysis (CFA). In the case of a unidimensional scale, we define a one-factor CFA, and then use the factor loadings to compute our internal consistency estimate. I won’t go into the detail, but we can interpret a composite reliability score similarly to any of the other metrics covered here (closer to one indicates better internal consistency). We’ll fit our CFA model using the lavaan package as follows:

Load The data

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
mydata <- read.csv("~/jamkrindo_psiko_dt.csv")
tbl_df(mydata)
## # A tibble: 133 x 30
##       ID    X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11
##    <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
##  1 32045     4     4     3     2     4     4     4     4     4     2     3
##  2 43244     4     4     4     4     4     4     4     4     4     4     2
##  3 35512     4     4     5     4     3     3     5     4     5     3     4
##  4 31528     4     4     3     4     4     4     4     3     3     2     3
##  5 23140     5     5     4     5     5     5     5     5     5     5     1
##  6 28096     1     1     1     1     1     1     1     5     5     1     1
##  7 34953     4     4     2     2     4     4     2     3     3     2     3
##  8 26038     4     4     4     2     2     2     4     4     4     4     2
##  9 29450     4     4     4     4     4     4     4     5     4     1     2
## 10 32029     2     5     5     4     4     4     4     4     5     4     2
## # ... with 123 more rows, and 18 more variables: X12 <int>, X13 <int>,
## #   X14 <int>, X15 <int>, X16 <int>, X17 <int>, X18 <int>, X19 <int>,
## #   X20 <int>, X21 <int>, X22 <int>, X23 <int>, X24 <int>, X25 <int>,
## #   X26 <int>, X27 <int>, X28 <int>, X29 <int>
library(lavaan)
## This is lavaan 0.6-3
## lavaan is BETA software! Please report any bugs.
# Define the model
items <- paste(names(mydata[,2:30]), collapse = "+")
model <- paste("Psy_CS", items, sep = "=~")
model
## [1] "Psy_CS=~X1+X2+X3+X4+X5+X6+X7+X8+X9+X10+X11+X12+X13+X14+X15+X16+X17+X18+X19+X20+X21+X22+X23+X24+X25+X26+X27+X28+X29"
# Fit the model
fit <- cfa(model, data = mydata[,2:30])

There are various ways to get to the composite reliability from this model. We’ll extract the standardized factor loadings and work with those:

fit <- cfa(model, data = mydata[,2:30])
sl <- standardizedSolution(fit)
sl <- sl$est.std[sl$op == "=~"]
names(sl) <- names(mydata[,2:30])

These are the standardized factor loadings for each item

sl
##          X1          X2          X3          X4          X5          X6 
##  0.64956254  0.54592865  0.67268989  0.66457305  0.52101682  0.61710531 
##          X7          X8          X9         X10         X11         X12 
##  0.56869602  0.22130312  0.25607022  0.52588107  0.19758107  0.10043864 
##         X13         X14         X15         X16         X17         X18 
##  0.13738611  0.32056948  0.19493865  0.22207073  0.17415849  0.31097927 
##         X19         X20         X21         X22         X23         X24 
##  0.38815088  0.37899473  0.32647307  0.55571519  0.09018191  0.42700377 
##         X25         X26         X27         X28         X29 
## -0.18073722  0.51852415  0.42239126  0.31028185  0.40066986

Compute residual variance of each item

re <- 1 - sl^2

Compute composite reliability

sum(sl)^2 / (sum(sl)^2 + sum(re))
## [1] 0.822322

There you have it. The composite reliability for the extraversion factor is 0.822

One appealing aspect of composite reliability is that we can calculate it for multiple factors in the same model. For example, say we had included all personality items in a CFA with five factors, we could do the above calculations separately for each factor and obtain their composite reliabilities.

Just to finish off, I’ll mention that you can use the standardised factor loadings to visualise more information like we did earlier with the correlations. I’ll leave this part up to you!

Plot The Items

library(semPlot)
semPaths(fit, "std", edge.label.cex = 0.5, curvePivot = TRUE)