<a id="skfolio-uncertainty-set-bootstrapmuuncertaintyset"></a>

# skfolio.uncertainty_set.BootstrapMuUncertaintySet

<a id="skfolio.uncertainty_set.BootstrapMuUncertaintySet"></a>

### *class* skfolio.uncertainty_set.BootstrapMuUncertaintySet(prior_estimator=None, confidence_level=0.95, diagonal=True, n_bootstrap_samples=1000, block_size=None, seed=None)

Bootstrap Mu Uncertainty set.

Compute the expected returns ellipsoidal uncertainty set using stationary bootstrap:

$$
U_{\mu}
=
\left\{
    \mu :
    (\mu - \hat{\mu})^\top S^{-1}(\mu - \hat{\mu})
    \le \kappa^2
\right\}.
$$

The radius of the ellipsoid $\kappa$ (confidence region) is computed using:

$$
\kappa^2 = \chi^2_{n_{\text{assets}}}(\beta)

$$

with $\chi^2_{n_{\text{assets}}}(\beta)$ the inverse cumulative distribution
function of the chi-squared distribution with $n_{\text{assets}}$ degrees of
freedom at the $\beta$ confidence level.

The shape matrix $S$ of the ellipsoid is computed using stationary bootstrap,
with the option to retain only its diagonal. The estimator stores the square-root
factor as the linear geometry map:math:`L = S^{1/2}`.

* **Parameters:**
  **prior_estimator** *BasePrior, optional*
  : The [prior estimator](https://skfolio.org/user_guide/prior.html.md#prior) used to estimate the assets return
    distribution. The default (`None`) is to use
    [`EmpiricalPrior`](https://skfolio.org/generated/skfolio.prior.EmpiricalPrior.html.md#skfolio.prior.EmpiricalPrior).

  **confidence_level** *float , default=0.95*
  : Confidence level $\beta$ of the inverse cumulative distribution function
    of the chi-squared distribution. The default value is `0.95`.

  **diagonal** *bool, default=True*
  : If `True`, only the diagonal of the ellipsoid shape matrix is retained.

  **n_bootstrap_samples** *int, default=1000*
  : Number of bootstrap samples to generate. The default value is `1000`.

  **block_size** *float, optional*
  : Bootstrap block size. The default (`None`) is to estimate the optimal block size
    using Politis & White algorithm for all individual assets.

  **seed** *int, optional*
  : Random seed used to initialize the pseudo-random number generator.
* **Attributes:**
  **uncertainty_set_** *UncertaintySet*
  : Mu Uncertainty set [`UncertaintySet`](https://skfolio.org/generated/skfolio.uncertainty_set.UncertaintySet.html.md#skfolio.uncertainty_set.UncertaintySet).

  **prior_estimator_** *BasePrior*
  : Fitted `prior_estimator`.

### Methods

| [`fit`](#skfolio.uncertainty_set.BootstrapMuUncertaintySet.fit)(X[, y])            | Fit the Bootstrap Mu Uncertainty set estimator.   |
|-------------------------------------------------------------------------|---------------------------------------------------|
| [`get_metadata_routing`](#skfolio.uncertainty_set.BootstrapMuUncertaintySet.get_metadata_routing)() | Get metadata routing of this object.              |
| [`get_params`](#skfolio.uncertainty_set.BootstrapMuUncertaintySet.get_params)([deep])     | Get parameters for this estimator.                |
| [`set_params`](#skfolio.uncertainty_set.BootstrapMuUncertaintySet.set_params)(\*\*params) | Set the parameters of this estimator.             |

### References

* <a id='ra14fcabb7c03-1'>**[1]**</a> “Portfolio Optimization: Theory and Application”, Chapter 14, Daniel P. Palomar (2025)
* <a id='ra14fcabb7c03-2'>**[2]**</a> “Robustness properties of mean-variance portfolios”, Optimization: A Journal of Mathematical Programming and Operations Research, Schöttle & Werner (2009).
* <a id='ra14fcabb7c03-3'>**[3]**</a> “Automatic Block-Length Selection for the Dependent Bootstrap”, Politis & White (2004).
* <a id='ra14fcabb7c03-4'>**[4]**</a> “Correction to Automatic Block-Length Selection for the Dependent Bootstrap”, Patton, Politis & White (2009).

<a id="skfolio.uncertainty_set.BootstrapMuUncertaintySet.fit"></a>

#### fit(X, y=None, \*\*fit_params)

Fit the Bootstrap Mu Uncertainty set estimator.

* **Parameters:**
  **X** *array-like of shape (n_observations, n_assets)*
  : Price returns of the assets.

  **y** *array-like of shape (n_observations, n_factors), optional*
  : Price returns of factors.
    The default is `None`.

  **\*\*fit_params** *dict*
  : Parameters to pass to the underlying estimators.
    Only available if `enable_metadata_routing=True`, which can be
    set by using `sklearn.set_config(enable_metadata_routing=True)`.
    See [Metadata Routing User Guide](https://skfolio.org/user_guide/metadata_routing.html.md#metadata-routing) for
    more details.
* **Returns:**
  **self** *BootstrapMuUncertaintySet*
  : Fitted estimator.

<a id="skfolio.uncertainty_set.BootstrapMuUncertaintySet.get_metadata_routing"></a>

#### get_metadata_routing()

Get metadata routing of this object.

Please check [User Guide](https://skfolio.org/user_guide/metadata_routing.html.md#metadata-routing) on how the routing
mechanism works.

* **Returns:**
  **routing** *MetadataRequest*
  : A `MetadataRequest` encapsulating
    routing information.

<a id="skfolio.uncertainty_set.BootstrapMuUncertaintySet.get_params"></a>

#### get_params(deep=True)

Get parameters for this estimator.

* **Parameters:**
  **deep** *bool, default=True*
  : If True, will return the parameters for this estimator and
    contained subobjects that are estimators.
* **Returns:**
  **params** *dict*
  : Parameter names mapped to their values.

<a id="skfolio.uncertainty_set.BootstrapMuUncertaintySet.set_params"></a>

#### set_params(\*\*params)

Set the parameters of this estimator.

The method works on simple estimators as well as on nested objects
(such as `Pipeline`). The latter have
parameters of the form `<component>__<parameter>` so that it’s
possible to update each component of a nested object.

* **Parameters:**
  **\*\*params** *dict*
  : Estimator parameters.
* **Returns:**
  **self** *estimator instance*
  : Estimator instance.

