bootstrap: Bootstrap for msel function

bootstrapR Documentation

Bootstrap for msel function

Description

Function bootstrap_msel provides bootstrap estimates of the parameters of the model estimated via the msel function. Function bootstrap_combine_msel allows to combine several objects of class 'bootstrap_msel'.

Usage

bootstrap_msel(
  object,
  iter = 100,
  opt_type = "optim",
  opt_args = NULL,
  is_ind = FALSE,
  n_sim = 1000,
  n_cores = 1
)

bootstrap_combine_msel(...)

Arguments

object

an object of class 'msel' or a list of such objects.

iter

the number of bootstrap iterations.

opt_type

the same as the opt_type argument of the msel function.

opt_args

the same as the opt_args argument of the msel function.

is_ind

logical; if TRUE then the function also returns a numeric matrix of indexes of observations used in the bootstrap samples.

n_sim

the same as the n_sim argument of the msel function.

n_cores

the same as the n_cores argument of the msel function.

...

objects returned by the function bootstrap_msel to be combined into a single object.

Details

The function generates iter bootstrap samples and estimates the parameters \theta of the model by using each of these samples. The estimate \hat{\theta}^{(b)} from the b-th of these samples is stored as the b-th row of the numeric matrix par which is an element of the returned object.

Use the update_msel function to transfer the bootstrap estimates to the object of class 'msel'.

Argument object may be a list of objects of class 'msel'. Then the function returns an object of class 'crossmodel_bootstrap_msel' which is a list out such that out[[j]] is an object of class 'bootstrap_msel'. Notice that all the models will be estimated on the same bootstrap samples. That is, out[[j]]$ind is the same for each model j. Specifically, it may be useful for cross-model hypothesis testing.

See test_msel for hypothesis testing.

Value

Function bootstrap_msel returns an object of class "bootstrap_msel". This object is a list which may contain the following elements:

  • par - a numeric matrix such that par[b, ] is a vector of the estimates of the parameters of the model estimated via the msel function on the b-th bootstrap sample.

  • iter - the number of the bootstrap iterations.

  • cov - bootstrap estimate of the covariance matrix which equals cov(par)

  • ind - a numeric matrix such that ind[, b] stores the indexes of the observations from object$data included in the b-th bootstrap sample.

Function bootstrap_combine_msel returns the object which combines several objects returned by the bootstrap_msel function into a single object.

Examples

# -------------------------------
# Bootstrap for the probit model
# -------------------------------

# ---
# Step 1
# Simulation of data
# ---

# Load required package
library("mnorm")

# Set seed for reproducibility
set.seed(123)

# The number of observations
n <- 100

# Regressors (covariates)
w1 <- runif(n = n, min = -1, max = 1)
w2 <- runif(n = n, min = -1, max = 1)

# Random errors
u <- rnorm(n = n, mean = 0, sd = 1)

# Coefficients
gamma <- c(-1, 2)

# Linear index
li <- gamma[1] * w1 + gamma[2] * w2

# Latent variable
z_star <- li + u

# Cuts
cuts <- c(-1, 0.5, 2)

# Observable ordered outcome
z                                           <- rep(0, n)
z[(z_star > cuts[1]) & (z_star <= cuts[2])] <- 1
z[(z_star > cuts[2]) & (z_star <= cuts[3])] <- 2
z[z_star > cuts[3]]                         <- 3
table(z)

# Data
data <- data.frame(w1 = w1, w2 = w2, z = z, crossind = 1:n)

# ---
# Step 2
# Estimation of the parameters
# ---

# Estimation
model <- msel(formula = z ~ w1 + w2, data = data)
summary(model)
 
# ---
# Step 3
# Bootstrap
# ---

# Perform the bootstrap
bootstrap <- bootstrap_msel(model)

# Test the hypothesis that H0: gamma[2] = -2gamma[1]
# by using the t-test and with bootstrap p-values
fn_test <- function(object)
{
  gamma <- coef(object, eq = 1)
  return(gamma[2] + 2 * gamma[1])
}
b <- test_msel(object    = model, 
               fn        = fn_test,
               test      = "t", 
               method    = "bootstrap",
               ci        = "percentile",
               se_type   = "bootstrap",
               bootstrap = bootstrap)
summary(b)

# Replicate the analysis with an additional 20 bootstrap iterations
bootstrap2    <- bootstrap_msel(model, iter = 20)
bootstrap_new <- bootstrap_combine_msel(bootstrap, bootstrap2)
b2 <- test_msel(object    = model, 
                fn        = fn_test,
                test      = "t", 
                method    = "bootstrap",
                ci        = "percentile",
                se_type   = "bootstrap",
                bootstrap = bootstrap_new)
summary(b2)

# ---
# Step 4
# Cross-model test
# ---

# Estimate restricted model
model2 <- msel(formula = z ~ w1, data = data)

# Perform a bootstrap for two models
bootstrap2 <- bootstrap_msel(list(model, model2), iter = 10)

# Test the hypothesis that the coefficients in both models are the same
fn_test2 <- function(object)
{
  coef1 <- coef(object[[1]], eq = 1)[1]
  coef2 <- coef(object[[2]], eq = 1)[1]
  return(coef1 - coef2)
}
b <- test_msel(object    = list(model, model2), 
               fn        = fn_test2,
               test      = "t", 
               method    = "bootstrap",
               ci        = "percentile",
               se_type   = "bootstrap",
               bootstrap = bootstrap2)
summary(b)


 

switchSelection documentation built on April 15, 2026, 5:06 p.m.