Graph Plotting Methods, Psychometric Data Visualization and Graphical Model Estimation

Weighted network visualization and analysis, as well as Gaussian graphical model computation. See Epskamp et al. (2012) .


Changes in Version 1.6.2

  • Fixed a bug in centralityPlot

Changes in Version 1.6.1

  • EBIC computation now uses the number of variables in the extra penalty, as opposed to the number of cases.
  • Removed old spelling errors left in for backward competability. The argument 'graph' must now be "cor" or "pcor"
  • Added three more AIC alternatives (thanks to Erikson Kaszubowski)

Changes in Version 1.6 o Major changes: o Removed several dependencies in order to start taking qgraph out of dependency hell: o The following functions have been removed: - qgraph.pca - - qgraph.sem - qgraph.semModel - qgraph.lavaan - qgraph.panel - qgraph.svg - qgraph.efa o The following functionality has been removed from qgraph: - tooltips - overlay - overlaySize o The Fruchterman Reingold layout has been changed. These changes will lead to a different layout to be returned now, but should prevent such disrepancies in the future. - The function has been translated from C to C++ using Rcpp - Results are now rounded in the algorithm. This should lead to more consistency in its results o centralityPlot now only shows node degree or strength by default o inlcude = "all" is now supported in centralityPlot to show all available centrality measures o Minor changes: o Fixed a bug in ggmFit, leading to the number of parameters and estimated graph structure to occasionally be wrong o Added 'res' to the allArgs list o Added 'node.label.offset' and 'node.label.position' arguments to control the position of node labels (thanks to mihaiconstantin) o Some small bugfixes o Fixed a bug leading to centralityPlot occasionally crashing o centralityPlot and clusteringPlot now support empty networks, and give an informative error when used on single-node networks o theme = "neon" is now supported

Changes in Verson 1.5.1 o Added a criterion argument to ggmModSelect to allow for other criteria to be used. o The centrality help page now correctly describes "InExpectedInfluence" and "OutExpectedInfluence"

Changes in Verson 1.5 o Added the 'flow' function to make flow plots o Fade now accepts numeric values, setting the exact fading (per edge) o Added theme = "gimme", defaulting to posCol = "red", negCol = "blue", parallelEdge = TRUE and fade = FALSE o Added the argument 'title.cex' o centrality() now also returns InExpectedInfluence and OutExpectedInfluence o The 'include' argument in centralityPlot and clusteringPlot can now also be used to re-order the facets of the plot. o Added the orderBy argument to centralityPlot() o Added the 'threshold' argument to 'EBICglasso', which can be used to threshold weak edges, ensuring high specificity. o EBICglasso will now return a warning for when a dense network is selected o Added the 'ggmModSelect' function, which can be used for unregularized GGM model search o ggmFit now treats absolute edges under sqrt(.Machine$double.eps) as zeroes o Fixed a bug where graph = "pcor" with threshold = "sig" required column/row names for the input correlation matrix

Changes in Version 1.4.4 o Fixed a bug in EBICglasso in which only nLambda = 100 was supported o EBICglasso now gives a warning if the densest (lowest lambda) network is selected o EBICglasso now gives a message if the empty network is selected o qgraph() now supports 'gamma' as alias for 'tuning' o qgraph() now has a lambda.min.ratio argument to control the same argument in EBICglasso o Fixed a bug in which pie charts were not drawn with > 50 nodes o Re-enabled support for BDgraph o qgraph no longer warns for when using hidden arguments in semPlot

Changes in Version 1.4.3 o Fixed a bug in which 'curveScaleNodeCorrection' defaulted to FALSE instead of TRUE o qgraph() now gives a warning if the user uses a not-documented argument. o Fixed a bug in computing baseline DF of ggmFit o ggmFit now has an argument for number of parameters o Fixed a bug in computing baseline chi-square of ggmFit o ggmFit now scales pcor matrix to match diagonal of var-cov matrix rather than diagonal of inverse var-cov matrix o Using EBICglasso with returnAllResults now returns 'optwi' as well

Changes in Version 1.4.2 o centrality_auto no longer outputs igraph messages to the console o Added theme option "gray" for grayscale figures o Automatically makes negative edges dashed o Added 'negDashed' argument to make negative edges dashed o bootnet getWmat method now takes signed and weighted into account o Centrality functions now have arguments weighted and signed to compute centrality based on the signed or unweighted graph o Fixed a bug with refit = TRUE

Changes in Version 1.4.1 o Added 'curveScaleNodeCorrection' argument o Added 'palette' and 'theme' functions o Colorblind mode is now supported with theme = "colorblind" o label.color can now be NA, which will make the label white if the average of RGB colors of the node is less than 0.25 * 255 o Added ggmFit function (moved from lvnet), which computes fit measures of a GGM network based on Lavaan. Results are comparable to lavaan if lavaan results are estimated on a covariance matrix. o Added 'refit' argument to 'EBICglasso' and 'qgraph'. If set to TRUE the optimal EBIC glasso network is refitted without LASSO regularization

