---
title: "gg_hist_qq_boot_and_gg_scatter_boot"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{gg_hist_qq_boot_and_gg_scatter_boot}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
bibliography: references.bib
csl: apa.csl
link-citations: true
---

```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)
```


## Overview

This vignette demonstrates two `ggplot2`-based utilities for visualizing bootstrap estimates stored/returned by [`semboottools`](https://yangzhen1999.github.io/semboottools/) [@yang_forming_2026]:

- `gg_hist_qq_boot()`: modular histogram/density with optional confidence intervals (CIs), mean/boot-mean lines, SD arrow, and a side-by-side QQ plot.
- `gg_scatter_boot()`: a scatterplot matrix (via **GGally**) for multiple parameters’ bootstrap draws.

Compared to base plots, these functions are **modern** (*ggplot2*) and **modular** (optional layers), and can **return the `ggplot` objects** for further customization.

The following packages will be used:

```{r setup}
library(semboottools)
library(lavaan)
```


## Example

```{r}
library(lavaan)

# Simulate data
set.seed(1234)
n <- 200
x <- runif(n) - 0.5
m <- 0.4 * x + rnorm(n)
y <- 0.3 * m + rnorm(n)
dat <- data.frame(x, m, y)

# Specify model
model <- '
  m ~ a * x
  y ~ b * m + cp * x
  ab := a * b
'

# Fit model
fit0 <- sem(model, data = dat, fixed.x = FALSE)

# Store bootstrap draws
# `R`, the number of bootstrap samples, should be ≥2000 in real studies.
# `parallel` should be used unless fitting the model is fast.
# Set `ncpus` to a larger value or omit it in real studies.
# `iseed` is set to make the results reproducible.

fit2 <- store_boot(
  fit0,
  R = 500,
  iseed = 2345)
```

### Basic Usage: Default Settings

Visualizing the bootstrap estimates
for the unstandardized solution:

```{r}
gg_hist_qq_boot(fit2,
                param = "ab",
                standardized = FALSE)
gg_scatter_boot(fit2,
                param = c("ab", "a", "b"),
                standardized = FALSE)
```

Visualizing the bootstrap estimates
for the standardized solution:

```{r}
gg_hist_qq_boot(fit2,
                param = "ab",
                standardized = TRUE)
gg_scatter_boot(fit2,
                param = c("ab", "a", "b"),
                standardized = TRUE)
```

## Reference(s)

