It computes an indirect effect, optionally conditional on the value(s) of moderator(s) if present.

## Usage

```
indirect_i(
x,
y,
m = NULL,
fit = NULL,
est = NULL,
implied_stats = NULL,
wvalues = NULL,
standardized_x = FALSE,
standardized_y = FALSE,
computation_digits = 5,
prods = NULL,
get_prods_only = FALSE,
data = NULL,
expand = TRUE,
warn = TRUE,
allow_mixing_lav_and_obs = TRUE,
group = NULL
)
```

## Arguments

- x
Character. The name of the predictor at the start of the path.

- y
Character. The name of the outcome variable at the end of the path.

- m
A vector of the variable names of the mediator(s). The path goes from the first mediator successively to the last mediator. If

`NULL`

, the default, the path goes from`x`

to`y`

.- fit
The fit object. Currently only supports lavaan::lavaan objects. Support for lists of

`lm()`

output is implemented by high level functions such as`indirect_effect()`

and`cond_indirect_effects()`

. It can also be a`lavaan.mi`

object returned by`semTools::runMI()`

or its wrapper, such as`semTools::sem.mi()`

.- est
The output of

`lavaan::parameterEstimates()`

. If`NULL`

, the default, it will be generated from`fit`

. If supplied,`fit`

will be ignored.- implied_stats
Implied means, variances, and covariances of observed variables and latent variables (if any), of the form of the output of

`lavaan::lavInspect()`

with`what`

set to`"implied"`

, but with means extracted with`what`

set to`"mean.ov"`

and`"mean.lv"`

. The standard deviations are extracted from this object for standardization. Default is`NULL`

, and implied statistics will be computed from`fit`

if required.- wvalues
A numeric vector of named elements. The names are the variable names of the moderators, and the values are the values to which the moderators will be set to. Default is

`NULL`

.- standardized_x
Logical. Whether

`x`

will be standardized. Default is`FALSE`

.- standardized_y
Logical. Whether

`y`

will be standardized. Default is`FALSE`

.- computation_digits
The number of digits in storing the computation in text. Default is 3.

- prods
The product terms found. For internal use.

- get_prods_only
IF

`TRUE`

, will quit early and return the product terms found. The results can be passed to the`prod`

argument when calling this function. Default is`FALSE`

. For internal use.- data
Data frame (optional). If supplied, it will be used to identify the product terms. For internal use.

- expand
Whether products of more than two terms will be searched.

`TRUE`

by default. For internal use.- warn
If

`TRUE`

, the default, the function will warn against possible misspecification, such as not setting the value of a moderator which moderate one of the component path. Set this to`FALSE`

will suppress these warnings. Suppress them only when the moderators are omitted intentionally.- allow_mixing_lav_and_obs
If

`TRUE`

, it accepts a path with both latent variables and observed variables. Default is`TRUE`

.- group
Either the group number as appeared in the

`summary()`

or`lavaan::parameterEstimates()`

output of an`lavaan`

-class object, or the group label as used in the`lavaan`

-class object. Used only when the number of groups is greater than one. Default is NULL.

## Value

It returns an
`indirect`

-class object. This class
has the following methods:
`coef.indirect()`

,
`print.indirect()`

. The
`confint.indirect()`

method is used
only when called by `cond_indirect()`

## Details

This function is a low-level
function called by
`indirect_effect()`

,
`cond_indirect_effects()`

, and
`cond_indirect()`

, which call this
function multiple times if bootstrap
confidence interval is requested.

This function usually should not be used directly. It is exported for advanced users and developers

## See also

`indirect_effect()`

,
`cond_indirect_effects()`

, and
`cond_indirect()`

, the high level
functions that should usually be
used.

## Examples

```
library(lavaan)
dat <- modmed_x1m3w4y1
mod <-
"
m1 ~ a1 * x + b1 * w1 + d1 * x:w1
m2 ~ a2 * m1 + b2 * w2 + d2 * m1:w2
m3 ~ a3 * m2 + b3 * w3 + d3 * m2:w3
y ~ a4 * m3 + b4 * w4 + d4 * m3:w4
"
fit <- sem(mod, dat, meanstructure = TRUE,
fixed.x = FALSE, se = "none", baseline = FALSE)
est <- parameterEstimates(fit)
wvalues <- c(w1 = 5, w2 = 4, w3 = 2, w4 = 3)
# Compute the conditional indirect effect by indirect_i()
indirect_1 <- indirect_i(x = "x", y = "y", m = c("m1", "m2", "m3"), fit = fit,
wvalues = wvalues)
# Manually compute the conditional indirect effect
indirect_2 <- (est[est$label == "a1", "est"] +
wvalues["w1"] * est[est$label == "d1", "est"]) *
(est[est$label == "a2", "est"] +
wvalues["w2"] * est[est$label == "d2", "est"]) *
(est[est$label == "a3", "est"] +
wvalues["w3"] * est[est$label == "d3", "est"]) *
(est[est$label == "a4", "est"] +
wvalues["w4"] * est[est$label == "d4", "est"])
# They should be the same
coef(indirect_1)
#> y~x
#> 1.176091
indirect_2
#> w1
#> 1.176091
```