Changelog
Source:NEWS.md
Changes in version 2.1.0
CRAN release: 2024-11-09
ADD:
EGM
andsimEGM
for model estimation and simulation of the Exploratory Graph Model, respectivelyADD:
EGM.compare
to compare EGM against EFA for most likely data generating mechanismINTERNAL:
fit
function to calculate traditional, log-likelihood, and TEFI fit indices
Changes in version 2.0.8
CRAN release: 2024-09-28
FIX: issue with dynamic memory allocation in
polychoric_matrix.c
during CRAN’s install of the packageADD:
cosine
similarity added as a default forauto.correlate
and ‘corr’ arguments
Changes in version 2.0.7
CRAN release: 2024-09-02
FIX: mixed data with missing data in
network.predictability
ADD:
frobenius
norm to compare networksADD:
network.compare
function to test for differences in network structures using three different metrics (Frobenius Norm, Jensen-Shannon Similarity, total network strength)ADD: a general function called
information
to compute several information theory measuresUPDATE: default ‘loading.method’ for
net.loads
has been changed to “revised” moving forward – the previous default in versions <= 2.0.6 can be obtained using “original”UPDATE:
invariance
handles more than 2 groups (plots up to 4 groups pairwise)UPDATE: added ‘signed’ argument in
jsd
to allow for signed or absolute networks to be used in computations (includes downstream functions:infoCluster
)UPDATE: NEWS is now formatted in markdown
UPDATE:
network.predictability
uses R-squared and mean absolute error (MAE) for all node predictionsINTERNAL:
network.generalizabilty
was moved to be internal (needs some work yet)INTERNAL: signs for
net.loads
uses the first eigenvector of the target network (rather than the customobtain_signs
function)
Changes in version 2.0.6
CRAN release: 2024-04-22
FIX: bug when using
na.data = "listwise"
in standardcor()
functionFIX: update to revised network loadings signs:
net.loads(..., loading.method = "experimental")
FIX: bug in argument ‘returnAllResults’ for
EBICglasso.qgraph
FIX: bug when passing additional non-
dimensionStability
arguments intobootEGA
FIX: bug when printing
hierEGA
summary frombootEGA
UPDATE: colors in
itemStability
plots will match colors ofhierEGA
plotUPDATE:
network.predictability
uses empirical inverse variances (rather than network-implied)UPDATE: R-squared in
continuous_accuracy
helper uses Pearson’s correlation squared
Changes in version 2.0.5
CRAN release: 2024-03-15
FIX: ‘stroke’ parameter in
hierEGA
that broke with {ggplot2} updateADD:
network.predictability
to predict new data based on a networkADD:
network.generalizability
to estimate network generalizability to new data (leveragesnetwork.predictability
)UPDATE: new loadings (
net.loads(..., loading.method = "experimental")
) have been added to resolve issues in original loadings (e.g., signs, cross-loadings, standardization)UPDATE:
plot.bootEGA
will outputitemStability
plot by defaultUPDATE:
dimensionStability
output now included inbootEGA
as output$stability
UPDATE: ‘rotate’ argument added to
infoCluster
plot to allow for different angle of dendrogramDEPENDENCY: {fungible} is now ‘IMPORTS’ over ‘SUGGESTS’ for dependency in new loadings
DEPRECATED:
typicalStructure
andplot.typicalStructure
have been deprecated toFALSE
Changes in version 2.0.4
CRAN release: 2024-01-22
FIX: plotting for
infoCluster
when there are grey lines involved (or not)FIX: pass of multiple passes of
resolution_parameter
causing an error in {igraph} 2.0.0 forEGA.fit
(see issue #148)ADD:
community.compare
to perform permutation test to determine statistical significance of cluster similarityUPDATE: moved
reindex_memberships
to helpersUPDATE:
reindex_memberships
used incommunity.homogenize
Changes in version 2.0.3
CRAN release: 2023-11-17
FIX: freed
edge.*
arguments incompare.EGA.plots
to allow full customizationUPDATE: optimizations for speed and memory in
ergoInfo
andboot.ergoInfo
DEPENDENCY: swapped out {ggdendro} for {dendextend}
Changes in version 2.0.2
CRAN release: 2023-10-25
FIX: ties for max gain in
TMFG
FIX: continuous variables with few categories that are treated as ordinal in
polychoric.matrix
FIX: character input for
structure
is now acceptedADD: website pointing to different data check errors added to error output (hopefully, makes errors more understandable)
UPDATE:
corr = "cor_auto"
now performsqgraph::cor_auto
in favor of legacy; previous behavior starting at 2.0.0 was t+ deprecate"cor_auto"
in favor of"auto"
; default remainscorr = "auto"
UPDATE:
compare.EGA.plots
outputs$all
and$individual
for the plotsUPDATE: when
structure
is supplied forinvariance
, then configural check is skipped (structure is assumed to be invariant)UPDATE: added data generation for
model = "BGGM"
anduni.method = "expand"
incommunity.unidimensional
DEPENDENCY: {BGGM} has been removed until dependency chain on CRAN can be resolved
Changes in version 2.0.1
CRAN release: 2023-08-23
- updated the polychoric C code to avoid out-of-bounds access errors
Changes in version 2.0.0
CRAN release: 2023-08-16
MAJOR REFACTOR: the update to version 2.0.0 includes many major changes that are designed to improve the speed, reliability, and reproducibility of {EGAnet}. The goal of these changes are to eliminate common errors and streamline the code in the package to prevent future error cases. There are several function additions that are provided to facilitate modular use of the {EGAnet} package
INTERNALS: function-specific internal functions and S3methods are now located in their respective .R files rather than elsewhere (e.g., “utils-EGAnet.R”)
SWAP: internal script usage of “utils-EGAnet.R” depracated for “helper.R” functions that are used across the package (no visible changes for the user)
NOTE: default objective function for Leiden algorithm is set to “modularity”
NOTE: default for Louvain unidimensional method is set to single-shot unless argument “consensus.method” or “consensus.iter” is specified
ADD: stricter
*apply
functions that are roughly equivalent to*apply
but have stricter inputs/outputs (usesvapply
as foundation; often, slightly faster)ADD:
community.consensus
to apply the Consensus Clustering approach introduced by Lancichnetti & Fortunato (2012). Currently only available for the Louvain algorithmADD:
community.detection
to apply community detection algorithms as a standalone functionADD: convenience function to convert an {igraph} object to a standard matrix (
igraph2matrix
)ADD:
modularity
to compute standard (absolute values) and signed modularity (implemented in C)ADD:
polychoric.matrix
to compute categorical correlations (implemented in C); handles missing data (“pairwise” or “listwise”) as well as empty cells in the joint frequency table (see documentation:?polychoric.matrix
)ADD:
auto.correlate
now computes all correlations internally and no longer depends on external functions; categorical correlations are C based and bi/polyserial correlations are a simplified and vectorized version of {polycor}’spolyserial
; substantial computational gains (between 10-25x faster than previous use of {qgraph}’scor_auto
)ADD:
network.estimation
to handle all network estimation in {EGAnet}; includes Bayesian GGM from {BGGM} for more seamless incorporation of BEGAADD:
community.unidimensional
to apply different unidimensional community detection approaches; makes unidimensional community detection more modular and flexibleADD: basic (internal) function to handle all network plots to keep changes centralized to a single function; extends flexbility to handle all {GGally}’s
ggnet2
argumentsADD: implemented reproducible parametric bootstrapping and random sampling (see https://github.com/hfgolino/EGAnet/wiki/Reproducibility-and-PRNG for more details)
ADD: implemented reproducible resampling bootstrapping and random sampling (see https://github.com/hfgolino/EGAnet/wiki/Reproducibility-and-PRNG for more details)
ADD: reproducible bootstrapping with seed setting that does not affect R’s seed and RNG (user’s seed will not be affected and will not affected bootstrapping seeds)
ADD:
community.homogenize
as a core function rather than internal (previouslyhomogenize.membership
); about 2.5x faster than the original versionADD:
convert2tidygraph
forggraph
andtidygraph
support – thanks to Dominique Makowski!ADD: “multilevel” plotting support for
hierEGA
(only used whenscores = "network"
since factor scores don’t directly align with EGA detected dimensions)ADD: internal functions
shuffle
andshuffle_replace
to replacesample
with and without replacement; performed in C and allows seed setting independent of R (about 2-3x faster)ADD: xoshiro256++ PRNG for higher quailty random number generation, permutation, and resampling (~2x faster than
runif
andsample
); based in CADD: Ziggurat method for random normal generation over top xoshiro256++ (2-5x faster than
rnorm
); based in CADD: configural invariance was added to
invariance
(see Details section)ADD:
genTEFI
to compute the Generalized Total Entropy Fit Index solely;tefi
serves as a general function to compute TEFI for all*EGA
classesREMOVE:
signed.louvain
until reproducibility can be sortedREMOVE:
methods.section
andutils-EGAnet.methods.section
to avoid space issues in ./R directory (1MB)UPDATE:
EBICglasso.qgraph
andTMFG
were optimized;TMFG
is now 2x fasterUPDATE:
TMFG
can now directly estimate a GGM with the argument ‘partial = TRUE’; implements the Local-Global Inversion method from Barfuss et al. (2016)UPDATE: switched on “Byte-Compile” (byte-compiles on our end and not when the user installs)
UPDATE:
EGA.estimate
andEGA
core functions have been updated for seamless use with more basic functionsnetwork.estimation
andcommunity.*
functionsUPDATE: S3method updates for
EGA.estimate
andEGA
to provide estimation informationUPDATE:
EGA.fit
updated to be compatiable with all updates toEGA.estimate
(other optimizations were implemented such as direct communtiy detection application and unique solution finding)UPDATE:
tefi
updated with several checks (slightly slower for correlation matrix but much faster with raw data; includes data/matrix checks)UPDATE:
entropyFit
uses more effective vectorization (about 5-7x faster)UPDATE:
Embed
andglla
made to be more efficient and includes an internalglla_setup
function to avoid the same matrix calculations for every participant in a sample fordynEGA
UPDATE:
riEGA
updated to be compatiable with all lower-level updates (slightly faster)UPDATE:
wto
updated to be fully vectorized (about 12x faster)UPDATE:
totalCor
andtotalCorMat
updated to be fully vectorized (about 10x faster)UPDATE: implemented internal
fast.data.frame
for more efficient data frame initialization when all values in data frame are the sameUPDATE:
bootEGA
allows flexibility to add any arguments from anyEGA*
functions; much faster due to optimizations across all functions (“resampling” is nearly as fast as “parametric”)UPDATE: support for
EGA.fit
andriEGA
added tobootEGA
(support forhierEGA
will be coming soon…)UPDATE:
itemStability
has been updated and runs about 2.5x faster due tocommunity.homogenize
; S3methods were added; greater flexibility available in plotting but not much support (e.g., error checking) yetUPDATE:
dimensionStability
has been updated and maintains speed gains fromitemStability
UPDATE:
dynEGA.ind.pop
now callsdynEGA
withlevel = c("individual", "population")
; legacydynEGA.ind.pop
class is maintained across ergodicity functionsUPDATE:
ergoInfo
is about 2x fasterUPDATE:
jsd
received several internal functions to expedite procedures ininfoCluster
andjsd.ergoInfo
UPDATE:
net.loads
now includes ‘loading.method’ argument to allow for reproducibility with “BRM” implementation (and version 1.2.3); “experimental” implementation includes rotations alternative signs and cross-loading computation (potential future default)UPDATE:
net.scores
is much simpler (internally) and quicker; seamlessly integrates withnet.loads
UPDATE:
compare.EGA.plots
is faster, more flexible, and more reliable for comparing two or more plotsUPDATE:
hierEGA
is faster and has new S3 methodsUPDATE: S3 plotting for
invariance
UPDATE:
hierEGA
+bootEGA
integration foritemStability
anddimensionStability
(includes full S3 methods)UPDATE:
UVA
supports legacy of inital conception in Christensen, Golino, and Silvia (EJP, 2020) but will no longer fix bugs related to: manual variable selection, “adapt” or “alpha” methods (warnings will be thrown)UPDATE: streamlined
UVA
(about 4x faster); fixed bugs related to reverse coding issuesUPDATE:
tefi
now handles allEGA*
function objects includinghierEGA
which computes generalized TEFIUPDATE: documentation for all functions have been thoroughly revised to provide better instruction on how to use functions and their expected inputs
DEPENDENCY: removed {network} because it is no longer used for plotting; switched {sna} to IMPORTS rather than SUGGESTS
DEPENDENCY: removed {rstudioapi} from ‘Suggests’ because it was used in
colortext
and used in the packageDEPENDENCY: removed {matrixcalc} because it was only used for trace of a matrix (own internal function is used)
DEPENDENCY: {future} and {future.apply} are used for parallelization (better integration); includes internal function to check for available memory to not break in big data cases
DEPENDENCY: {progress} and {progressr} are used for progress bars (in parallelization)
DEPENDENCY: removed {psychTools} from ‘Suggests’ which was only used in examples
DEPENDENCY: removed {rmarkdown} from ‘Suggests’ since it wasn’t being used across the package
Changes in version 1.2.5.1
FIX: cross-loading bug in
net.loads
was leading to problems when there were negative cross-loadingsFIX: added
psych::factor.scores
scoring methods innet.scores
ADD:
signed.louvain
to estimate the Signed Louvain algorithm (implemented in C)
Changes in version 1.2.4
REMOVE:
residualEGA
has been removed in favor ofriEGA
(removes {OpenMx} dependency)ADD: rotations to
net.loads
andnet.scores
UPDATE:
hierEGA
only outputs specified output (no longer outputs all possible consensus methods and scores combinations – should be much faster)
Changes in version 1.2.3
CRAN release: 2022-09-05
FIX: many bug fixes related to latest update; functions have largely returned to stable status
UPDATE: Mac and Linux parallelizations have been optimized
UPDATE: documented examples are more efficient for CRAN checks
Changes in version 1.2.1
FIX:
bootEGA
read of bootstrap data (was not calling fromdatalist
indo.call
leading to perfect item stability)FIX: number of possible colors expanded to 70 (increased from 40)
Changes in version 1.2.0
CRAN release: 2022-08-12
FIX: hex codes used in EGA plots
FIX:
ordered = TRUE
for categorical data in lavaan CFAsUPDATE: consesnsus clustering is now used with Louvain in
EGA
UPDATE: print/summary S3methods have been standardized
ADD/UPDATE:
boot.ergoInfo
has achieved functional working order. Results can be trusted to suggest whether dynamic data possess the ergodic propertyADD: information theoretic clustering algorithm for dynamic data is available in
infoCluster
REMOVE: “alpha” and “adapt” options in
UVA
(removes {fitdistrplus} dependency)REMOVE: {qgraph} plots are no longer available
ADD:
convert2igraph
is now a core functionADD: Jensen-Shannon Divergence
jsd
for determining (dis)similarity between network strcuturesADD:
riEGA
,EGA.fit
, andhierEGA
functionality tobootEGA
ADD:
hierEGA
functionality toitemStability
anddimensionStability
UPDATE: “louvain” algorithm used as default for unidimensionality check in
EGA
INTERNAL: cleaned up
EGA
andEGA.estimate
; streamlined code; no user facing differences
Changes in version 1.1.0
CRAN release: 2022-05-10
FIX: CRAN note when
if(class(object))
. Replaced byif(is(object))
.FIX: bug in
EGA.estimate
when using the TMFG network method. The resulting EGA plot did not have the correct node names.FIX: bug in
UVA
when trying to use sum score (reduce.method = "sum"
) in automated procedureADD: measurement
invariance
function for testing differences in network loadings between groupsUPDATE:
itemStability
now has a parameterstructure
in which the user can specify a given structure to test its stability.ADD:
riEGA
implementing random-intercept EGA for wording effectsADD:
hierEGA
implementing hierarchical EGAFIX: consensus clustering for the Louvain algorithm
ADD:
louvain
algorithm with added optimization option usingtefi
Changes in version 1.0.0
CRAN release: 2021-11-10
FIX: bug within the bootEGA function for
type = "resampling"
.UPDATE: default undimensionality adjustment has changed to leading eigenvalue (see Christensen, Garrido, & Golino, 2021 https://doi.org/10.31234/osf.io/hz89e). Previous unidimensionality adjustment in versions <= 0.9.8 can be applied using
uni.method = "expand"
UPDATE: default
UVA
was changedtype = "threshold"
UPDATE:
UVA
is now automated usingauto = TRUE
DEFUNCT:
dimStability
will no longer be supported. Instead, usedimensionStability
REVAMP:
itemStability
has been recoded. Now includes error checking and more readable codeFIX: bug for plotting NA communities
FIX: bug for changing edge size in ‘GGally’ plotting
UPDATE: S3Methods for
EGA.fit
plottingFIX: plotting parameters for
bootEGA
FIX: redundancy output for adhoc check in
UVA
FIX: latent variable with non-space separated entries in
UVA
(reduce.method = "latent"
)UPDATE:
UVA
was added tomethods.section
UPDATE: neural network weights in
LCT
(now only tests for factor or small-world network models)UPDATE: citations
UPDATE: added
seed
argument forbootEGA
to reproduce resultsFIX: bug for Rand index in
itemStability
Changes in version 0.9.8
CRAN release: 2021-02-16
UPDATE: Unidimensional check in
EGA
expands a correlation matrix (rather than generating variables; much more efficient)ADD:
color_palette_EGA
New EGA palettes for plottingggnet2
EGA network plots (see?color_palette_EGA
)ADD:
UVA
or Unique Variable Analysis operates as a comprehensive handling of variable redundancy in multivariate data (see?UVA
)DEFUNCT:
node.redundant
,node.redundant.names
, andnode.redundant.combine
will be defunct in next version. Please useUVA
ADD: a new function to compute a parametric Bootstrap Test for the Ergodicity Information Index (see
?boot.ergoInfo
)ADD: basic Shiny functionality (
EGA
only)ADD: a new function to compute a Monte-Carlo Test for the Ergodicity Information Index (see
?mctest.ergoInfo
)ADD: a new function to compute the Ergodicity Information Index (see
?ergoInfo
)UPDATE: new plotting scheme using network and GGally packages
ADD: a function to produce an automated Methods section for several functions (see
?methods.section
)UPDATE:
bootEGA
now implements the updatedEGA
algorithmUPDATE: ega.wmt data (unidimensional)
UPDATE:
itemStability
plot defaults (“GGally” color scheme) and examples (manipulating plot)ADD: total correlation (see
?totalCor
andtotalCorMat
)ADD: correlation argument (corr) for
EGA
,bootEGA
, andUVA
FIX: GGally color palette when more than 9 dimensions
Changes in version 0.9.7
UPDATE:
LCT
neural network weights were updated (parametric relu activation function)FIX: naming in
EGA
FIX: output network matrix in
EGA
when data are inputUPDATE: citation version
UPDATE:
node.redundant
now provides a full plot of redundancies detected, descriptive statistics including the critical value, central tendency descriptive statistics, and the distribution the significant values were determined from (thanks to Luis Garrido for the suggestion!)
Changes in version 0.9.6
CRAN release: 2020-07-13
- UPDATE:
LCT
updated with neural network implementation
Changes in version 0.9.5
ADD: loadings comparison test function added (see
LCT
)FIX: named community memberships in
itemStability
anddimStability
UPDATE:
plot
,print
, andsummary
methods all moved into single .R files (no effect on user’s end)UPDATE:
net.scores
global score is improved and computes scores very close to CFA scoresFIX: additional argument calls for
EGA.estimate
(andEGA
by extension)UPDATE: message from
EGA.estimate
(andEGA
by extension) reports both ‘gamma’ and ‘lambda.min.ratio’ argumentsFIX: upper quantile output from
bootEGA
FIX: minor bugs in
node.redundant
,itemStability
, andnet.loads
Changes in version 0.9.4
MAJOR UPDATE:
dimStability
now computes proportion of exact dimension replications rather than items that replicate within dimension (this latter information can still be found in the output ofitemStability
under $mean.dim.rep)FIX:
net.loads
for when dimensions equal one or the number of nodes in the networkFIX: naming typo with characters in
itemStability
FIX: NAs in
dimStability
FIX: weights of network in unidimensional structure of
EGA
are the same as multidimensional structureUPDATE: Added a new function to simulate dynamic factor models
simDFM
UPDATE: added internal functions for
net.loads
(seeutils-net.loads
)FIX: ordering of names in
itemStability
FIX: handling of NA communities in
net.loads
UPDATE: Added output of the average replication of items in each dimension for
itemStability
UPDATE: Revised ‘Network Scores’ vignette
UPDATE:
net.loads
functionality (cleaned up code)UPDATE: S3Methods for
net.loads
FIX:
net.scores
negative loadings corrected
Changes in version 0.9.3
CRAN release: 2020-03-05
New function and print, summary and plot methods: dynEGA
New functions: Embed and glla
Changes in version 0.9.2
UPDATE: add latent variable scores comparison to
net.scores
vignetteUPDATE:
node.redundant.combine
sets loadings equal to 1 when there are only two variables when the argument type = “latent”; warning also added from type = “sum”FIX:
node.redundant
alpha types bugupdated
itemStability
(bug fixes)updated
node.redundant.combine
(bug fixes, latent variable option)major bug fix in
net.loads
: corrected loadings greater than 1 when there were many negative valuesadded
EGA.estimate
to clean upEGA
code and allow for future implementations of different network estimation methods and community detection algorithmsupdated
EGA
functionality: message for ‘gamma’ value used andEGA.estimate
compatiabilityremoved iterators dependency
ordering and name fix in
net.loads
auto-adjusts y-axis label size for
itemStability
plot based on number of nodes or length of node namesnet.loads
adjusted for larger values using absolute values and applying the sign afterwardsreverse coding update in
net.loads
node.redundant.combine
bug fix for reverse coding latent variablesadded Louvain community detection to all EGA functions in EGAnet
functionality updates to
node.redundant
swapped arguments ‘type’ and ‘method’ in the
node.redundant
function (fixed examples in other node.redundant functions)updated citation
Changes in version 0.9.0
CRAN release: 2020-01-18
updated list of dependencies
added ORCiDs in Description file
corrected ordering of
net.loads
outputcorrected standard error in
bootEGA
citation update
added function
dimStability
to compute dimensional stabilityadded a series of functions for
node.redundant
, which facilitates detecting and combining redundant nodes in networksupdated the EGA.fit function, so now a correlation matrix can be used as well.
Changes in version 0.8.0
‘bootEGA’ now computes time until bootstrap is finished
new functions ‘cmi’, ‘pmi’ and ‘residualEGA’ added: ‘cmi’ computes conditional mutual information, ‘pmi’ computes partial mutual information and residual EGA computes an EGA network controlling for wording effects
new dataset ‘optimism’ added
documentation and functionality for several functions updated
Changes in version 0.7.0
fixed ‘EGA’ bug in ‘bootEGA’ function; updated ‘bootEGA’ documentation; added progress messages
migrated ‘net.scores’ and ‘net.loads’ from ‘NetworkToolbox’ to ‘EGAnet’ package
functions ‘itemConfirm’ and ‘itemIdent’ have been merged into a single function called, ‘itemStability’
fixed item ordering in ‘itemStability’ output so dimensions are from least to greatest, the colors match the original community vector input, and updated average standardized network loadings to the ‘net.loads’ function
added datasets ‘ega.wmt’ and ‘boot.wmt’ for quick user-friendly examples (also removed all ‘’)
added package help page
added package load message
updated ‘itemStability’ algorithm (now can accept any number of ‘orig.wc’) and enforced ‘0’ to ‘1’ bounds on plot