---
title: "semboottools::standardizedSolution_boot"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{semboottools::standardizedSolution_boot}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

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

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

## Function Syntax

```{r eval = FALSE}
standardizedSolution_boot(object,
                          level = .95,
                          type = "std.all",
                          boot_delta_ratio = FALSE,
                          boot_ci_type = c("perc", "bc", "bca.simple"),
                          save_boot_est_std = TRUE,
                          boot_pvalue = TRUE,
                          boot_pvalue_min_size = 1000,
                          ...)
```

## Arguments

| Argument               | Description                                                                                                                                                                                                |
|-----------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `object`               | A model fitted by `lavaan`.                                                                                                                                |
| `level`                | Confidence level for the confidence intervals. For example, `.95` gives 95% confidence intervals.                                                                                                          |
| `type`                 | Type of standardized coefficients. Same as in `lavaan::standardizedSolution()`, such as `"std.all"` or `"std.lv"`.                                                                                           |
| `boot_delta_ratio`     | Whether to calculate how wide the bootstrap confidence interval is compared to the usual confidence interval (delta method). Useful for comparing both methods.                                            |
| `boot_ci_type`         | Method for forming bootstrap confidence intervals. `"perc"` gives percentile intervals; `"bc"` and `"bca.simple"` give bias-corrected intervals.                                                            |
| `save_boot_est_std`    | Whether to save the bootstrap estimates of standardized coefficients in the result. Saved in the attribute `boot_est_std` if `TRUE`.                                                                         |
| `boot_pvalue`          | Whether to compute asymmetric *p*-values based on bootstrap results. Only available when percentile confidence intervals are used.                                                                          |
| `boot_pvalue_min_size` | Minimum number of valid bootstrap samples needed to compute asymmetric *p*-values. If fewer samples are available, *p*-values will not be computed and will be shown as `NA`.                                |
| `...`                  | Additional arguments passed to `lavaan::standardizedSolution()`.                                                                                                                                             |

## Example

### Data and Model

```{r}
# Set seed for reproducibility
set.seed(1234)

# Generate data
n <- 1000
x <- runif(n) - 0.5
m <- 0.20 * x + rnorm(n)
y <- 0.17 * m + rnorm(n)
dat <- data.frame(x, y, m)

# Specify mediation model in lavaan syntax
mod <- '
  m ~ a * x
  y ~ b * m + cp * x
  ab := a * b
  total := a * b + cp
'
```

### Basic usage: default settings

```{r}
# (should use ≥2000 in real studies)
fit <- sem(mod, data = dat, se = "boot", bootstrap = 500)
std_boot <- standardizedSolution_boot(fit)
print(std_boot)
```

```{r}
# this function also do not require 'se = "boot"' when fitting the model
fit2 <- sem(mod, data = dat, fixed.x = FALSE)
fit2 <- store_boot(fit2, R = 500)
std_boot2 <- standardizedSolution_boot(fit2)
print(std_boot)
```

### standardizedSolution_boot(): Different Options

```{r eval = FALSE}
# Change confidence level
std_boot <- standardizedSolution_boot(fit, level = 0.99)
# Use bias-corrected bootstrap CIs
std_boot <- standardizedSolution_boot(fit, boot_ci_type = "bc")
std_boot <- standardizedSolution_boot(fit, boot_ci_type = "bca.simple")
# Compute delta ratio
std_boot <- standardizedSolution_boot(fit, boot_delta_ratio = TRUE)
# Do not save bootstrap estimates
std_boot <- standardizedSolution_boot(fit, save_boot_est_std = FALSE)
# Turn off asymmetric bootstrap p-values
std_boot <- standardizedSolution_boot(fit, boot_pvalue = FALSE)
# Combine options
std_boot <- standardizedSolution_boot(fit,
                                      boot_ci_type = "bc",
                                      boot_delta_ratio = TRUE)
```

### print(): Different Options

```{r eval = FALSE}

# Print standardized solution in friendly format
print(std_boot, output = "text")
# Print with more decimal places (e.g., 5 decimal digits)
print(std_boot, nd = 5)
# Print only bootstrap confidence intervals
print(std_boot, boot_ci_only = TRUE)
# Print both unstandardized and standardized solution
print(std_boot, standardized_only = FALSE)
# Combine options: more decimals + show both solutions
print(std_boot, nd = 4, standardized_only = FALSE)
# Combine options: show only bootstrap CI, 5 decimal places
print(std_boot, boot_ci_only = TRUE, nd = 5)
```