Changes in Version 1.4.0 o Added the 'pathways' function to highlight shortest paths between sets of nodes o In collaboration with Adela M. Isvoranu o Added functionality to draw pie graphs as node shape. o New arguments: 'pie', 'pieColor', 'pieColor2', and 'pieBorder' o In collaboration with Jonas Haslbeck o The label.cex argument can now be used in combination with label.scale = FALSE o Edge and node labels are now properly centered o EBICglasso now acts as alias for graph argument o The 'graph' argument in 'qgraph' now gives an error if it is assigned with an unsupported option

Changes in Version 1.3.5 o The label.cex argument now defaults to 1 if label.scale = FALSE o The label.scale.equal argument now can be set to TRUE to make all labels scale equally to the largest cex such that the longest label fits. o Can alternatively be a factor or numeric vector indicating which groups of nodes whould have the same label shape o Fixed a bug with betweenness computation using pkg = "igraph" argument in centrality() o The 'centralityPlot' and 'clusteringPlot' now use an argument 'scale' to set the scale of the x-axis, and print a message when this scale is z-scores or relative. o The 'shape' argument can now be used with subplots o getWmat now supports 'bootnetResult' objects o Fixed a bug with as.igraph not working if there is only 1 edge o Added 'smallWorldIndex' function to compute smallworldness of unweighted graph o Added arguments 'label.fill.vertical' and 'label.fill.horizontal' to 'qgraph' o Apparently skipped over version 1.3.4

Changes in Version 1.3.3 o The 'lambda.min.ratio' of 'EBICglasso' now defaults to 0.01 instead of 0.1, similar to earlier versions of qgraph. This will cause EBICglasso and qgraph(..., graph = "glasso") to potentially return less sparse models! o Added 'countDiagonal' argument to qgraph, EBICglasso and EBIC, so that behavior of older versions of qgraph can be mimicked. o Fixed a bug when computing average weights matrix with network that only has negative edges o Added 'means', 'SDs' and 'meanRange' arguments to qgraph(). These can be used to plot bars inside nodes indicating the means and variances of the nodes. o Added two new options for the 'legend.mode' argument in qgraph(): "style1" (default) and "style2", which use information from both the 'groups' and the 'nodeNames' arguments to plot the legend.

Changes in Version 1.3.2 o Solved an issue with bg = TRUE resulting in small white borders around background pixels o centralityTable and clusteringTable now appropriately call melt from the reshape2 namespace o cor_auto now suppresses warnings o Added 'background' argument to qgraph() o qgraphGUI now links to shiny app o centrality() can now use igraph for faster computations o qgraphAnnotate now works on Windows o Added the makeBW function to plot a network that can be understood also in black and white or grayscale. Thanks to Giulio Costantini!

Changes in Version 1.3.1 o 'sendplot' package moved from imports to suggests list. o Added the function 'qgraphMixed' which is designed to plot graphs that contain both undirected and directed edges. o Added the 'repulsion' argument to averageLayout o Added the 'verbose' argument to cor_auto o Added the 'penalizeMatrix' argument to EBICglasso o Fixed a bug with non-ACSII labels o Fixed bug in clusterinPlot when sd = 0

Changes in Version 1.3 o New Features o The 'minimum' argument can now be set to "sig" when graph = "association" (correlation network) or graph = "concentration" (partial correlation network). This will set minimum to the value from which correlations become significant. Use 'alpha' and 'bonf' arguments to control significance level. Note that this value is just as arbitrary as any other value for 'minimum'. Also, as usual with the 'minimum' argument the result is only graphical; edges are not omitted but merely not shown. This is important in calculating centrality measures. o Added the 'threshold' argument which can be used to REMOVE edges under a certain threshold. This argument can also be used to remove non-significant edges in correlation and partial correlation networks. Note that this is different from 'minimum' in that 'minimum' only works graphically and does not display edges while 'threshold' literally removes them. Thus, 'threshold' can be used for model selection where 'minimum' can not, and they result in different spring layouts and centrality measures. o Added the 'repulsion' argument, which is a shortcut to specify layout.par = list(repulse.rad = nNodes^(repulsion * 3)). This argument can be used to easily scale the repulsion used by the fruchterman reingold algorithm o Added the 'findGraph' function that uses brute, stepup and stepdown model search to find an optimal correlation or partial correlation network according to EBIC. This is only recommended for small networks; for larger network EBICglasso should be preferred. o Added qgraphAnnotate function to create a HTML file with tooltips.

