1 Picking a Chart Type

https://www.data-to-viz.com

3 Resources for Learning R Syntax for Figures

https://www.statmethods.net/graphs/index.html

http://www.cookbook-r.com/Graphs/

4 Petersen Lab Examples

https://research-git.uiowa.edu/PetersenLab/R-Plotting/-/tree/main/Analyses

5 Font

You can download the lab fonts for figures here1: https://drive.google.com/drive/u/0/folders/1fqlrnEe7NFnWZoIrsHmr8ulDS4nhs-H3

5.1 Preamble

5.1.1 Install Libraries

Code
#install.packages("remotes")
#remotes::install_github("DevPsyLab/petersenlab")

5.1.2 Load Libraries

5.2 Simulate Data

Code
set.seed(52242)

n <- 1000

predictor <- rbeta(n, 1.5, 5) * 100
outcome <- predictor + rnorm(n, mean = 0, sd = 20) + 50
number <- sample(1:1000, replace = TRUE)

predictorOverplot <- sample(1:50, n, replace = TRUE)
outcomeOverplot <- predictorOverplot + sample(1:75, n, replace = TRUE)

df <- data.frame(predictor = predictor,
                 outcome = outcome,
                 predictorOverplot = predictorOverplot,
                 outcomeOverplot = outcomeOverplot)

df[sample(1:n, size = 10), "predictor"] <- NA
df[sample(1:n, size = 10), "outcome"] <- NA
df[sample(1:n, size = 10), "predictorOverplot"] <- NA
df[sample(1:n, size = 10), "outcomeOverplot"] <- NA

5.3 Line

Code
plot.new()
lines(
  x = seq(from = -10, to = 10, length.out = 100),
  y = seq(from = -25, to = 25, length.out = 100))

5.4 Curve

Code
curve(x^3 - 3*x, from = -2, to = 2)
curve(x^2 - 2, add = TRUE, col = "violet")

5.5 Basic Scatterplot

5.5.1 Base R

Code
plot(outcome ~ predictor, data = df)

Code
plot(df$predictor, df$outcome)

5.5.1.1 Best-fit line

Code
plot(outcome ~ predictor, data = df)
abline(lm(outcome ~ predictor, data = df), col = "red") #regression line (y~x)

5.5.1.2 Best-fit line with correlation coefficient

Code
plot(outcome ~ predictor, data = df)
abline(lm(outcome ~ predictor, data = df), col = "red") #regression line (y~x)
addText(x = df$predictor, y = df$outcome)

5.5.1.3 Loess line

Code
plot(outcome ~ predictor, data = df)
lines(loess.smooth(df$predictor, df$outcome)) #loess line (x,y)

5.5.2 ggplot2

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  theme_classic()

5.5.2.1 Best-fit line

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  stat_smooth(method = "lm", formula = y ~ x) +
  theme_classic()

5.5.2.2 Best-fit line with correlation coefficient

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  stat_smooth(method = "lm", formula = y ~ x) +
  stat_cor(
    cor.coef.name = "r",
    p.accuracy = 0.001,
    r.accuracy = 0.01) +
  theme_classic()

5.5.2.3 Loess line

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  stat_smooth(method = "loess", formula = y ~ x) +
  theme_classic()

5.6 Change Plot Style

5.6.1 Change Theme

Code
basePlot <- ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point()

5.6.1.1 Default Theme

Code
basePlot

5.6.1.2 Grayscale: theme_gray()

Code
basePlot + theme_gray() + theme(text = element_text(family = "Gotham"))

5.6.1.3 Black-and-White: theme_bw()

Code
basePlot + theme_bw() + theme(text = element_text(family = "Gotham"))

5.6.1.4 Line Drawing: theme_linedraw()

A theme with only black lines of various widths on white backgrounds, reminiscent of a line drawing. Note that this theme has some very thin lines (<< 1 pt) which some journals may refuse.

Code
basePlot + theme_linedraw() + theme(text = element_text(family = "Gotham"))

5.6.1.5 Light: theme_light()

Code
basePlot + theme_light() + theme(text = element_text(family = "Gotham"))

5.6.1.6 Dark: theme_dark()

Code
basePlot + theme_dark() + theme(text = element_text(family = "Gotham"))

