Skip to contents

Find the likelihood-based confidence bound for one parameter.


  which = NULL,
  method = "wn",
  standardized = FALSE,
  robust = "none",
  sf_full = NA,
  sf_args = list(),
  sem_out_name = NULL,
  try_k_more_times = 0,



The position (row number) of the target parameters as appeared in the parameter table of the lavaan::lavaan object.


Whether the lower bound or the upper bound is to be found. Must be "lbound" or "ubound".


The SEM output. Currently supports lavaan::lavaan outputs only.


The approach to be used. Default is "wn" (Wu-Neale-2012 Method), the only supported method.


Logical. Whether the bound of the LBCI of the standardized solution is to be searched. Default is FALSE.


Whether the LBCI based on robust likelihood ratio test is to be found. Only "satorra.2000" in lavaan::lavTestLRT() is supported for now. If `"none"``, the default, then likelihood ratio test based on maximum likelihood estimation will be used.


A list with the scaling and shift factors. Ignored if robust is "none". If robust is "satorra.2000" and sf_full is supplied, then its value will be used. If robust is "satorra.2000" but sf_full is NA, then scaling factors will be computed internally.


The list of arguments to be used for computing scaling factors if robust is "satorra.2000". Used only by semlbci(). Ignored if robust is not "satorra.2000".


The name of the object supplied to sem_out. NULL by default. Originally used by some internal functions. No longer used in the current version but kept for backward compatibility.


How many more times to try if the status code is not zero. Default is 0.


Arguments to be passed to the function corresponds to the requested method (ci_bound_wn_i() for "wn").


A list of the following elements.

  • bound: The bound located. NA if the search failed.

  • diags: Diagnostic information.

  • method: Method used. Currently only "wn" is the only possible value.

  • times: Total time used in the search.

  • sf_full: The scaling and shift factors used.

  • ci_bound_i_out: The original output from ci_bound_wn_i().

  • attempt_lb_var: How many attempts used to reduce the lower bounds of free variances.

  • attempt_more_times: How many additional attempts used to search for the bounds. Controlled by try_k_more_times.


Important Notice

This function is not supposed to be used directly by users in typical scenarios. Its interface is user-unfriendly because it should be used through semlbci(). It is exported such that interested users can examine how a confidence bound is found, or use it for experiments or simulations.


ci_i_one() is the link between semlbci() and the lowest level function (currently ci_bound_wn_i()). When called by semlbci() to find the bound of a parameter, ci_i_one() calls a function (ci_bound_wn_i() by default) one or more times to find the bound (limit) for a likelihood-based confidence interval.



mod <-
m ~ x
y ~ m
fit_med <- lavaan::sem(mod, simple_med, fixed.x = FALSE)

#>   id lhs op rhs user block group free ustart exo label plabel  start    est
#> 1  1   m  ~   x    1     1     1    1     NA   0         .p1.  1.676  1.676
#> 2  2   y  ~   m    1     1     1    2     NA   0         .p2.  0.535  0.535
#> 3  3   m ~~   m    0     1     1    3     NA   0         .p3. 34.710 34.710
#> 4  4   y ~~   y    0     1     1    4     NA   0         .p4. 40.119 40.119
#> 5  5   x ~~   x    0     1     1    5     NA   0         .p5.  0.935  0.935
#>      se
#> 1 0.431
#> 2 0.073
#> 3 3.471
#> 4 4.012
#> 5 0.094

# Find the LBCI for the first parameter
# The method "wn" needs the constraint function.
# Use set_constraint() to generate this function:
fn_constr0 <- set_constraint(fit_med)

# Call ci_i to find the bound, the lower bound in this example.
# The constraint function, assigned to f_constr, is passed
# to ci_bound_wn_i().
# npar is an argument for ci_bound_wn_i().
out <- ci_i_one(i = 1,
                which = "lbound",
                sem_out = fit_med,
                npar = 5,
                f_constr = fn_constr0)
#>   lbound 
#> 0.827702