Changelog
Source:NEWS.md
Changes in version 2.3.1
FIX: documentation for
itemDiagnosticsFIX:
$keepoutput fromitemDiagnosticsrather than$suggestedUPDATE: added argument,
ordered, to either outputnet.loadsin the initial variable order or descending order for each communityUPDATE: beta-min condition is used to supply a model-implied network for
simEGM
Changes in version 2.3.0
CRAN release: 2025-04-09
ADD:
itemDiagnosticsfor automated detection of potential instability issues such as local dependnece, minor dimensions, multidimensionality, and low loadingsFIX: default
itemStabilityplot switched back to empirical dimensions onlyUPDATE:
simEGMhas a new (faster) data generating mechanismUPDATE:
EGMoptimizations for log-likelihood, AIC, and BIC were added (including proper gradients)
Changes in version 2.2.0
CRAN release: 2025-03-07
ADD:
network.nonconvexto estimate networks using non-convex regularization penaltiesADD:
TEFI.compareto perform a significance test between two structures usingbootEGAoutputFIX: Error in printing
length_errorforcolor_palette_EGAFIX: signs for revised network loadings have reverted back to original method due to issues with eigenvectors when there are unusual patterns of (partial) correlations
UPDATE:
itemStabilityplot now includes the full item stability matrix rather than empirical dimensions
Changes in version 2.1.0
CRAN release: 2024-11-09
ADD:
EGMandsimEGMfor model estimation and simulation of the Exploratory Graph Model, respectivelyADD:
EGM.compareto compare EGM against EFA for most likely data generating mechanismINTERNAL:
fitfunction 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.cduring CRAN’s install of the packageADD:
cosinesimilarity added as a default forauto.correlateand ‘corr’ arguments
Changes in version 2.0.7
CRAN release: 2024-09-02
FIX: mixed data with missing data in
network.predictabilityADD:
frobeniusnorm to compare networksADD:
network.comparefunction to test for differences in network structures using three different metrics (Frobenius Norm, Jensen-Shannon Similarity, total network strength)ADD: a general function called
informationto compute several information theory measuresUPDATE: default ‘loading.method’ for
net.loadshas been changed to “revised” moving forward – the previous default in versions <= 2.0.6 can be obtained using “original”UPDATE:
invariancehandles more than 2 groups (plots up to 4 groups pairwise)UPDATE: added ‘signed’ argument in
jsdto allow for signed or absolute networks to be used in computations (includes downstream functions:infoCluster)UPDATE: NEWS is now formatted in markdown
UPDATE:
network.predictabilityuses R-squared and mean absolute error (MAE) for all node predictionsINTERNAL:
network.generalizabiltywas moved to be internal (needs some work yet)INTERNAL: signs for
net.loadsuses the first eigenvector of the target network (rather than the customobtain_signsfunction)
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.qgraphFIX: bug when passing additional non-
dimensionStabilityarguments intobootEGAFIX: bug when printing
hierEGAsummary frombootEGAUPDATE: colors in
itemStabilityplots will match colors ofhierEGAplotUPDATE:
network.predictabilityuses empirical inverse variances (rather than network-implied)UPDATE: R-squared in
continuous_accuracyhelper uses Pearson’s correlation squared
Changes in version 2.0.5
CRAN release: 2024-03-15
FIX: ‘stroke’ parameter in
hierEGAthat broke with {ggplot2} updateADD:
network.predictabilityto predict new data based on a networkADD:
network.generalizabilityto 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.bootEGAwill outputitemStabilityplot by defaultUPDATE:
dimensionStabilityoutput now included inbootEGAas output$stabilityUPDATE: ‘rotate’ argument added to
infoClusterplot to allow for different angle of dendrogramDEPENDENCY: {fungible} is now ‘IMPORTS’ over ‘SUGGESTS’ for dependency in new loadings
DEPRECATED:
typicalStructureandplot.typicalStructurehave been deprecated toFALSE
Changes in version 2.0.4
CRAN release: 2024-01-22
FIX: plotting for
infoClusterwhen there are grey lines involved (or not)FIX: pass of multiple passes of
resolution_parametercausing an error in {igraph} 2.0.0 forEGA.fit(see issue #148)ADD:
community.compareto perform permutation test to determine statistical significance of cluster similarityUPDATE: moved
reindex_membershipsto helpersUPDATE:
reindex_membershipsused incommunity.homogenize
Changes in version 2.0.3
CRAN release: 2023-11-17
FIX: freed
edge.*arguments incompare.EGA.plotsto allow full customizationUPDATE: optimizations for speed and memory in
ergoInfoandboot.ergoInfoDEPENDENCY: swapped out {ggdendro} for {dendextend}
Changes in version 2.0.2
CRAN release: 2023-10-25
FIX: ties for max gain in
TMFGFIX: continuous variables with few categories that are treated as ordinal in
polychoric.matrixFIX: character input for
structureis 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_autoin 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.plotsoutputs$alland$individualfor the plotsUPDATE: when
structureis supplied forinvariance, then configural check is skipped (structure is assumed to be invariant)UPDATE: added data generation for
model = "BGGM"anduni.method = "expand"incommunity.unidimensionalDEPENDENCY: {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
*applyfunctions that are roughly equivalent to*applybut have stricter inputs/outputs (usesvapplyas foundation; often, slightly faster)ADD:
community.consensusto apply the Consensus Clustering approach introduced by Lancichnetti & Fortunato (2012). Currently only available for the Louvain algorithmADD:
community.detectionto apply community detection algorithms as a standalone functionADD: convenience function to convert an {igraph} object to a standard matrix (
igraph2matrix)ADD:
modularityto compute standard (absolute values) and signed modularity (implemented in C)ADD:
polychoric.matrixto 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.correlatenow 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.estimationto handle all network estimation in {EGAnet}; includes Bayesian GGM from {BGGM} for more seamless incorporation of BEGAADD:
community.unidimensionalto 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
ggnet2argumentsADD: 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.homogenizeas a core function rather than internal (previouslyhomogenize.membership); about 2.5x faster than the original versionADD:
convert2tidygraphforggraphandtidygraphsupport – 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
shuffleandshuffle_replaceto replacesamplewith 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
runifandsample); 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:
genTEFIto compute the Generalized Total Entropy Fit Index solely;tefiserves as a general function to compute TEFI for all*EGAclassesREMOVE:
signed.louvainuntil reproducibility can be sortedREMOVE:
methods.sectionandutils-EGAnet.methods.sectionto avoid space issues in ./R directory (1MB)UPDATE:
EBICglasso.qgraphandTMFGwere optimized;TMFGis now 2x fasterUPDATE:
TMFGcan 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.estimateandEGAcore functions have been updated for seamless use with more basic functionsnetwork.estimationandcommunity.*functionsUPDATE: S3method updates for
EGA.estimateandEGAto provide estimation informationUPDATE:
EGA.fitupdated to be compatiable with all updates toEGA.estimate(other optimizations were implemented such as direct communtiy detection application and unique solution finding)UPDATE:
tefiupdated with several checks (slightly slower for correlation matrix but much faster with raw data; includes data/matrix checks)UPDATE:
entropyFituses more effective vectorization (about 5-7x faster)UPDATE:
Embedandgllamade to be more efficient and includes an internalglla_setupfunction to avoid the same matrix calculations for every participant in a sample fordynEGAUPDATE:
riEGAupdated to be compatiable with all lower-level updates (slightly faster)UPDATE:
wtoupdated to be fully vectorized (about 12x faster)UPDATE:
totalCorandtotalCorMatupdated to be fully vectorized (about 10x faster)UPDATE: implemented internal
fast.data.framefor more efficient data frame initialization when all values in data frame are the sameUPDATE:
bootEGAallows 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.fitandriEGAadded tobootEGA(support forhierEGAwill be coming soon…)UPDATE:
itemStabilityhas 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:
dimensionStabilityhas been updated and maintains speed gains fromitemStabilityUPDATE:
dynEGA.ind.popnow callsdynEGAwithlevel = c("individual", "population"); legacydynEGA.ind.popclass is maintained across ergodicity functionsUPDATE:
ergoInfois about 2x fasterUPDATE:
jsdreceived several internal functions to expedite procedures ininfoClusterandjsd.ergoInfoUPDATE:
net.loadsnow 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.scoresis much simpler (internally) and quicker; seamlessly integrates withnet.loadsUPDATE:
compare.EGA.plotsis faster, more flexible, and more reliable for comparing two or more plotsUPDATE:
hierEGAis faster and has new S3 methodsUPDATE: S3 plotting for
invarianceUPDATE:
hierEGA+bootEGAintegration foritemStabilityanddimensionStability(includes full S3 methods)UPDATE:
UVAsupports 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:
tefinow handles allEGA*function objects includinghierEGAwhich 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
colortextand 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.loadswas leading to problems when there were negative cross-loadingsFIX: added
psych::factor.scoresscoring methods innet.scoresADD:
signed.louvainto estimate the Signed Louvain algorithm (implemented in C)
Changes in version 1.2.4
REMOVE:
residualEGAhas been removed in favor ofriEGA(removes {OpenMx} dependency)ADD: rotations to
net.loadsandnet.scoresUPDATE:
hierEGAonly 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:
bootEGAread of bootstrap data (was not calling fromdatalistindo.callleading 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 = TRUEfor categorical data in lavaan CFAsUPDATE: consesnsus clustering is now used with Louvain in
EGAUPDATE: print/summary S3methods have been standardized
ADD/UPDATE:
boot.ergoInfohas 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
infoClusterREMOVE: “alpha” and “adapt” options in
UVA(removes {fitdistrplus} dependency)REMOVE: {qgraph} plots are no longer available
ADD:
convert2igraphis now a core functionADD: Jensen-Shannon Divergence
jsdfor determining (dis)similarity between network strcuturesADD:
riEGA,EGA.fit, andhierEGAfunctionality tobootEGAADD:
hierEGAfunctionality toitemStabilityanddimensionStabilityUPDATE: “louvain” algorithm used as default for unidimensionality check in
EGAINTERNAL: cleaned up
EGAandEGA.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.estimatewhen using the TMFG network method. The resulting EGA plot did not have the correct node names.FIX: bug in
UVAwhen trying to use sum score (reduce.method = "sum") in automated procedureADD: measurement
invariancefunction for testing differences in network loadings between groupsUPDATE:
itemStabilitynow has a parameterstructurein which the user can specify a given structure to test its stability.ADD:
riEGAimplementing random-intercept EGA for wording effectsADD:
hierEGAimplementing hierarchical EGAFIX: consensus clustering for the Louvain algorithm
ADD:
louvainalgorithm 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
UVAwas changedtype = "threshold"UPDATE:
UVAis now automated usingauto = TRUEDEFUNCT:
dimStabilitywill no longer be supported. Instead, usedimensionStabilityREVAMP:
itemStabilityhas 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.fitplottingFIX: plotting parameters for
bootEGAFIX: redundancy output for adhoc check in
UVAFIX: latent variable with non-space separated entries in
UVA(reduce.method = "latent")UPDATE:
UVAwas added tomethods.sectionUPDATE: neural network weights in
LCT(now only tests for factor or small-world network models)UPDATE: citations
UPDATE: added
seedargument forbootEGAto reproduce resultsFIX: bug for Rand index in
itemStability
Changes in version 0.9.8
CRAN release: 2021-02-16
UPDATE: Unidimensional check in
EGAexpands a correlation matrix (rather than generating variables; much more efficient)ADD:
color_palette_EGANew EGA palettes for plottingggnet2EGA network plots (see?color_palette_EGA)ADD:
UVAor Unique Variable Analysis operates as a comprehensive handling of variable redundancy in multivariate data (see?UVA)DEFUNCT:
node.redundant,node.redundant.names, andnode.redundant.combinewill be defunct in next version. Please useUVAADD: a new function to compute a parametric Bootstrap Test for the Ergodicity Information Index (see
?boot.ergoInfo)ADD: basic Shiny functionality (
EGAonly)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:
bootEGAnow implements the updatedEGAalgorithmUPDATE: ega.wmt data (unidimensional)
UPDATE:
itemStabilityplot defaults (“GGally” color scheme) and examples (manipulating plot)ADD: total correlation (see
?totalCorandtotalCorMat)ADD: correlation argument (corr) for
EGA,bootEGA, andUVAFIX: GGally color palette when more than 9 dimensions
Changes in version 0.9.7
UPDATE:
LCTneural network weights were updated (parametric relu activation function)FIX: naming in
EGAFIX: output network matrix in
EGAwhen data are inputUPDATE: citation version
UPDATE:
node.redundantnow 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:
LCTupdated with neural network implementation
Changes in version 0.9.5
ADD: loadings comparison test function added (see
LCT)FIX: named community memberships in
itemStabilityanddimStabilityUPDATE:
plot,print, andsummarymethods all moved into single .R files (no effect on user’s end)UPDATE:
net.scoresglobal score is improved and computes scores very close to CFA scoresFIX: additional argument calls for
EGA.estimate(andEGAby extension)UPDATE: message from
EGA.estimate(andEGAby extension) reports both ‘gamma’ and ‘lambda.min.ratio’ argumentsFIX: upper quantile output from
bootEGAFIX: minor bugs in
node.redundant,itemStability, andnet.loads
Changes in version 0.9.4
MAJOR UPDATE:
dimStabilitynow computes proportion of exact dimension replications rather than items that replicate within dimension (this latter information can still be found in the output ofitemStabilityunder $mean.dim.rep)FIX:
net.loadsfor when dimensions equal one or the number of nodes in the networkFIX: naming typo with characters in
itemStabilityFIX: NAs in
dimStabilityFIX: weights of network in unidimensional structure of
EGAare the same as multidimensional structureUPDATE: Added a new function to simulate dynamic factor models
simDFMUPDATE: added internal functions for
net.loads(seeutils-net.loads)FIX: ordering of names in
itemStabilityFIX: handling of NA communities in
net.loadsUPDATE: Added output of the average replication of items in each dimension for
itemStabilityUPDATE: Revised ‘Network Scores’ vignette
UPDATE:
net.loadsfunctionality (cleaned up code)UPDATE: S3Methods for
net.loadsFIX:
net.scoresnegative 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.scoresvignetteUPDATE:
node.redundant.combinesets loadings equal to 1 when there are only two variables when the argument type = “latent”; warning also added from type = “sum”FIX:
node.redundantalpha 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.estimateto clean upEGAcode and allow for future implementations of different network estimation methods and community detection algorithmsupdated
EGAfunctionality: message for ‘gamma’ value used andEGA.estimatecompatiabilityremoved iterators dependency
ordering and name fix in
net.loadsauto-adjusts y-axis label size for
itemStabilityplot based on number of nodes or length of node namesnet.loadsadjusted for larger values using absolute values and applying the sign afterwardsreverse coding update in
net.loadsnode.redundant.combinebug fix for reverse coding latent variablesadded Louvain community detection to all EGA functions in EGAnet
functionality updates to
node.redundantswapped arguments ‘type’ and ‘method’ in the
node.redundantfunction (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.loadsoutputcorrected standard error in
bootEGAcitation update
added function
dimStabilityto 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