5.6.1.7 Minimal: theme_minimal()

Code
basePlot + theme_minimal() + theme(text = element_text(family = "Gotham"))

5.6.1.8 Classic: theme_classic()

Code
basePlot + theme_classic() + theme(text = element_text(family = "Gotham"))

5.6.1.9 A Completely Empty Theme: theme_void()

Code
basePlot + theme_void() + theme(text = element_text(family = "Gotham"))

5.6.1.10 Visual Unit Tests: theme_test()

Code
basePlot + theme_test() + theme(text = element_text(family = "Gotham"))

5.6.1.11 Edward Tufte: theme_tufte()

Theme based on Edward Tufte.

Code
basePlot + theme_tufte()

5.6.1.12 Wall Street Journal: theme_wsj()

Theme based on the publication, the Wall Street Journal.

Code
basePlot + theme_wsj()

5.6.1.13 FiveThirtyEight: theme_fivethirtyeight()

Theme based on the publication, FiveThirtyEight.

Code

5.6.1.14 The Economist: theme_economist()

Theme based on the publication, The Economist.

Code
basePlot + theme_economist()

5.6.1.15 Stephen Few: theme_few()

Theme based on the rules and examples from Stephen Few’s Show Me the Numbers and “Practical Rules for Using Color in Charts”.

Code
basePlot + theme_few()

5.7 Add Marginal Distributions

Code
scatterplot <- ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.7.1 Density Plot

Code
densityMarginal <- ggMarginal(scatterplot, type = "density", xparams = list(fill = "gray"), yparams = list(fill = "gray"))
Code
print(densityMarginal, newpage = TRUE)

5.7.2 Histogram

Code
histogramMarginal <- ggMarginal(scatterplot, type = "histogram", xparams = list(fill = "gray"), yparams = list(fill = "gray"))
Code
print(histogramMarginal, newpage = TRUE)

5.7.3 Boxplot

Code
boxplotMarginal <- ggMarginal(scatterplot, type = "boxplot", xparams = list(fill = "gray"), yparams = list(fill = "gray"))
Code
print(boxplotMarginal, newpage = TRUE)

5.7.4 Violin Plot

Code
violinMarginal <- ggMarginal(scatterplot, type = "violin", xparams = list(fill = "gray"), yparams = list(fill = "gray"))
Code
print(violinMarginal, newpage = TRUE)

5.7.5 Density Plot and Histogram

Code
densigramMarginal <- ggMarginal(scatterplot, type = "densigram", xparams = list(fill = "gray"), yparams = list(fill = "gray"))
Code
print(densigramMarginal, newpage = TRUE)

5.8 Ellipse

