Deeper Dives
Before a network is estimated at all, it’s worth asking whether any
items are redundant with one another — measuring such similar content
that they behave more like duplicates than distinct variables.
UVA (Unique Variable Analysis) checks for exactly this
using the weighted topological overlap (wto), and is
usually the first step of an EGA workflow (see the full EGA workflow for how it fits alongside
EGA and bootEGA). This workflow looks at
UVA on its own, in more depth.
We’ll use the depression dataset: item-level responses
to the Beck Depression Inventory (BDI), Beck Anxiety
Inventory (BAI), and Athens Insomnia Scale
(Insomnia) — three related but conceptually distinct
symptom checklists that are exactly the kind of self-report items where
redundant wording tends to creep in.
# Load {EGAnet}
library(EGAnet)
# Obtain item-level columns from the three scales
items <- grep("^BDI[0-9]+$|^BAI[0-9]+$|^Insomnia[0-9]+$", colnames(depression), value = TRUE)
dep_items <- depression[, items]dep_uva <- UVA(data = dep_items)
# Print results
dep_uvaVariable pairs with wTO > 0.30 (large-to-very large redundancy)
node_i node_j wto
Insomnia4 Insomnia5 0.359
BAI12 BAI13 0.307
----
Variable pairs with wTO > 0.25 (moderate-to-large redundancy)
node_i node_j wto
BAI11 BAI15 0.26
----
Variable pairs with wTO > 0.20 (small-to-moderate redundancy)
node_i node_j wto
Insomnia2 Insomnia3 0.227
BDI18 BDI19 0.212
BAI5 BAI16 0.201
BAI20 BAI21 0.200
UVA flags three tiers of overlap. At the top,
Insomnia4–Insomnia5 (wTO = 0.359) and
BAI12–BAI13 (wTO = 0.307) clear the
“large-to-very large” band; BAI11–BAI15
(wTO = 0.26) clears “moderate-to-large.” A handful of other
pairs sit just below the default 0.25 cut-off and are left alone. All
three come from within a single scale rather than across scales
— which makes sense, since items written to tap the same construct are
the ones most likely to end up saying the same thing twice.
By default, UVA automatically reduces the data: for each
redundant doublet, it keeps whichever variable has the lower maximum
wto to everything else, and removes the other.
dep_uva$keep_remove$keep
[1] "BAI13" "BAI15" "Insomnia4"
$remove
[1] "BAI11" "BAI12" "Insomnia5"
BAI11, BAI12, and Insomnia5
are dropped; BAI13, BAI15, and
Insomnia4 are kept in their place. Note that this is a
statement about redundancy, not quality — the removed
item isn’t a worse question, it’s just carrying information that its
partner already captures. The reduced data is available directly from
the output:
dim(dep_uva$reduced_data)[1] 574 47
47 items remain, down from the original 50. This reduced set — not
the original 50 items — is what should move forward into
EGA: estimating a network on data with unresolved
redundancy risks pulling near-duplicate items into their own artificial
“wastebasket” community that reflects shared wording rather than a real
dimension.