Simulate Hierarchical MNL Data with Predefined Settings & Var Control
simple_sim_hier_mnl.Rd
A wrapper around sim_hier_mnl (R/sim_hier_mnl.R) providing simpler control over common DGPs using a custom betabar function. Fixes p=3, nXa=1, nXd=1, const=TRUE, ncomp=1. Allows specifying target variances for betabar_i (with mean zero for the first coef) and eps_i.
Usage
simple_sim_hier_mnl(
nlgt,
nT,
nz,
het_observed = c("none", "linear", "step", "friedman"),
target_var_betabar = 1,
target_var_eps = 0.5,
seed = NULL
)
Arguments
- nlgt
Number of individuals.
- nT
Number of observations per individual.
- nz
Number of Z variables.
- het_observed
Character. Functional form of observed heterogeneity (betabar_i = f(Z_i)). Options: "none", "linear", "step", "friedman".
- target_var_betabar
Numeric. Target variance for the first coefficient of the observed component betabar_i = f(Z_i). Must be non-negative. The first coefficient will be centered to have mean zero. The remaining coefficients (2 to ncoef) are fixed constants -1, 1, -1, 1. Ignored if het_observed = "none".
- target_var_eps
Numeric. Target variance for each coefficient in the unobserved component eps_i. Must be non-negative. Controls
sigma_inv_diag
.- seed
Integer. Optional random seed.
Examples
if (FALSE) { # \dontrun{
# --- Simulate data with linear observed heterogeneity ---
sim_lin <- simple_sim_hier_mnl(nlgt = 100, nT = 10, nz = 5,
het_observed = "linear",
target_var_betabar = 2.0,
target_var_eps = 0.5,
seed = 123)
# Check dimensions and structure
print(names(sim_lin))
print(sim_lin$true_values$dimensions)
print(str(sim_lin$lgtdata[[1]])) # Structure for one individual
if (!is.null(sim_lin$Z)) print(dim(sim_lin$Z))
# Plot observed vs unobserved components for first coefficient
beta_1 <- sim_lin$true_values$beta_true[, 1]
betabar_1 <- sim_lin$true_values$betabar_true[, 1]
eps_1 <- beta_1 - betabar_1
print(paste("Var(betabar_k1) =", round(var(betabar_1), 2)))
print(paste("Var(eps_k1) =", round(var(eps_1), 2)))
# --- Simulate data with Friedman observed heterogeneity ---
sim_fried <- simple_sim_hier_mnl(nlgt = 100, nT = 10, nz = 5,
het_observed = "friedman",
target_var_betabar = 1.5,
target_var_eps = 0.2,
seed = 456)
# Plot Z vs betabar for the first coefficient
if (!is.null(sim_fried$Z) && ncol(sim_fried$Z) > 0) {
plot(sim_fried$Z[, 1], sim_fried$true_values$betabar_true[, 1],
xlab = "Z1", ylab = "betabar_k1 (Friedman)")
}
# --- Simulate data with no observed heterogeneity ---
sim_none <- simple_sim_hier_mnl(nlgt = 100, nT = 10, nz = 5,
het_observed = "none",
target_var_betabar = 0, # Should be ignored
target_var_eps = 1.0,
seed = 789)
# Check if betabar is zero
print(all(sim_none$true_values$betabar_true == 0))
print(paste("Var(eps_k1) =", round(var(sim_none$true_values$beta_true[, 1]), 2)))
} # }