The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This vignette covers advanced features of missoNet:
Cross-validation provides data-driven selection of regularization parameters:
# Generate example data
sim <- generateData(n = 300, p = 30, q = 12, rho = 0.1,
missing.type = "MCAR")
# 5-fold cross-validation
cvfit <- cv.missoNet(
X = sim$X,
Y = sim$Z,
kfold = 5,
compute.1se = TRUE, # Also compute 1-SE models
seed = 123, # For reproducibility
verbose = 1
)
#>
#> =============================================================
#> cv.missoNet - Cross-Validation
#> =============================================================
#>
#> > Initializing model...
#>
#> --- Model Configuration -------------------------------------
#> Data dimensions: n = 300, p = 30, q = 12
#> Missing rate (avg): 10.0%
#> Cross-validation: 5-fold
#> Lambda grid: standard (dense)
#> Lambda grid size: 50 x 50 = 2500 models
#> -------------------------------------------------------------
#>
#> --- Cross-Validation Progress -------------------------------
#> Fitting 2500 lambda pairs across 5 folds
#> Execution: sequential
#> -------------------------------------------------------------
#>
#> Fold 1 of 5
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |= | 3% | |== | 3% | |== | 4% | |== | 5% | |=== | 5% | |=== | 6% | |=== | 7% | |==== | 7% | |==== | 8% | |==== | 9% | |===== | 9% | |===== | 10% | |===== | 11% | |====== | 11% | |====== | 12% | |====== | 13% | |======= | 13% | |======= | 14% | |======= | 15% | |======== | 15% | |======== | 16% | |======== | 17% | |========= | 17% | |========= | 18% | |========= | 19% | |========== | 19% | |========== | 20% | |========== | 21% | |=========== | 21% | |=========== | 22% | |=========== | 23% | |============ | 23% | |============ | 24% | |============ | 25% | |============= | 25% | |============= | 26% | |============= | 27% | |============== | 27% | |============== | 28% | |============== | 29% | |=============== | 29% | |=============== | 30% | |=============== | 31% | |================ | 31% | |================ | 32% | |================ | 33% | |================= | 33% | |================= | 34% | |================= | 35% | |================== | 35% | |================== | 36% | |================== | 37% | |=================== | 37% | |=================== | 38% | |=================== | 39% | |==================== | 39% | |==================== | 40% | |==================== | 41% | |===================== | 41% | |===================== | 42% | |===================== | 43% | |====================== | 43% | |====================== | 44% | |====================== | 45% | |======================= | 45% | |======================= | 46% | |======================= | 47% | |======================== | 47% | |======================== | 48% | |======================== | 49% | |========================= | 49% | |========================= | 50% | |========================= | 51% | |========================== | 51% | |========================== | 52% | |========================== | 53% | |=========================== | 53% | |=========================== | 54% | |=========================== | 55% | |============================ | 55% | |============================ | 56% | |============================ | 57% | |============================= | 57% | |============================= | 58% | |============================= | 59% | |============================== | 59% | |============================== | 60% | |============================== | 61% | |=============================== | 61% | |=============================== | 62% | |=============================== | 63% | |================================ | 63% | |================================ | 64% | |================================ | 65% | |================================= | 65% | |================================= | 66% | |================================= | 67% | |================================== | 67% | |================================== | 68% | |================================== | 69% | |=================================== | 69% | |=================================== | 70% | |=================================== | 71% | |==================================== | 71% | |==================================== | 72% | |==================================== | 73% | |===================================== | 73% | |===================================== | 74% | |===================================== | 75% | |====================================== | 75% | |====================================== | 76% | |====================================== | 77% | |======================================= | 77% | |======================================= | 78% | |======================================= | 79% | |======================================== | 79% | |======================================== | 80% | |======================================== | 81% | |========================================= | 81% | |========================================= | 82% | |========================================= | 83% | |========================================== | 83% | |========================================== | 84% | |========================================== | 85% | |=========================================== | 85% | |=========================================== | 86% | |=========================================== | 87% | |============================================ | 87% | |============================================ | 88% | |============================================ | 89% | |============================================= | 89% | |============================================= | 90% | |============================================= | 91% | |============================================== | 91% | |============================================== | 92% | |============================================== | 93% | |=============================================== | 93% | |=============================================== | 94% | |=============================================== | 95% | |================================================ | 95% | |================================================ | 96% | |================================================ | 97% | |================================================= | 97% | |================================================= | 98% | |================================================= | 99% | |==================================================| 99% | |==================================================| 100%
#> Fold 2 of 5
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |= | 3% | |== | 3% | |== | 4% | |== | 5% | |=== | 5% | |=== | 6% | |=== | 7% | |==== | 7% | |==== | 8% | |==== | 9% | |===== | 9% | |===== | 10% | |===== | 11% | |====== | 11% | |====== | 12% | |====== | 13% | |======= | 13% | |======= | 14% | |======= | 15% | |======== | 15% | |======== | 16% | |======== | 17% | |========= | 17% | |========= | 18% | |========= | 19% | |========== | 19% | |========== | 20% | |========== | 21% | |=========== | 21% | |=========== | 22% | |=========== | 23% | |============ | 23% | |============ | 24% | |============ | 25% | |============= | 25% | |============= | 26% | |============= | 27% | |============== | 27% | |============== | 28% | |============== | 29% | |=============== | 29% | |=============== | 30% | |=============== | 31% | |================ | 31% | |================ | 32% | |================ | 33% | |================= | 33% | |================= | 34% | |================= | 35% | |================== | 35% | |================== | 36% | |================== | 37% | |=================== | 37% | |=================== | 38% | |=================== | 39% | |==================== | 39% | |==================== | 40% | |==================== | 41% | |===================== | 41% | |===================== | 42% | |===================== | 43% | |====================== | 43% | |====================== | 44% | |====================== | 45% | |======================= | 45% | |======================= | 46% | |======================= | 47% | |======================== | 47% | |======================== | 48% | |======================== | 49% | |========================= | 49% | |========================= | 50% | |========================= | 51% | |========================== | 51% | |========================== | 52% | |========================== | 53% | |=========================== | 53% | |=========================== | 54% | |=========================== | 55% | |============================ | 55% | |============================ | 56% | |============================ | 57% | |============================= | 57% | |============================= | 58% | |============================= | 59% | |============================== | 59% | |============================== | 60% | |============================== | 61% | |=============================== | 61% | |=============================== | 62% | |=============================== | 63% | |================================ | 63% | |================================ | 64% | |================================ | 65% | |================================= | 65% | |================================= | 66% | |================================= | 67% | |================================== | 67% | |================================== | 68% | |================================== | 69% | |=================================== | 69% | |=================================== | 70% | |=================================== | 71% | |==================================== | 71% | |==================================== | 72% | |==================================== | 73% | |===================================== | 73% | |===================================== | 74% | |===================================== | 75% | |====================================== | 75% | |====================================== | 76% | |====================================== | 77% | |======================================= | 77% | |======================================= | 78% | |======================================= | 79% | |======================================== | 79% | |======================================== | 80% | |======================================== | 81% | |========================================= | 81% | |========================================= | 82% | |========================================= | 83% | |========================================== | 83% | |========================================== | 84% | |========================================== | 85% | |=========================================== | 85% | |=========================================== | 86% | |=========================================== | 87% | |============================================ | 87% | |============================================ | 88% | |============================================ | 89% | |============================================= | 89% | |============================================= | 90% | |============================================= | 91% | |============================================== | 91% | |============================================== | 92% | |============================================== | 93% | |=============================================== | 93% | |=============================================== | 94% | |=============================================== | 95% | |================================================ | 95% | |================================================ | 96% | |================================================ | 97% | |================================================= | 97% | |================================================= | 98% | |================================================= | 99% | |==================================================| 99% | |==================================================| 100%
#> Fold 3 of 5
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |= | 3% | |== | 3% | |== | 4% | |== | 5% | |=== | 5% | |=== | 6% | |=== | 7% | |==== | 7% | |==== | 8% | |==== | 9% | |===== | 9% | |===== | 10% | |===== | 11% | |====== | 11% | |====== | 12% | |====== | 13% | |======= | 13% | |======= | 14% | |======= | 15% | |======== | 15% | |======== | 16% | |======== | 17% | |========= | 17% | |========= | 18% | |========= | 19% | |========== | 19% | |========== | 20% | |========== | 21% | |=========== | 21% | |=========== | 22% | |=========== | 23% | |============ | 23% | |============ | 24% | |============ | 25% | |============= | 25% | |============= | 26% | |============= | 27% | |============== | 27% | |============== | 28% | |============== | 29% | |=============== | 29% | |=============== | 30% | |=============== | 31% | |================ | 31% | |================ | 32% | |================ | 33% | |================= | 33% | |================= | 34% | |================= | 35% | |================== | 35% | |================== | 36% | |================== | 37% | |=================== | 37% | |=================== | 38% | |=================== | 39% | |==================== | 39% | |==================== | 40% | |==================== | 41% | |===================== | 41% | |===================== | 42% | |===================== | 43% | |====================== | 43% | |====================== | 44% | |====================== | 45% | |======================= | 45% | |======================= | 46% | |======================= | 47% | |======================== | 47% | |======================== | 48% | |======================== | 49% | |========================= | 49% | |========================= | 50% | |========================= | 51% | |========================== | 51% | |========================== | 52% | |========================== | 53% | |=========================== | 53% | |=========================== | 54% | |=========================== | 55% | |============================ | 55% | |============================ | 56% | |============================ | 57% | |============================= | 57% | |============================= | 58% | |============================= | 59% | |============================== | 59% | |============================== | 60% | |============================== | 61% | |=============================== | 61% | |=============================== | 62% | |=============================== | 63% | |================================ | 63% | |================================ | 64% | |================================ | 65% | |================================= | 65% | |================================= | 66% | |================================= | 67% | |================================== | 67% | |================================== | 68% | |================================== | 69% | |=================================== | 69% | |=================================== | 70% | |=================================== | 71% | |==================================== | 71% | |==================================== | 72% | |==================================== | 73% | |===================================== | 73% | |===================================== | 74% | |===================================== | 75% | |====================================== | 75% | |====================================== | 76% | |====================================== | 77% | |======================================= | 77% | |======================================= | 78% | |======================================= | 79% | |======================================== | 79% | |======================================== | 80% | |======================================== | 81% | |========================================= | 81% | |========================================= | 82% | |========================================= | 83% | |========================================== | 83% | |========================================== | 84% | |========================================== | 85% | |=========================================== | 85% | |=========================================== | 86% | |=========================================== | 87% | |============================================ | 87% | |============================================ | 88% | |============================================ | 89% | |============================================= | 89% | |============================================= | 90% | |============================================= | 91% | |============================================== | 91% | |============================================== | 92% | |============================================== | 93% | |=============================================== | 93% | |=============================================== | 94% | |=============================================== | 95% | |================================================ | 95% | |================================================ | 96% | |================================================ | 97% | |================================================= | 97% | |================================================= | 98% | |================================================= | 99% | |==================================================| 99% | |==================================================| 100%
#> Fold 4 of 5
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |= | 3% | |== | 3% | |== | 4% | |== | 5% | |=== | 5% | |=== | 6% | |=== | 7% | |==== | 7% | |==== | 8% | |==== | 9% | |===== | 9% | |===== | 10% | |===== | 11% | |====== | 11% | |====== | 12% | |====== | 13% | |======= | 13% | |======= | 14% | |======= | 15% | |======== | 15% | |======== | 16% | |======== | 17% | |========= | 17% | |========= | 18% | |========= | 19% | |========== | 19% | |========== | 20% | |========== | 21% | |=========== | 21% | |=========== | 22% | |=========== | 23% | |============ | 23% | |============ | 24% | |============ | 25% | |============= | 25% | |============= | 26% | |============= | 27% | |============== | 27% | |============== | 28% | |============== | 29% | |=============== | 29% | |=============== | 30% | |=============== | 31% | |================ | 31% | |================ | 32% | |================ | 33% | |================= | 33% | |================= | 34% | |================= | 35% | |================== | 35% | |================== | 36% | |================== | 37% | |=================== | 37% | |=================== | 38% | |=================== | 39% | |==================== | 39% | |==================== | 40% | |==================== | 41% | |===================== | 41% | |===================== | 42% | |===================== | 43% | |====================== | 43% | |====================== | 44% | |====================== | 45% | |======================= | 45% | |======================= | 46% | |======================= | 47% | |======================== | 47% | |======================== | 48% | |======================== | 49% | |========================= | 49% | |========================= | 50% | |========================= | 51% | |========================== | 51% | |========================== | 52% | |========================== | 53% | |=========================== | 53% | |=========================== | 54% | |=========================== | 55% | |============================ | 55% | |============================ | 56% | |============================ | 57% | |============================= | 57% | |============================= | 58% | |============================= | 59% | |============================== | 59% | |============================== | 60% | |============================== | 61% | |=============================== | 61% | |=============================== | 62% | |=============================== | 63% | |================================ | 63% | |================================ | 64% | |================================ | 65% | |================================= | 65% | |================================= | 66% | |================================= | 67% | |================================== | 67% | |================================== | 68% | |================================== | 69% | |=================================== | 69% | |=================================== | 70% | |=================================== | 71% | |==================================== | 71% | |==================================== | 72% | |==================================== | 73% | |===================================== | 73% | |===================================== | 74% | |===================================== | 75% | |====================================== | 75% | |====================================== | 76% | |====================================== | 77% | |======================================= | 77% | |======================================= | 78% | |======================================= | 79% | |======================================== | 79% | |======================================== | 80% | |======================================== | 81% | |========================================= | 81% | |========================================= | 82% | |========================================= | 83% | |========================================== | 83% | |========================================== | 84% | |========================================== | 85% | |=========================================== | 85% | |=========================================== | 86% | |=========================================== | 87% | |============================================ | 87% | |============================================ | 88% | |============================================ | 89% | |============================================= | 89% | |============================================= | 90% | |============================================= | 91% | |============================================== | 91% | |============================================== | 92% | |============================================== | 93% | |=============================================== | 93% | |=============================================== | 94% | |=============================================== | 95% | |================================================ | 95% | |================================================ | 96% | |================================================ | 97% | |================================================= | 97% | |================================================= | 98% | |================================================= | 99% | |==================================================| 99% | |==================================================| 100%
#> Fold 5 of 5
#> | | | 0% | | | 1% | |= | 1% | |= | 2% | |= | 3% | |== | 3% | |== | 4% | |== | 5% | |=== | 5% | |=== | 6% | |=== | 7% | |==== | 7% | |==== | 8% | |==== | 9% | |===== | 9% | |===== | 10% | |===== | 11% | |====== | 11% | |====== | 12% | |====== | 13% | |======= | 13% | |======= | 14% | |======= | 15% | |======== | 15% | |======== | 16% | |======== | 17% | |========= | 17% | |========= | 18% | |========= | 19% | |========== | 19% | |========== | 20% | |========== | 21% | |=========== | 21% | |=========== | 22% | |=========== | 23% | |============ | 23% | |============ | 24% | |============ | 25% | |============= | 25% | |============= | 26% | |============= | 27% | |============== | 27% | |============== | 28% | |============== | 29% | |=============== | 29% | |=============== | 30% | |=============== | 31% | |================ | 31% | |================ | 32% | |================ | 33% | |================= | 33% | |================= | 34% | |================= | 35% | |================== | 35% | |================== | 36% | |================== | 37% | |=================== | 37% | |=================== | 38% | |=================== | 39% | |==================== | 39% | |==================== | 40% | |==================== | 41% | |===================== | 41% | |===================== | 42% | |===================== | 43% | |====================== | 43% | |====================== | 44% | |====================== | 45% | |======================= | 45% | |======================= | 46% | |======================= | 47% | |======================== | 47% | |======================== | 48% | |======================== | 49% | |========================= | 49% | |========================= | 50% | |========================= | 51% | |========================== | 51% | |========================== | 52% | |========================== | 53% | |=========================== | 53% | |=========================== | 54% | |=========================== | 55% | |============================ | 55% | |============================ | 56% | |============================ | 57% | |============================= | 57% | |============================= | 58% | |============================= | 59% | |============================== | 59% | |============================== | 60% | |============================== | 61% | |=============================== | 61% | |=============================== | 62% | |=============================== | 63% | |================================ | 63% | |================================ | 64% | |================================ | 65% | |================================= | 65% | |================================= | 66% | |================================= | 67% | |================================== | 67% | |================================== | 68% | |================================== | 69% | |=================================== | 69% | |=================================== | 70% | |=================================== | 71% | |==================================== | 71% | |==================================== | 72% | |==================================== | 73% | |===================================== | 73% | |===================================== | 74% | |===================================== | 75% | |====================================== | 75% | |====================================== | 76% | |====================================== | 77% | |======================================= | 77% | |======================================= | 78% | |======================================= | 79% | |======================================== | 79% | |======================================== | 80% | |======================================== | 81% | |========================================= | 81% | |========================================= | 82% | |========================================= | 83% | |========================================== | 83% | |========================================== | 84% | |========================================== | 85% | |=========================================== | 85% | |=========================================== | 86% | |=========================================== | 87% | |============================================ | 87% | |============================================ | 88% | |============================================ | 89% | |============================================= | 89% | |============================================= | 90% | |============================================= | 91% | |============================================== | 91% | |============================================== | 92% | |============================================== | 93% | |=============================================== | 93% | |=============================================== | 94% | |=============================================== | 95% | |================================================ | 95% | |================================================ | 96% | |================================================ | 97% | |================================================= | 97% | |================================================= | 98% | |================================================= | 99% | |==================================================| 99% | |==================================================| 100%
#>
#> -------------------------------------------------------------
#>
#> > Refitting at lambda.min ...
#>
#> > Computing 1SE models ...
#>
#>
#> --- Cross-Validation Results --------------------------------
#> Optimal lambda.beta: 2.9944e-01
#> Optimal lambda.theta: 8.8012e-02
#> Min CV error: 9.3394
#> Active predictors: 21 / 30 (70.0%)
#> Network edges: 12 / 66 (18.2%)
#> -------------------------------------------------------------
#>
#> =============================================================
# ====== Cross-Validation Summary ======
{
cat("\nNumber of folds:", cvfit$kfold, "\n")
cat("Lambda pairs evaluated:", length(cvfit$param_set$cv.errors.mean), "\n")
cat("Minimum CV error:", round(min(cvfit$param_set$cv.errors.mean), 4), "\n")
}
#>
#> Number of folds: 5
#> Lambda pairs evaluated: 2500
#> Minimum CV error: 9.3394
# ====== Optimal parameters (min CV error) ======
{
cat("\nlambda.beta:", cvfit$est.min$lambda.beta, "\n")
cat("lambda.theta:", cvfit$est.min$lambda.theta, "\n")
}
#>
#> lambda.beta: 0.2994396
#> lambda.theta: 0.08801181
# ====== 1-SE parameters ======
{
cat("\nlambda.beta:", cvfit$est.1se.beta$lambda.beta, "\n")
cat("lambda.theta:", cvfit$est.1se.theta$lambda.theta, "\n")
}
#>
#> lambda.beta: 0.5102764
#> lambda.theta: 0.5973536
The 1-SE rule selects simpler models within one standard error of minimum:
# Compare three models
models <- list(
"Minimum CV" = cvfit$est.min,
"1SE Beta" = cvfit$est.1se.beta,
"1SE Theta" = cvfit$est.1se.theta
)
# Create comparison table
model_comparison <- data.frame(
Model = names(models),
Lambda.Beta = numeric(3),
Lambda.Theta = numeric(3),
Nonzero.Coef = numeric(3),
Network.Edges = numeric(3)
)
for (i in 1:3) {
if (!is.null(models[[i]])) {
model_comparison$Lambda.Beta[i] <- models[[i]]$lambda.beta
model_comparison$Lambda.Theta[i] <- models[[i]]$lambda.theta
model_comparison$Nonzero.Coef[i] <- sum(abs(models[[i]]$Beta) > 1e-8)
model_comparison$Network.Edges[i] <-
sum(abs(models[[i]]$Theta[upper.tri(models[[i]]$Theta)]) > 1e-8)
}
}
print(model_comparison, digits = 4)
#> Model Lambda.Beta Lambda.Theta Nonzero.Coef Network.Edges
#> 1 Minimum CV 0.2994 0.08801 30 12
#> 2 1SE Beta 0.5103 0.08801 15 12
#> 3 1SE Theta 0.2994 0.59735 23 0
# Extract and analyze CV errors
cv_errors <- cvfit$param_set$cv.errors.mean
cv_errors_sd <- (cvfit$param_set$cv.errors.upper - cvfit$param_set$cv.errors.lower) / 2
# Create error surface data
lambda_beta_unique <- unique(cvfit$param_set$cv.grid.beta)
lambda_theta_unique <- unique(cvfit$param_set$cv.grid.theta)
# Find optimal region
min_error <- min(cv_errors)
near_optimal <- which(cv_errors <= min_error * 1.05) # Within 5% of minimum
# ====== Regularization path statistics ======
{
cat("\n Error range: [", round(min(cv_errors), 4), ", ",
round(max(cv_errors), 4), "]\n", sep = "")
cat(" Models within 5% of minimum:", length(near_optimal), "\n")
cat(" This suggests", ifelse(length(near_optimal) > 10, "stable", "sensitive"),
"parameter selection\n")
}
#>
#> Error range: [9.3394, 12.7467]
#> Models within 5% of minimum: 1100
#> This suggests stable parameter selection
Parallel processing is most beneficial for:
library(parallel)
# Detect available cores
n_cores <- detectCores()
cat("Available cores:", n_cores, "\n")
# Create cluster, use 2 cores for illustration
cl <- makeCluster(min(n_cores - 1, 2))
# Run parallel cross-validation
cvfit_parallel <- cv.missoNet(
X = sim$X,
Y = sim$Z,
kfold = 5,
parallel = TRUE,
cl = cl,
verbose = 1
)
# Clean up
stopCluster(cl)
# Standard grid search
time_standard <- system.time({
fit_standard <- missoNet(
X = sim$X,
Y = sim$Z,
adaptive.search = FALSE,
verbose = 0
)
})
# Adaptive search (faster)
time_adaptive <- system.time({
fit_adaptive <- missoNet(
X = sim$X,
Y = sim$Z,
adaptive.search = TRUE,
verbose = 0
)
})
# ====== Computation time comparison ======
{
cat("\n Standard search:", round(time_standard[3], 2), "seconds\n")
cat(" Adaptive search:", round(time_adaptive[3], 2), "seconds\n")
cat(" Speedup:", round(time_standard[3] / time_adaptive[3], 1), "x\n")
}
#>
#> Standard search: 0.73 seconds
#> Adaptive search: 0.24 seconds
#> Speedup: 3.1 x
p <- ncol(sim$X)
q <- ncol(sim$Z)
# Scenario: Prior knowledge about important predictors
# Group 1: Known important (predictors 1-10) - light penalty
# Group 2: Possibly important (predictors 11-30) - moderate penalty
# Group 3: Likely unimportant (predictors 31-60) - heavy penalty
beta.pen.factor <- matrix(1, p, q)
beta.pen.factor[1:10, ] <- 0.1 # Light penalty
beta.pen.factor[11:20, ] <- 1.0 # Standard penalty
beta.pen.factor[21:p, ] <- 10.0 # Heavy penalty
# Network: Encourage block structure
theta.pen.factor <- matrix(1, q, q)
# Block 1: responses 1-6
theta.pen.factor[1:6, 1:6] <- 0.5
# Block 2: responses 7-12
theta.pen.factor[7:12, 7:12] <- 0.5
# Between blocks: heavy penalty
theta.pen.factor[1:6, 7:12] <- 2.0
theta.pen.factor[7:12, 1:6] <- 2.0
# Fit with structured penalties
fit_structured <- missoNet(
X = sim$X,
Y = sim$Z,
beta.pen.factor = beta.pen.factor,
theta.pen.factor = theta.pen.factor,
verbose = 0
)
# Analyze selection pattern
selected_groups <- c(
Group1 = sum(rowSums(abs(fit_structured$est.min$Beta[1:10, ])) > 1e-8),
Group2 = sum(rowSums(abs(fit_structured$est.min$Beta[11:20, ])) > 1e-8),
Group3 = sum(rowSums(abs(fit_structured$est.min$Beta[21:p, ])) > 1e-8)
)
# Penalty factors successfully guided selection toward prior knowledge
# Selected predictors by group:
print(selected_groups)
#> Group1 Group2 Group3
#> 4 0 0
# Create focused grid around expected optimal region
# Based on preliminary analysis or domain knowledge
# Log-scale grid with concentration
create_focused_grid <- function(center, width, n_points) {
log_center <- log10(center)
log_seq <- seq(log_center - width/2, log_center + width/2,
length.out = n_points)
return(10^log_seq)
}
# Focused grids based on problem characteristics
lambda.beta.focused <- create_focused_grid(
center = 0.05, # Expected optimal region
width = 1.5, # Log10 scale width
n_points = 30
)
lambda.theta.focused <- create_focused_grid(
center = 0.01,
width = 1.0,
n_points = 30
)
# Fit with focused grid
fit_focused <- missoNet(
X = sim$X,
Y = sim$Z,
lambda.beta = lambda.beta.focused,
lambda.theta = lambda.theta.focused
)
# Fit with detailed verbosity
fit_verbose <- missoNet(
X = sim$X,
Y = sim$Z,
lambda.beta = 0.05,
lambda.theta = 0.01,
verbose = 2 # Detailed output
)
#>
#> =============================================================
#> missoNet
#> =============================================================
#>
#> > Initializing model...
#>
#> --- Model Configuration -------------------------------------
#> Data dimensions: n = 300, p = 30, q = 12
#> Missing rate (avg): 10.0%
#> Selection criterion: eBIC
#> Lambda grid: standard (dense)
#> Lambda grid size: 1 x 1 = 1 models
#> -------------------------------------------------------------
#>
#> --- Optimization Progress -----------------------------------
#> Stage 1: Initializing warm starts
#> Stage 2: Grid search (sequential)
#> -------------------------------------------------------------
#>
#>
#> -------------- Main Optimization --------------
#> Lambda.beta: 0.0500 Lambda.theta: 0.0100
#> Stage | Component | Iterations | Backend
#> ------|----------------|------------|----------
#> II | Theta | 3 | glassofast
#> III | Beta (FISTA ) | 52 | -
#>
#> Optimization converged successfully.
#>
#>
#> -------------------------------------------------------------
#>
#> > Refitting optimal model ...
#>
#>
#> -------------- Pre-optimization ---------------
#> Iter | Objective | Rel.Change
#> 1 | 6.416267 | 1.00e+00
#> 2 | 6.416420 | 2.38e-05
#>
#> -------------- Main Optimization --------------
#> Lambda.beta: 0.0500 Lambda.theta: 0.0100
#> Stage | Component | Iterations | Backend
#> ------|----------------|------------|----------
#> II | Theta | 3 | glassofast
#> III | Beta (FISTA ) | 2 | -
#>
#> Optimization converged successfully.
#>
#>
#> --- Optimization Results ------------------------------------
#> Optimal lambda.beta: 5.0000e-02
#> Optimal lambda.theta: 1.0000e-02
#> eBIC value: 11054.4852
#> Active predictors: 30 / 30 (100.0%)
#> Network edges: 57 / 66 (86.4%)
#> -------------------------------------------------------------
#>
#> =============================================================
# Check convergence information
if (!is.null(fit_verbose$est.min$converged)) {
cat("\nConvergence Status:\n")
cat(" Beta optimization:",
ifelse(fit_verbose$est.min$converged$Beta, "✓ Converged", "✗ Not converged"), "\n")
cat(" Theta optimization:",
ifelse(fit_verbose$est.min$converged$Theta, "✓ Converged", "✗ Not converged"), "\n")
}
#>
#> Convergence Status:
#> Beta optimization: ✓ Converged
#> Theta optimization: ✓ Converged
if (!is.null(fit_verbose$est.min$iterations)) {
cat("\nIterations used:\n")
cat(" Beta:", fit_verbose$est.min$iterations$Beta, "\n")
cat(" Theta:", fit_verbose$est.min$iterations$Theta, "\n")
}
#>
#> Iterations used:
#> Beta: 2
#> Theta: 3
Strategies for difficult problems:
# Simulate a difficult problem
sim_difficult <- generateData(
n = 100,
p = 150, # p > n (high-dimensional)
q = 20,
rho = 0.25, # Higher missing rate
missing.type = "MAR"
)
# Strategy 1: Relax tolerances
fit_relaxed <- missoNet(
X = sim_difficult$X,
Y = sim_difficult$Z,
beta.tol = 1e-3,
theta.tol = 1e-3,
verbose = 0
)
# Strategy 2: Increase iterations
fit_more_iter <- missoNet(
X = sim_difficult$X,
Y = sim_difficult$Z,
beta.max.iter = 10000,
theta.max.iter = 10000,
verbose = 0
)
# Strategy 3: Use adaptive search for better initialization
fit_adaptive_init <- missoNet(
X = sim_difficult$X,
Y = sim_difficult$Z,
adaptive.search = TRUE,
verbose = 0
)
# Fit with relaxed network option
fit_relax <- missoNet(
X = sim$X,
Y = sim$Z,
relax.net = TRUE, # Refit network without penalty
verbose = 0
)
# Compare penalized vs relaxed estimates
if (!is.null(fit_relax$est.min$relax.net)) {
Theta_pen <- fit_relax$est.min$Theta
Theta_relax <- fit_relax$est.min$relax.net
# Extract edges
edges_pen <- Theta_pen[upper.tri(Theta_pen)]
edges_relax <- Theta_relax[upper.tri(Theta_relax)]
# Select non-zero edges from penalized model
active_edges <- abs(edges_pen) > 1e-8
# === Relaxed network estimation ===
cat("\n Active edges:", sum(active_edges), "\n")
cat(" Mean |edge| (penalized):",
round(mean(abs(edges_pen[active_edges])), 4), "\n")
cat(" Mean |edge| (relaxed):",
round(mean(abs(edges_relax[active_edges])), 4), "\n")
cat(" Relaxed estimates are typically larger (less shrinkage)\n")
}
#>
#> Active edges: 9
#> Mean |edge| (penalized): 0.3022
#> Mean |edge| (relaxed): 0.4354
#> Relaxed estimates are typically larger (less shrinkage)
# Nested CV for unbiased performance estimation
# Outer loop: Performance evaluation
# Inner loop: Parameter selection
evaluate_nested_cv <- function(X, Y, outer_folds = 5, inner_folds = 5) {
n <- nrow(X)
outer_fold_ids <- rep(1:outer_folds, length.out = n)
outer_fold_ids <- sample(outer_fold_ids)
test_errors <- numeric(outer_folds)
for (k in 1:outer_folds) {
# Split data
test_idx <- which(outer_fold_ids == k)
train_idx <- setdiff(1:n, test_idx)
# Inner CV for parameter selection
cvfit_inner <- cv.missoNet(
X = X[train_idx, ],
Y = Y[train_idx, ],
kfold = inner_folds,
verbose = 0
)
# Predict on test fold
y_pred <- predict(cvfit_inner, newx = X[test_idx, ])
y_true <- Y[test_idx, ]
# Calculate error (ignoring missing values)
mask <- !is.na(y_true)
test_errors[k] <- mean((y_pred[mask] - y_true[mask])^2)
}
return(list(
mean_error = mean(test_errors),
se_error = sd(test_errors) / sqrt(outer_folds),
fold_errors = test_errors
))
}
# Run nested CV
nested_results <- evaluate_nested_cv(
sim$X,
sim$Z,
outer_folds = 3,
inner_folds = 3
)
{
cat("\nNested Cross-Validation Results:\n")
cat(" Mean test error:", round(nested_results$mean_error, 4), "\n")
cat(" Standard error:", round(nested_results$se_error, 4), "\n")
cat(" 95% CI: [",
round(nested_results$mean_error - 1.96 * nested_results$se_error, 4), ", ",
round(nested_results$mean_error + 1.96 * nested_results$se_error, 4), "]\n", sep = "")
}
#>
#> Nested Cross-Validation Results:
#> Mean test error: 1.0021
#> Standard error: 0.0237
#> 95% CI: [0.9556, 1.0486]
#> === Recommended missoNet Workflow ===
#>
#> 1. Data Preparation:
#> - Check missing patterns
#> - Consider QC (usually recommended)
#> - Assess dimensionality (p vs n)
#>
#> 2. Initial Exploration:
#> - Quick fit with adaptive.search = TRUE
#> - Examine selected lambda ranges
#> - Check convergence
#>
#> 3. Cross-Validation:
#> - Use 5-10 folds depending on sample size
#> - Enable compute.1se = TRUE
#> - Consider parallel processing for large data
#>
#> 4. Model Selection:
#> - Use eBIC for high-dimensional settings
#> - Consider 1-SE models for better generalization
#> - Validate on independent test set if available
#>
#> 5. Diagnostics:
#> - Check convergence status
#> - Examine sparsity patterns
#> - Validate predictions
#> Scenario Recommendation
#> 1 Large n (>1000) Use parallel processing, adaptive search
#> 2 Large p (>500) Reduce n.lambda.beta, use eBIC
#> 3 Large q (>50) Reduce n.lambda.theta, consider diagonal penalty
#> 4 High missing (>30%) Increase tolerances, check MAR assumption
#> 5 Dense solutions expected Reduce lambda ranges, focus grid
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.