o Major changes o The EBIC-glasso method no longer penalizes the diagonal of the precision matrix nor does it include these diagonal values in the number of nonzero parameters used in the EBIC. This results in DIFFERENT graphs, that are overall sparser. o The default for the 'graph' argument is now "default" rather than "association". "association" now checks if the input is a correlation matrix, and will run cov2cor. This means that covariance matrices can now be used for "association", "concentration" and "glasso" graphs. o The 'graph' argument can now be assigned "cor" or "pcor" as alternatives to "association" and "concentration" respectively. o Checks for positive definiteness are now built into qgraph(), cor_auto() and EBICglasso(). The nearPD function of Matrix will be used when appropriate. o 'minimum' now defaults to 0 regardless of graph size. o centralityPlot/Table and clusteringPlot/Table now return standardized measures by default. o cor_auto() now uses pairwise observations rather than listwise. The "missing" argument controls how missing data is handled. o EBICglasso gamma now defaults to 0.5 to be in line with qgraph(..., graph = "glasso")

o Minor changes / bug fixes: o Added 'noPar' argument, which disables the internal par() call. This is needed when using qgraph in the subplot functionality. o Fixed a bug causing tooltips to be unusable with filetype = "svg" o Fixed a bug using an expression for labels. o 'cut' can now be set to NA to mimic cut=0 o Several small bugfixes o clustcoef_auto now returns labels as rownames

Changes in Version 1.2.5 o Changes in default behavior: o The default for the 'cut' argument has significantly changed. Instead of using a static value of 0.3 the cut value is now adapted to the edge weights present in the graph. It is now chosen such that the number of edges above cut is equal to two times the number of nodes, or 25% of all edges. o esize now makes edges larger in small graphs and about the same in larger graphs. o vsize now makes nodes larger in small graphs and smaller in large graphs. o asize is now a bit larger in small graphs. o Graphs should now be somewhat zoomable in flexible graphical devices such as RStudio zoom button. However, this is still not recommended. See 'usePCH' argument documentation for details.

o New features: o Added the function 'EBICglasso' which will compute a sparse partial correlation matrix using glasso and EBIC criterium. o Added option to 'graph' argument in qgraph(). Setting graph = "glasso" will automatically call EBICglasso. This makes use of the new 'sampleSize' and 'tuning' parameters. o Packages glasso and huge are now supported. o Added 'centralityPlot', 'centralityTable', 'clusteringPlot' and 'clusteringTable' functions to facilitate interpretation of centrality and clustering statistics. o Added 'averageLayout' to compute the average layout of multiple graphs. o Added cor_auto function which automatically detects ordinal variables in a dataset and computes an appropriate correlation matrix using Lavaan's lavCor. o Added VARglm function for estimating VAR models using GLM.

o Changes: o Updated qgraph help page and examples

o Bug fixes: o Fixed a bug where curved edges became indented between two large, close nodes. o Fixed a bug when using overlay with groups consisting of only one node.

Changes in Version 1.2.3 New features: o New graph analysis functions added by Giulio Costantini: o 'centrality_auto' o 'clustcoef_auto' o 'smallworldness' o 'clustOnnela', 'clustZhang', 'clustWS', 'mat2vec' o Added 'parallelEdge' and 'parallelAngle' arguments. Set parallelEdge = TRUE to obtain parallel straight edges rather than curved edges. o Added 'edgeConnectPoints' argument. This argument specifies the point for each edge to which it connects to a node, in radians. Can be either a matrix with a row for each edge and two columns: The first column indicates the connection point of the source of the edge and the second column specifies the connection point of the destination of the edge. Can also be an array with a row and column for each node two slices which indicate the source and destination of the edge connecting the two nodes o 'arrowAngle' now defaults to pi/6 for weighted graph instead of pi/4. o Edges are now drawn only to the start of arrows instead of to the edge of nodes regardless of if there is an arrow. o Added the argument 'label.font' which can be used to specify the font of node labels. o Added the argument 'edge.label.font' which can be used to specify the font of edge labels. o Added the argument 'font' which can be used to set both node and edge label fonts. o Added the 'edge.width' argument that scales both 'esize' and 'asize'. Making it easier to make both edges and arrows larger. o Added 'node.width' and 'node.height' arguments that scales 'vsize' and 'vsize2'. o BDgraph is now supported. o bnlearn is now properly supported o Added 'title' argument. o Added preExpression and postExpression arguments

Changes: o Added internal function 'drawEdge' which draws the edge. This function can be used similary to arrows() in any plot. o Edges representing p-values of exactly 0 in mode="sig" graphs are now represented by the strongest possible positive edge. o The functionality of using * in labels to plot the label in symbol font has been removed as this is now possible by using either an expression as label or by setting the font manually to 5. o Graphical arguments in the qgraph help page have been grouped in subcategories. o The midpoint of curved edges is now based on the centers of nodes o qgraph.animate now returns a list of graph objects o qgraph.animate now smoothes layout position per frame by default

