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:
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])
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
re <- 1 - sl^2
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!
library(semPlot)
semPaths(fit, "std", edge.label.cex = 0.5, curvePivot = TRUE)