The goal of vICC is to compute varying intraclass correlation coefficients (ICC) in a one-way random effects model (i.e., a random intercepts only model). Often computing an ICC is the first step when fitting a mixed-effects (a.k.a., hierarchical, multilevel, etc.) model that results in merely one value that is assumed to apply to each group (e.g., person, school, etc.). The underlying assumption is a common within-group variance, whereas, in vICC, a random-effects model is fitted to the residual variance, thereby permitting group-level ICCs. When subjects are the grouping variable, this is akin to investigating individual differences in the ICC.
The methodology in vICC was introduced in Williams, Martin, and Rast (2019). The context was measurement reliability in a cognitive task. To this end, vICC provides ICC(1), that is the correlation for any two observations from the same group, and ICC(2), that is average score reliability. Both ICC(1) and ICC(2) are reliability indices.
You can install the development version from GitHub with:
# install.packages("devtools")
::install_github("donaldRwilliams/vICC") devtools
vICC uses the popular Bayesian software JAGS to estimate the models. It must be downloaded from the following link: https://sourceforge.net/projects/mcmc-jags/files/
The following are implemented in vICC:
pick_group
:
This model has a spike and slab on the random intercepts for the within-group variance. This provides posterior inclusion probabilities (PIP) that each group (e.g., person) does not belong to the common within-group variance model.
pick_tau
:
This model has a spike and slab on the random effects standard deviation in the scale model which captures between-group variability in the within-group variances. This provides a PIP that there is variation in the within-group variances. In the context of reliability, a large PIP indicates that measurment invariance does not hold, given there are group-level differences in so-called measurment error.
pick_none
:
This model also provides group-specific reliability, but there is no spike and slab formulation.
customary
:
This is the standard random intercept model that assumes a common within-group variance.
Note that options 1 and 2 provide Bayesian model averaged estimates for the ICCs.
This is a basic example which shows you how to implement
pick_group
library(vICC)
library(ggplot2)
# congruent trials
congruent <- subset(flanker, cond == 0)
# subset 25 from each group
dat <- congruent[unlist(tapply(1:nrow(congruent),
congruent$id,
head, 25)), ]
# fit model
fit <- vicc(
y = dat$rt,
group = dat$id,
chains = 2,
iter = 500,
burnin = 10,
type = "pick_group"
)
fit
#> vICC: Varying Intraclass Correlation Coefficients
#> Type: pick_group
#> -----
#> Random Effects:
#> Post.mean Post.sd Cred.lb Cred.ub
#> RE.sd.mean 0.0467 0.0064 0.0362 0.0607
#> RE.sd.sigma 0.5241 0.0639 0.4056 0.6541
#> Cor(mean,sigma) 0.7929 0.0859 0.5983 0.9303
#>
#> Fixed Effects:
#> Post.mean Post.sd Cred.lb Cred.ub
#> FE.mean 0.4402 0.0070 0.4258 0.4529
#> FE.sigma 0.0954 0.0045 0.0869 0.1046
#> ICC(1) 0.1950 0.0471 0.1189 0.3022
#> ICC(2) 0.8511 0.0375 0.7714 0.9154
#> -----
RE.sd.sigma
is the between-group standard deviation for
the within-group variances, which is quite large and separated from zero
in these data. Further, Cor(mean, sigma)
is the correlation
between the group-level means and the standard deviations.
The posterior inclusion probabilities are obtained with
pips <- pip(fit)
pips
Posterior Inclusion Probabilities:
#> Parameter Group PIP
#> RE_1 1 0.303
#> RE_2 2 0.283
#> RE_3 3 0.219
#> RE_4 4 0.998
#> RE_5 5 0.443
#> RE_6 6 0.346
#> RE_7 7 0.645
#> RE_8 8 0.323
#> RE_9 9 0.325
#> RE_10 10 0.268
#> RE_11 11 0.238
#> RE_12 12 1.000
#> RE_13 13 0.552
#> RE_14 14 0.339
#> RE_15 15 0.716
#> RE_16 16 0.913
#> RE_17 17 1.000
#> RE_18 18 0.992
#> RE_19 19 0.987
#> RE_20 20 0.998
#> RE_21 21 1.000
#> RE_22 22 0.997
#> RE_23 23 0.474
#> RE_24 24 0.398
#> RE_25 25 0.230
#> RE_26 26 0.427
#> RE_27 27 0.417
#> RE_28 28 0.945
#> RE_29 29 0.335
#> RE_30 30 0.255
#> RE_31 31 0.977
#> RE_32 32 0.330
#> RE_33 33 0.778
#> RE_34 34 1.000
#> RE_35 35 1.000
#> RE_36 36 0.227
#> RE_37 37 0.331
#> RE_38 38 0.348
#> RE_39 39 0.213
#> RE_40 40 0.249
#> RE_41 41 1.000
#> RE_42 42 0.999
#> RE_43 43 0.766
#> RE_44 44 1.000
#> RE_45 45 0.586
#> RE_46 46 0.852
#> RE_47 47 1.000
#>
#> ------
which provide the probability that each group differs from the fixed effect within-group variance. The PIPs can then be plotted with
plot(pips)
The group-level reliability, or ICCs, are plotted with
plts <- plot(fit)
plts$plot_icc1 +
theme(axis.text.x=element_text(angle=90, hjust=1),
legend.title = element_blank()) +
xlab("Group")
Notice that the object plts
can be further modified with
ggplot2
. Further, it also includes plots for the means
(plot_mean
), standard deviations (plot_sd
),
ICC(2) (plot_icc2
).
Please cite Williams, Martin, and Rast (2019) when describing the
method and citation("vICC")
when stating the software used
in the work.
Williams, Donald R, Stephen R Martin, and Philippe Rast. 2019. “Putting the Individual into Reliability: Bayesian Testing of Homogeneous Within-Person Variance in Hierarchical Models.” PsyArXiv.