Bugfixes: o XKCD easter egg works once again o Fixed a bug where edge labels could not be assigned using a matrix.

Changes in Version 1.2.3 o Maintainer e-mail changed to [email protected] to be in line with other packages maintained by me

o Major changes: o centrality() now also makes weights positive in computing in and out degree o bnlearn and bn.strength classes are now supported o Added edge.label.position argument. If an edge has a label its source is now rescaled when its destination is rescaled to keep the middle of the edge correctly

o Minor changes: o Graphs now only default to unweighted if all entries are either 0 or 1 o residScale is now normalized o border width can now be varied per node o Evaluation of subplots now uses the global environment for lookups o The 'labels' argument can now be used with pcalg input o Background color can now be transparent o Added subpars argument to pass 'par' arguments to sublots o Added argument 'subplotbg' to control the background of subplots o numeric edge labels now converted to characters o Centering with aspect is TRUE now only looks at the range of x and y coordinates, placing the graph more to the center o Self-loops are now removed in centrality() o Machine tolerance is now taken into account when testing if an input matrix is symmetrical. Because of this, correlation matrices computed with cov2cor no longer need to be rounded o If the par("bg") color is "transparent" the background is set to "white" instead of "transparent" o filetype argument no longer supports 'x11'

o Bug fixes: o Edge labels of '' will now not plot a background. o Fixed a bug where 'lty' was not working correctly when edge lists with weights of zero where used as input. Reported by Laura Bringmann. o as.igraph works again o Fixed a bug causing background on edge labels not to be plotted when edge.labels = TRUE o Fixed bug with edge.labels = FALSE o Node color on transparent background now default to white instead of transparent o Fixed a bug where in qgraph.animate where no default arguments could be passed anymore o Fixed a bug where edge labels could not be expressions o curve entries for edges of weight 0 are now correctly removed

Changes in Version 1.2.2 o New features o Added functionality to draw bars inside nodes (e.g., how semPlot shows thresholds). Note that this is not intended to be used as shading lines, which will be added in a future version. See the qgraph help page for a description of the new arguments 'bars', 'barLength', 'barColor', 'barSide' and 'barsAtSide'. o Added 'curveScale' argument: Logical, should curve scale with distance between nodes. Defaults to TRUE. If FALSE, the curve can be exactly determined. Recommended to set to TRUE for graphs and FALSE for diagrams. o Using a matrix with relative positioning of nodes (grid layout) can now also be assigned characters of the node labels. e.g., assigning matrix(LETTERS[1:4],2,2) to 'layout' will place node labeled "A" at top left and "D" at bottom right. Use NA rather than 0 in all other positions. o Added 'pastel' argument for pastel colors o Added 'rainbowStart' argument to control the start of rainbow functions o Added 'nodeNames' argument, which can be used to make a legend based on node labels for every node. o Added 'legend.mode' argument to indicate if legend should be based on groups or node names. o Added support for custom node shapes using polygons. The polygonList argument can be used to add polygon shapes to the lookup table of the shape argument. o By default this list includes the shapes "ellipse", "heart" and "star"

o Major changes o INTERNAL CHANGE IN QGRAPH o A change has been made to the qgraph internal representation. First, qgraph() computed quite some parameters for the graph, then used them to plot and finally created an output model containing the arguments that allowed the plot to be plotted again. Now, qgraph() creates a model, and plot.qgraph() plots it (by default, plot.qgraph is now called at the end of qgraph()). o Because of this, every aspect of a graph can now be manually changed between running qgraph and plotting the output (use DoNotPlot to ignore plotting the first run). o Currently this is implemented simply by storing all values in qgraph() that are used in plot.qgraph, in a future function some of the arguments from qgraph will be moved to plot.qgraph to make a more natural distinction between plotting arguments (such as filetype) and arguments that control the graph.

o Minor changes o minimum is now taken into account in automatically curving edges. Edges are only automatically curved if multiple edges between two nodes actually show up in the graph. o Node and edge labels can now be assigned using a list. o graphNel objects can now result in undirected graphs. o pcalg objects will now result in mixed graphs. o Legend placement now takes the 'mar' argument into account. o The 'aspect' argument now also works for non-square plotting areas o The default rotation of selfloops now point away from the center of a group only if that group contains at least two nodes (rather than one)

o Bugfixes o Fixed a bug where tooltips could not be plotted with filetype='svg'. Tooltips now no longer require labels as well. o Using the filetype argument in combination with a legend (or filetype='svg') will now once again create a larger plotting window such that the graph is plotted in a square window. o Legends are now also plotted when plotting a graph of significance values with no groups specified.