5.8.1 Basic Ellipse

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  stat_ellipse(alpha = 0.4, level = 0.95, geom = "polygon", fill = "red", color = "red") +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.8.2 Align Coordinates

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point() +
  stat_ellipse(alpha = 0.4, level = 0.95, geom = "polygon", fill = "red", color = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_fixed(ratio = (max(predictor, na.rm = TRUE) - min(predictor, na.rm = TRUE))/(max(outcome, na.rm = TRUE) - min(outcome, na.rm = TRUE)),
              xlim = c(0, max(predictor, na.rm = TRUE)), 
              ylim = c(0, max(outcome, na.rm = TRUE))) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.8.3 Reduce Dot Size

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point(size = 0.5) +
  stat_ellipse(alpha = 0.4, level = 0.95, geom = "polygon", fill = "red", color = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_fixed(ratio = (max(predictor, na.rm = TRUE) - min(predictor, na.rm = TRUE))/(max(outcome, na.rm = TRUE) - min(outcome, na.rm = TRUE)),
              xlim = c(0, max(predictor, na.rm = TRUE)), 
              ylim = c(0, max(outcome, na.rm = TRUE))) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.8.4 Transparency

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  geom_point(alpha = 0.3) +
  stat_ellipse(alpha = 0.4, level = 0.95, geom = "polygon", fill = "red", color = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_fixed(ratio = (max(predictor, na.rm = TRUE) - min(predictor, na.rm = TRUE))/(max(outcome, na.rm = TRUE) - min(outcome, na.rm = TRUE)),
              xlim = c(0, max(predictor, na.rm = TRUE)), 
              ylim = c(0, max(outcome, na.rm = TRUE))) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.9 Bubble Chart

5.9.1 Basic Bubble Chart

Code
ggplot(df, aes(x = predictorOverplot, y = outcomeOverplot)) +
  geom_count(aes(size = ..n..)) +
  scale_size_area() +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.9.2 Specify Sizes

Code
ggplot(df, aes(x = predictorOverplot, y = outcomeOverplot)) +
  geom_count(aes(size = ..n..)) +
  scale_size_continuous(breaks = c(1, 2, 3, 4), range = c(1, 7)) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.10 2-Dimensional Density

Code
ggplot(df, aes(x = predictor, y = outcome)) +
  stat_density_2d(aes(fill = ..density..), geom = "raster", contour = FALSE) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  scale_fill_viridis() +
  theme(
    legend.position = "none",
    text = element_text(family = "Gotham")
  )

5.11 Combined Ellipse and Bubble Chart

5.11.1 ggplot2

Code
ggplot(df, aes(x = predictorOverplot, y = outcomeOverplot)) +
  geom_count(alpha = .6, color = rgb(0,0,.7,.5)) +
  scale_size_continuous(breaks = c(1, 2, 3, 4), range = c(1, 7)) +
  stat_smooth(method = "loess", se = TRUE, color = "green") + 
  stat_smooth(method = "lm") +
  stat_ellipse(alpha = 0.4, level = 0.95, geom = "polygon", fill = "red", color = "red") +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_fixed(ratio = (max(predictorOverplot, na.rm = TRUE) - min(predictorOverplot, na.rm = TRUE))/(max(outcomeOverplot, na.rm = TRUE) - min(outcomeOverplot, na.rm = TRUE)),
              xlim = c(0, max(predictorOverplot, na.rm = TRUE)), 
              ylim = c(0, max(outcomeOverplot, na.rm = TRUE))) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

Code
ggplot(df, aes(x = predictorOverplot, y = outcomeOverplot)) +
  geom_count(alpha = .6, color = rgb(0,0,.7,.5)) +
  scale_size_continuous(breaks = c(1, 2, 3, 4), range = c(1, 7)) +
  stat_smooth(method = "loess", se = TRUE, color = "green") + 
  stat_smooth(method = "lm") +
  stat_ellipse(color = "red", size = 1.5) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0)) +
  coord_fixed(ratio = (max(predictorOverplot, na.rm = TRUE) - min(predictorOverplot, na.rm = TRUE))/(max(outcomeOverplot, na.rm = TRUE) - min(outcomeOverplot, na.rm = TRUE)),
              xlim = c(0, max(predictorOverplot, na.rm = TRUE)), 
              ylim = c(0, max(outcomeOverplot, na.rm = TRUE))) +
  theme_classic() +
  theme(text = element_text(family = "Gotham"))

5.11.2 Other implementation

From: https://stats.stackexchange.com/questions/7899/complex-regression-plot-in-r

5.11.2.1 ggplot2

Code
df$x <- df$predictorOverplot
df$y <- df$outcomeOverplot

xc <- with(df, xyTable(x, y))
df2 <- cbind.data.frame(x = xc$x, y = xc$y, number = xc$number)
df2$n <- cut(df2$number, c(0,1.5,2.5,Inf), labels = c(1,2,4))
df.ell <- as.data.frame(with(df, ellipse(cor(df$x, df$y, use = "pairwise.complete.obs"),
                                         scale = c(sd(df$x, na.rm = TRUE), sd(df$y, na.rm = TRUE)),
                                         centre = c(mean(df$x, na.rm = TRUE), mean(df$y, na.rm = TRUE)),
                                         level = .95)))

ggplot(data = na.omit(df2), aes(x = x, y = y)) + 
  geom_point(aes(size = n), alpha = .6, color = rgb(0,0,.7,.5)) + 
  stat_smooth(data = df, method = "loess", se = FALSE, color = "green") + 
  stat_smooth(data = df, method = "lm", col = "red") +
  geom_path(data = df.ell, colour = "green", size = 1) +
  coord_cartesian(xlim = c(-1,60), ylim = c(-1,130))

5.11.2.2 Base R

Code
do.it <- function(df, type="confidence", ...) {
  require(ellipse)
  lm0 <- lm(y ~ x, data=df)
  xc <- with(df, xyTable(x, y))
  df.new <- data.frame(x = seq(min(df$x), max(df$x), 0.1))
  pred.ulb <- predict(lm0, df.new, interval = type)
  pred.lo <- predict(loess(y ~ x, data = df), df.new)
  plot(xc$x, xc$y, cex = xc$number*1/4, xlab = "x", ylab = "y", ...) #change number*X to change dot size
  abline(lm0, col = "red")
  lines(df.new$x, pred.lo, col="green", lwd = 2)
  lines(df.new$x, pred.ulb[,"lwr"], lty = 2, col = "red")
  lines(df.new$x, pred.ulb[,"upr"], lty = 2, col = "red")    
  lines(ellipse(cor(df$x, df$y), scale=c(sd(df$x),sd(df$y)), 
                centre = c(mean(df$x), mean(df$y)), level = .95), lwd = 2, col = "green")
  invisible(lm0)
}

df3 <- na.omit(df[sample(nrow(df), nrow(df), rep = TRUE),])
df3$x <- df3$predictorOverplot
df3$y <- df3$outcomeOverplot

do.it(df3, pch = 19, col = rgb(0,0,.7,.5))

5.12 Visually-Weighted Regression

5.12.1 Default

Code
vwReg(outcome ~ predictor, data = df)

5.12.2 Shade

Code
vwReg(outcome ~ predictor, data = df, shade = TRUE, spag = FALSE, show.lm = TRUE, show.CI = TRUE, bw = FALSE, B = 1000, quantize = "continuous")

Code
vwReg(outcome ~ predictor, data = df, shade = TRUE, spag = FALSE, show.lm = TRUE, show.CI = TRUE, bw = FALSE, B = 1000, quantize = "SD")

5.12.3 Spaghetti

Code
vwReg(outcome ~ predictor, data = df, shade = FALSE, spag = TRUE, show.lm = TRUE, show.CI = TRUE, bw = FALSE, B = 1000)

Code
vwReg(outcome ~ predictor, data = df, shade = FALSE, spag = TRUE, show.lm = FALSE, show.CI = FALSE, bw = FALSE, B = 1000)

5.12.4 Black/white

Code
vwReg(outcome ~ predictor, data = df, shade = TRUE, spag = FALSE, show.lm = TRUE, show.CI = TRUE, bw = TRUE, B = 1000, quantize = "continuous")

Code
vwReg(outcome ~ predictor, data = df, shade = TRUE, spag = FALSE, show.lm = TRUE, show.CI = TRUE, bw = TRUE, B = 1000, quantize = "SD")

Code
vwReg(outcome ~ predictor, data = df, shade = FALSE, spag = TRUE, show.lm = TRUE, show.CI = TRUE, bw = TRUE, B = 1000, quantize = "SD")

6 Graphic Design Principles for Data Visualization

https://www.data-to-viz.com/caveats.html

7 Types of Plots

7.1 Univariate Distribution

Used for: distribution of one numeric variable

7.2 Bivariate Scatterplots

Used for: association between two numeric variables

7.2.1 Base R

plot(x, y)

7.2.2 ggplot2 package

http://www.cookbook-r.com/Graphs/Scatterplots_(ggplot2)/

ggplot(data, aes(x, y)) +
    geom_point()

7.2.4 Add lines

7.2.5 Area

7.3 Bivariate Barplots

Used for: association between one categorical variable and one numeric variable (or for depicting the frequency of categories of a categorical variable)

7.4 Multivariate Correlation Matrices

Used for: association between multiple numeric variables

For correlation matrices, I do the following:

  1. I use the lab’s cor.table() function (with type = "manuscript") from the petersenlab package to create a correlation matrix.
  2. I save the correlation matrix to a .csv file.
    1. For example: https://research-git.uiowa.edu/PetersenLab/SRS/SRS-SelfRegulationDevelopment/-/blob/master/Analyses/selfRegulationDevelopment.Rmd#self-regulation-measures
  3. I open the .csv file in Excel and create the table in Excel that can be copied and pasted to Word/Powerpoint/etc.

7.4.1 Correlograms

7.4.2 Pairs panels

psych package: https://personality-project.org/r/psych/help/pairs.panels.html

I depict examples of correlograms and pairs panels here: https://isaactpetersen.github.io/Principles-Psychological-Assessment/factor-analysis-pca.html#sec-correlations-factorAnalysis

7.5 Path Diagrams

Used for: SEM/CFA/path analysis

If you are just trying to visualize the results of a SEM model fitted using the lavaan package, I recommend the semPlot, lavaanPlot, or lavaangui packages in R. You can access a web application version of lavaangui here: https://lavaangui.org. You can see examples of semPlot here: http://sachaepskamp.com/semPlot/examples (archived at: https://perma.cc/W2V4-C9C8). You can see examples of lavaanPlot here: https://lavaanplot.alexlishinski.com/articles/intro_to_lavaanplot (archived at: https://perma.cc/ARZ7-MV24). You can see examples of lavaangui here: https://doi.org/10.1080/10705511.2024.2420678. You can see examples of my implementation here: https://isaactpetersen.github.io/Principles-Psychological-Assessment/structural-equation-modeling.html#sec-semModelPathDiagram-sem

If you are trying to create a figure for a paper or poster, you might want something that you can draw and customize yourself. I use Adobe Illustrator for hand-drawn figures.

You can look at various options below:

7.6 Interactive

Gallery: https://r-graph-gallery.com/interactive-charts.html

7.7 Animation

Gallery: https://r-graph-gallery.com/animation.html

7.8 3D

Gallery: https://r-graph-gallery.com/3d.html

8 Color Palettes

8.1 Sequential

8.2 Diverging

8.3 Qualitative/Categorical

Color palettes for color-blindness:

8.3.1 8 Colors

Code
# From here: https://github.com/clauswilke/colorblindr/blob/master/R/palettes.R
# Two color palettes taken from the article ["Color Universal Design" by Okabe and Ito](https://web.archive.org/web/20210108233739/http://jfly.iam.u-tokyo.ac.jp/color/)
# The variant `palette_OkabeIto` contains a gray color, while `palette_OkabeIto_black` contains black instead

palette_OkabeIto <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7", "#999999")

pie(rep(1, 8), col = palette_OkabeIto)

Code
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7", "#000000")

pie(rep(1, 8), col = palette_OkabeIto_black)

8.3.2 12 Colors

Safe palette from the rcartocolor package: https://stackoverflow.com/a/56066712 (archived at https://perma.cc/WUH5-F4Z7)

Code
#from: scales::show_col(carto_pal(12, "Safe"))

c12 <- c(
  "#88CCEE",
  "#CC6677",
  "#DDCC77",
  "#117733",
  "#332288",
  "#AA4499",
  "#44AA99",
  "#999933",
  "#882255",
  "#661100",
  "#6699CC",
  "#888888"
)

pie(rep(1, 12), col = c12)

8.3.3 25 Colors

https://stackoverflow.com/a/9568659 (archived at https://perma.cc/5ALZ-3AQD)

Code
c25 <- c(
  "dodgerblue2", "#E31A1C", # red
  "green4",
  "#6A3D9A", # purple
  "#FF7F00", # orange
  "black", "gold1",
  "skyblue2", "#FB9A99", # lt pink
  "palegreen2",
  "#CAB2D6", # lt purple
  "#FDBF6F", # lt orange
  "gray70", "khaki2",
  "maroon", "orchid1", "deeppink1", "blue1", "steelblue4",
  "darkturquoise", "green1", "yellow4", "yellow3",
  "darkorange4", "brown"
)

pie(rep(1, 25), col = c25)

8.3.4 36 Colors

Code
# from: Polychrome::palette36.colors(36)

c36 <- c("#5A5156","#E4E1E3","#F6222E","#FE00FA","#16FF32","#3283FE","#FEAF16","#B00068","#1CFFCE","#90AD1C","#2ED9FF","#DEA0FD","#AA0DFE","#F8A19F","#325A9B","#C4451C","#1C8356","#85660D","#B10DA1","#FBE426","#1CBE4F","#FA0087",
"#FC1CBF","#F7E1A0","#C075A6","#782AB6","#AAF400","#BDCDFF","#822E1C","#B5EFB5","#7ED7D1","#1C7F93","#D85FF7","#683B79","#66B0FF","#3B00FB")

pie(rep(1, 36), col = c36)

8.4 Maps

9 Session Info

Code
R version 4.5.2 (2025-10-31)
Platform: x86_64-pc-linux-gnu
Running under: Ubuntu 24.04.3 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so;  LAPACK version 3.12.0

locale:
 [1] LC_CTYPE=C.UTF-8       LC_NUMERIC=C           LC_TIME=C.UTF-8       
 [4] LC_COLLATE=C.UTF-8     LC_MONETARY=C.UTF-8    LC_MESSAGES=C.UTF-8   
 [7] LC_PAPER=C.UTF-8       LC_NAME=C              LC_ADDRESS=C          
[10] LC_TELEPHONE=C         LC_MEASUREMENT=C.UTF-8 LC_IDENTIFICATION=C   

time zone: UTC
tzcode source: system (glibc)

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods  
[8] base     

other attached packages:
 [1] ggpubr_0.6.2       ggthemes_5.2.0     viridis_0.6.5      viridisLite_0.4.2 
 [5] ggExtra_0.11.0     reshape2_1.4.5     RColorBrewer_1.1-3 plyr_1.8.9        
 [9] reshape_0.8.10     ggplot2_4.0.1      ellipse_0.5.0      petersenlab_1.2.2 

loaded via a namespace (and not attached):
 [1] tidyselect_1.2.1  psych_2.5.6       dplyr_1.1.4       farver_2.1.2     
 [5] S7_0.2.1          fastmap_1.2.0     promises_1.5.0    digest_0.6.39    
 [9] rpart_4.1.24      mime_0.13         lifecycle_1.0.4   cluster_2.1.8.1  
[13] magrittr_2.0.4    compiler_4.5.2    rlang_1.1.6       Hmisc_5.2-4      
[17] tools_4.5.2       yaml_2.3.12       data.table_1.18.0 ggsignif_0.6.4   
[21] knitr_1.51        labeling_0.4.3    htmlwidgets_1.6.4 mnormt_2.1.1     
[25] abind_1.4-8       miniUI_0.1.2      foreign_0.8-90    withr_3.0.2      
[29] purrr_1.2.0       nnet_7.3-20       stats4_4.5.2      lavaan_0.6-21    
[33] xtable_1.8-4      colorspace_2.1-2  scales_1.4.0      MASS_7.3-65      
[37] cli_3.6.5         mvtnorm_1.3-3     rmarkdown_2.30    reformulas_0.4.3 
[41] generics_0.1.4    otel_0.2.0        rstudioapi_0.17.1 minqa_1.2.8      
[45] DBI_1.2.3         stringr_1.6.0     splines_4.5.2     parallel_4.5.2   
[49] base64enc_0.1-3   mitools_2.4       vctrs_0.6.5       boot_1.3-32      
[53] Matrix_1.7-4      carData_3.0-5     jsonlite_2.0.0    car_3.1-3        
[57] rstatix_0.7.3     Formula_1.2-5     htmlTable_2.4.3   tidyr_1.3.2      
[61] glue_1.8.0        nloptr_2.2.1      stringi_1.8.7     gtable_0.3.6     
[65] later_1.4.4       quadprog_1.5-8    lme4_1.1-38       tibble_3.3.0     
[69] pillar_1.11.1     htmltools_0.5.9   R6_2.6.1          Rdpack_2.6.4     
[73] mix_1.0-13        evaluate_1.0.5    shiny_1.12.1      pbivnorm_0.6.0   
[77] lattice_0.22-7    rbibutils_2.4     backports_1.5.0   broom_1.0.11     
[81] httpuv_1.6.16     Rcpp_1.1.0        gridExtra_2.3     nlme_3.1-168     
[85] checkmate_2.3.3   mgcv_1.9-3        xfun_0.55         pkgconfig_2.0.3  

Footnotes

  1. Ask me to give you access.↩︎

Reuse

Developmental Psychopathology Lab