Changes in Version 1.2.1 o Curved edges can now be displayed as mostly straight edges what run parallel. This can be done using the new argument 'curvePivot'. See documentation of 'qgraph' for more information. o Shape of curved edges can now be controlled with 'curveShape' and 'curvePivotShape'. o The start of edges is now also reset to the edge of nodes if the destination of the edge is also reset. This will cause that bidirectional edges now look the same as directed edges. o Fixed a bug where graphs with a single edge were unable to plot edge labels. o jpeg package is now used to read jpeg files.

Changes in Version 1.2 o NEW MAJOR FEATURES: o Support added to include R plots as nodes. This can be done with the 'subplots' argument, which takes a list of R expressions that create a plot when evaluated. The 'subplot' function in the R package Hmisc is used to create the subplots. o Added the 'images' argument which can be used to plot png and jpeg files as node images. o Added knots, knot.size, knot.color, knot.borders, knot.border.color and knot.border.width arguments that allow tying edges together at their center. o igraph support added: o the as.igraph function converts a qgraph object to an igraph object o igraph layout functions can now be assigned to the layout argument in qgraph(). The layout.par function can be used to specify arguments to the function. o Edge color specification o Added argument for controlling default positive edge color: posCol o Added argument for controlling default negative edge color: negCol o Added argument for controlling default unweighted edge color: unCol o Custom colors now fade to the background color if fade=TRUE. o Edge colors can now be overwritten for specific edges. If edge.color is a vector, NA indicate the edge color is determined by default o Defaults added. The options "qgraph" can be assigned a list with default arguments for qgraph(). o qgraph plots are now normalized across different sizes of the plots if the argument 'normalize' is set to TRUE (the default). Many arguments are normalized to the diagonal of the plot region so that the same result is obtained

o NEW MINOR FEATURES: o 'shape' can now be set to 'rectangle' o Added 'vsize2' argument to control the vertical size of nodes if shape is 'rectangle'. o Added 'label.prop' argument to control the relative width of labels to the width of nodes o Labels are no longer coerced to characters, this means that expressions can now also be used for labels o Added 'label.cex' argument to scale the node labels o Added 'border.width' argument to control the border width. o 'color' can now be assigned 'background', which will transfer the background color to the node. This is now the default o added XKCD easter egg, use XKCD = TRUE!

o CHANGES: o Many internal changes to facilitate the new 'semPlot' package. o The functions qgraph.loadings, qgraph.sem and qgraph.lavaan will soon become deprecated. o Several change to how curves work in qgraph: o the midpoint of curved edges is now set using the inner function PerpMid. This function now consistently finds a midpoint perpendicular to the edge regardless of shape of the plot in inches. o Added 'curveDefault' argument and some changes to 'curve' argument. 'curveDefault' now controls the default curvature (1 by default). If 'curve' is NA the default curvature is used (curved edges if there are multiple edges between two nodes). If 'curve' is of length 1 it overwrites 'curveDefault' for backward compatibility. o 'curveAll' argument added. This argument controls if all edges should be curved or only edges of nodes with multiple edges between them. o Multiple edges between nodes are now curved uniquely for each edge by default.
o The 'curve' argument now scales the distance between the midpoint of an edge and the midpoint of the curved edge proportional 2.5% of the diagonal size of the plot in inches. o For more consistency in argument names 'border.colors' has been renamed to 'border.color' and 'lcolor' has been renamed to 'label.color' o non-finite weights are now set to zero and omitted o Improved the scaling algorithm of the labels. Labels now scale properly to 75% of the width of a node. o larger nodes are now plotted on top of smaller nodes. o Borders are now plotted at the same level as node colors. This means borders will no longer overlap overlapping nodes. Labels will still overlap overlapping nodes to increase readability o Edge ends are now replaced if the node is partly transparent, which is no longer based on vTrans o 'label.color' and 'border.color' now default to 'white' if the mean color (rgb) is higher than 0.5 o 'color' now defaults to the background color. o trans now once again only defaults to TRUE if bg=TRUE. o Argument lists can now be nested. Lower level arguments take precedence over higher nested arguments. o Midpoint of straight edges for placing edge labels is now based on the center of the edge, not on the center between the two connected nodes. o Edge labels are now plotted only for visible edges o 'transparency' now defaults to FALSE if 'bg' is a color other than 'white' o 'transparancy' is now matched by trans argument as well o The background of edge labels is now the same as the background color by default o Edge labels are now colored the same as the edge by default

o BUG FIXES: o Fixed a bug where bidirectional edges where plotted twice o Fixed a bug where edge labels caused an error if all edge weights are zero o Fixed a bug where bidirectional edges were not stored properly o Fixed a bug where edge colors incorrectly returned an error stating the length was wrong o Fixed a bug where incorrect edge labels where placed on edges. o Fixed a bug where specifying the wrong number of edge labels resulted in an error o Fixed a bug where border colors weren't repeated for all nodes. o Fixed a bug in Cent2EdgeNode not restoring mar, it can now be called outside of qgraph o Fixed a bug where the midpoint of curved lines where not perpendicular to the midpoint between two nodes in non-square plotting areas

Changes in Version 1.1.0 o MAJOR CHANGES: o FIRST VERSION OF GUI INCLUDED, call qgraph with gui=TRUE or use qgraph.gui(). o Selfloops have been reworked through the internal function SelfLoop() and should now look much better. Can now be rotated using the loopRotation argument. The loop argument for controlling the size is currently defunct.
o Method for moving beginning and end of edge to the edge of nodes has been reworked through the internal function Cent2Edge(). This should now be much more stable, and no longer be bugged if a graph is plotted with margins. o MINOR CHANGES o Some internal changes to facilitate the upcoming semPlot package ( o Added 'residScale' and 'residEdge' arguments to qgraph() o Added 'residuals' argument to qgraph(). If TRUE, selfloops are plotted as residuals with no origin. o Fixed issues with margins when plot=FALSE o Fixed dimensionality issues of arrowheads. o Improved default arguments for 'esize'. Now sets to 2 if the graph is unweighted and halfs the default value if graph is directed. o Fixed outdated information in the qgraph help page on specification of layout argument. o Several small bugfixes

Changes in Version 1.0.5-2 o Removed tikzdevice option due to removal from CRAN. Please see for details.

Changes in Version 1.0.5 o Fixed a compatibility issue with the most recent version of Lavaan (0.4-14)

Changes in Version 1.0.4 o Added reference to JSS paper. o The name of the author in several function Rd pages has been changed to reflect my new e-mail address.

Changes in Version 1.0.3 o Added the 'aspect' argument to qgraph. Set this to TRUE to keep the aspect ratio of the original layout (e.g. result from layout="spring"). o Fixed a bug where an unweighted graph object would be plotted as a weighted graph in consecutive calls. o Fixed issues with the "centrality" function in combination with bidirectional edges.

Changes in Version 1.0.2 o Fixed a bug in with using a tuning parameter of 0 in centrality() o Fixed a bug with the arrows not being plotted properly when using a layout and non-square plotting area o Fixed a bug where qgraph() failed on graphs with 10 or more nodes when using a "pcalg" object as input

Changes in Version 1.0.1 o Fixed a bug with using the 'directed' argument as a matrix.

Changes in Version 1.0.0 o Because this was already the case for imported packages, qgraph is now Byte-Compiled and depends on R version 2.14. o Added the centrality() function to compute node centrality statistics. o It is now possible to manually set the edge width and color. See the added section on this in the qgraph help page. o Added the arguments 'layoutScale' and 'layoutOffset' to qgraph(). These can be used to define the coordinates range of the graph. o Changed the way qgraph.panel() works. Instead of partitioning the plot in 4 sections with layout() the function now makes only one plot containing 4 graphs. This should fix all issues with the partition persisting after using this function. o If qgraph.efa() or qgraph.pca() is used on a dataset with 20 or less variables the variable names (abbreviated to 3 characters) is used as label for the nodes.

Changes in Version 0.5.3 o The labels argument now attempts to extract label names from the adjacency matrix for small graphs (<= 20 nodes) o With legend=TRUE a check is now made to see if the groups list is not NULL. Else legend=FALSE is forced o Legends are now plotted in the same window of the graph instead of a separate plot window. This should fix many issues with plots remaining partitioned after running qgraph as well as allow users to incorporate legends in partitioned plots. o Fixed issues with the legend of the scores argument. This should now work as expected. o Fixed issues with the qgraph.svg() function. This should now work again. o Significantly changed the qgraph() help page. It should now be much clearer. o Fixed an issue where lavaan objects with a mean structure would result in an error when using qgraph.lavaan(). Mean structure is now ignored in qgraph.lavaan(). o Changed the first argument of qgraph from 'adj' to 'input'. The help files no properly mention Weights matrices instead of Adjacency matrices.

Changes in Version 0.5.2 o This version was aimed at fixing compatibility issues with sem 2.0.0

Changes in Version 0.5.1 o Fixed some minor bugs o Fixed issues with the qgraph.lavaan() function o Added the qgraph.animate() function for animating network growth and change! Check out its help page for more details. o Fixed bugs with arbitrary small networks. Such as single node networks, networks with no edges, and layouts with no variance in x or y coordinates.

Changes in Version 0.5.0 o Graphs containing only one node can now be plotted o Fixed a bug that caused weird arrows and wrong graph shapes if one of the opened windows contained a graph with a legend o Added "x11" and "X11" as options for the filetype argument, useful for use with Rstudio o qgraph() now exits with previous par() settings restored. o Removed 'pcalg' from the suggests list because it is not actually used in qgraph and gave errors in R CMD CHECK

Changes in Version 0.4.9 o Fixed a critical bug in making svg images o The legend now takes less space by default. o Added the argument 'GLratio' to qgraph() which specifies the relative size of the graph compared to the layout. o 'legend.cex' now defaults to 0.6 o qgraph.panel() now omits the legend by default as it could not handle legends anyway. o qgraph.panel() now uses better options for the layout of the factorial graph o Fixed a bug in qgraph.sem() causing the spring layout to malfunction. o Added proper references for the big 5 data

Changes in Version 0.4.8 o The 'groups' argument can now be assigned a factor as well as a list. o should now correctly call only the sem package version of sem(). o In qgraph.sem(), connections between variables at the same level (e.g. regression among factors) can now be curved in the circular layout. o Similar to 'directed', the qgraph() arguments 'curve', 'lty' and 'bidirectional' can now also be supplied in matrix form. o can now also use the lavaan package o now has a 'pkg' argument indicating which package should be used for estimation. Defaults to "sem" and can also be "lavaan" o Added the qgraph.lavaan() function which creates an output document to the results of a lavaan fit simulair to what qgraph.sem() does for the sem package o Arguments in the qgraph() help file are now divided into multiple sections o Added the argument 'overlay' to qgraph(). Set this to true to plot a venn-diagram like overlay over the graph. o Several packages are now imported rather than suggested/depended o New feature: Significance graphs: o qgraph() can now be used to plot significance levels (p-values). To do this set mode="sig". This will result in a graph in which two nodes are connected if p<0.05. Different shades of blue indicate different levels of significance. A Bonferonni correction can also be applied. Also works with gray=TRUE.
o Added the argument 'mode' to qgraph() which specifies what the edge weights mean. Currently this can be "strength" (default) or "sig" (see below) o The 'graph' argument in qgraph() can now be set to "sig" or "significance". If so, the p-value for each correlation is calculated (using the fdrtool package), and a significance mode graph is made. o The bonf' argument in qgraph() can be set to TRUE to apply a Bonferonni correction by multiplying all p-values by the number of p-values o Thealpha' argument in qgraph() can be used to set significance levels of interest o The OmitInsig' argument can be used to omit all correlations/p-values with a p-value above the lowest value inalpha'. o Using OmitInsig = TRUE' andgray = TRUE' with a correlation matrix will create an unweighted graph in which only significant correlations are connected. o Using edgelists as input for qgraph() can now also be done with a dataframe and contain characters. These characters will be used as edge labels o qgraph() now also moderately supports "graphNEL" objects (Rgraphviz) and "pcAlgo" objects (pcalg). See examples.

Changes in Version 0.4.7 o Added the function, which performs a confirmatory factor analysis using the sem package o Fixed a bug in qgraph.sem() causing faulty path diagrams if nodes were labeled numerically o Fixed a bug in qgraph() causing misplaced edge labels if some edges are bidirectional o The 'rotation' argument is removed from qgraph.sem() because it should no longer be necessary o The "circle" layout is now default in qgraph.sem() o Added the 'gray' argument to qgraph(). If this is TRUE the graph will be plotted in gray-scale colors.

Changes in Version 0.4.6 o New features: o Added more options for the 'directed' argument. When using an edgelist this can be a vector indicating per edge if it is directed or not. If an adjacency matrix is used then this can be a matrix indicating if the element indicates a directed edge. o the output of qgraph() now also contains the edgelist. Running qgraph() on the output of another qgraph() run should now give exactly the same graph. o Added three functions for S3 methods: print.qgraph(), summary.qgraph() and plot.qgraph(). o qgraph() now calls qgraph.loadings(), qgraph.efa(), qgraph.pca(), qgraph.sem() and qgraph.semModel() if the first argument is respectively of class "loadings", "factanal", "principal", "sem" and "mod". o Added the 'DoNotPlot' argument to qgraph(). If this is TRUE then nothing will be plotted, but the graph will still be returned as usual. o qgraph.layout() has been removed since the 'DoNotPlot' argument makes it redundant. o Updated examples with big 5 data. Examples are now also executable using example(qgraph). o qgraph.loadings() and its wrappers qgraph.efa() and qgraph.pca() have been revamped: o Residuals can now be plotted in qgraph.loadings() using the 'resid' argument. qgraph.efa() includes residuals by default. o Inter-factor correlations can now be plotted using the 'factorCors' argument. o qgraph.loadings() now runs faster and results in smaller PDF file sizes. o qgraph.loadings() now uses "circle" layout by default. o A "loadings" object can now be passed to qgraph.loadings(), a "factanal" object to qgraph.efa() and a "principal" object to qgraph.pca(). o Minor changes to qgraph.sem(): o New function added: 'qgraph.semModel()'. This function makes a path diagram based on a sem model. o New argument added to qgraph.sem(), 'panels', which can be assigned a vector indicating which panels should be plotted. o 'filetype' can now be anything but "pdf" to use qgraph.sem() to plot in R. o Bug fixes: o Fixed a bug that caused edges to be plotted several times in directed graphs. o The qgraph() function should now be significantly quicker. o Fixed an issue causing placement of edges to assume a square node as origin.

Changes in Version 0.4.5 o Added the Big 5 dataset. o layout.orig is now returned as well as layout. This is the original layout (not rescaled) which can be used for constraints o in 'qgraph.loadings' nodes are now reordered if the factors can be identified o Added the 'vTrans' argument, which can be used to make nodes transparent. o Fixed a critical bug resulting in oversized edges if the largest absolute edge weight is negative

Changes in Version 0.4.4 o Weights are now divided by the 'maximum' when computing the fruchterman-reingold layout. o Fixed an issue causing loops to become too large o Fixed an issue causing diag="col" assignment to also create loops o 'directed' now defaults to TRUE if an edgelist is used as input in 'qgraph' o Fixed a bug with the spring layout and groups list o The nfact argument now defaults to the amount of eigenvalues greater than 1 or the length of the groups list. o Using layout="circle" in qgraph.loadings should now generate a better looking layout. o 'width' and 'height' are now automatically adjusted to the size of the opened device.

Changes in Version 0.4.3 o Fixed a bug in the 'tooltips' argument in qgraph. o Fixed a bug with numeric assignment for the 'arrows' argument on curved lines o By default lines are now only curved if there is no other edge with a weight over the minimum between the two nodes instead of if there is any other edge between the two nodes. o Greek labels are now identified by using sapply rather than a for-loop. o Added 'tex' as filetype. Graphs can now be output in a .tex format using the 'tikzDevice'. The .tex file can then be build in LaTeX compilers. o The 'tooltips' argument can now also be used for filetype='tex' o Replaced the use of 'windows' function with the '' function. This should fix problems with the default output on platforms other than Windows. o By default, a new R window is now only opened if the active device is the NULL-device. o Added the 'qgraph.panel' function. Which creates a 4-panel plot with useful default graphs for correlation matrices.

Changes in Version 0.4.2 o Changed the standard output in R to fixed width windows (windows(rescale="fixed"...). o Fixed a spelling error in the authors. o Minimum and maximum details moved slightly to the center. o Fixed a bug in identifying the factors in 'qgraph.loadings' o Extended and improved the examples of the qgraph.efa, qgraph.pca and qgraph.loadings functions. o Changed qgraph from depending to suggesting the psych, sem and RSVGTipsDevice packages. This enables 64bit users to install the complete package o Similar to 'qgraph', 'qgraph.loadings' 'qgraph.efa' and 'qgraph.pca' now also return (invisible) a list of class "qgraph" containing the arguments. o Removed scaling of the sizes of arrow heads, and added the argument 'asize' to control arrow head size. o Added a new function, 'qgraph.arrow' which will be used to draw the arrowheads instead of 'arrows'. This enables closed arrowheads (by default) as well as better optimization for pdf output.

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.


1.9 by Sacha Epskamp, 2 months ago

Report a bug at

Browse source code at

Authors: Sacha Epskamp [aut, cre] , Giulio Costantini [aut] , Jonas Haslbeck [aut] , Adela Isvoranu [aut] , Angelique O. J. Cramer [ctb] , Lourens J. Waldorp [ctb] , Verena D. Schmittmann [ctb] , Denny Borsboom [ctb]

Documentation:   PDF Manual  

Task views: Psychometric Models and Methods, gRaphical Models in R

GPL-2 license

Imports Rcpp, methods, grDevices, psych, lavaan, plyr, Hmisc, igraph, jpeg, png, colorspace, Matrix, corpcor, reshape2, ggplot2, glasso, fdrtool, gtools, parallel, pbapply, abind

Suggests BDgraph, huge

Linking to Rcpp

Imported by C443, CliquePercolation, ConNEcT, EGAnet, EcotoneFinder, EstimateGroupNetwork, IATscores, IMEC, IsingFit, NetworkChange, NetworkComparisonTest, NetworkToolbox, SemNeT, bnmonitor, bootnet, diveRsity, elasticIsing, gimme, graphicalVAR, hilldiv, isobxr, lvnet, mgm, mlVAR, modnets, networktools, networktree, pompom, powerly, psychonetrics, semPlot, text2map, veccompare.

Suggested by CovCombR, GGMncv, GGMnonreg, MultiFit, R6causal, RSA, RcmdrPlugin.pointG, bmlm, bnstruct, eff2, gms, pcFactorStan, textplot.

See at CRAN