Skip to content

Instantly share code, notes, and snippets.

@wleoncio
Created March 11, 2024 11:18
Show Gist options
  • Save wleoncio/ff34e3c1dc95f94d153469b4e92ea532 to your computer and use it in GitHub Desktop.
Save wleoncio/ff34e3c1dc95f94d153469b4e92ea532 to your computer and use it in GitHub Desktop.
MADMMplasso issue 35
# Setup ========================================================================
rm(list = ls())
devtools::install_github("ocbe-uio/MADMMplasso", force = TRUE)
#> Downloading GitHub repo ocbe-uio/MADMMplasso@HEAD
#> 
#> ── R CMD build ─────────────────────────────────────────────────────────────────
#> * checking for file ‘/tmp/Rtmpr2fzD2/remotes149907717ef58/ocbe-uio-MADMMplasso-9896eeb/DESCRIPTION’ ... OK
#> * preparing ‘MADMMplasso’:
#> * checking DESCRIPTION meta-information ... OK
#> * cleaning src
#> * checking for LF line-endings in source and make files and shell scripts
#> * checking for empty or unneeded directories
#> * building ‘MADMMplasso_0.0.0.9015.tar.gz’
#> Installing package into '/home/netto/R/x86_64-pc-linux-gnu-library/4.3'
#> (as 'lib' is unspecified)
library(MADMMplasso)
print(packageVersion("MADMMplasso"))
#> [1] '0.0.0.9015'

# Run ==========================================================================
set.seed(1235)
N <- 100
p <- 50
nz <- 4
K <- nz
X <- matrix(rnorm(n = N * p), nrow = N, ncol = p)
mx <- colMeans(X)
sx <- sqrt(apply(X, 2, var))
X <- scale(X, mx, sx)
X <- matrix(as.numeric(X), N, p)
Z <- matrix(rnorm(N * nz), N, nz)
mz <- colMeans(Z)
sz <- sqrt(apply(Z, 2, var))
Z <- scale(Z, mz, sz)
beta_1 <- rep(x = 0, times = p)
beta_2 <- rep(x = 0, times = p)
beta_3 <- rep(x = 0, times = p)
beta_4 <- rep(x = 0, times = p)
beta_5 <- rep(x = 0, times = p)
beta_6 <- rep(x = 0, times = p)
beta_1[1:5] <- c(2, 2, 2, 2, 2)
beta_2[1:5] <- c(2, 2, 2, 2, 2)
beta_3[6:10] <- c(2, 2, 2, -2, -2)
beta_4[6:10] <- c(2, 2, 2, -2, -2)
beta_5[11:15] <- c(-2, -2, -2, -2, -2)
beta_6[11:15] <- c(-2, -2, -2, -2, -2)
Beta <- cbind(beta_1, beta_2, beta_3, beta_4, beta_5, beta_6)
colnames(Beta) <- c(1:6)
theta <- array(0, c(p, K, 6))
theta[1, 1, 1] <- 2
theta[3, 2, 1] <- 2
theta[4, 3, 1] <- -2
theta[5, 4, 1] <- -2
theta[1, 1, 2] <- 2
theta[3, 2, 2] <- 2
theta[4, 3, 2] <- -2
theta[5, 4, 2] <- -2
theta[6, 1, 3] <- 2
theta[8, 2, 3] <- 2
theta[9, 3, 3] <- -2
theta[10, 4, 3] <- -2
theta[6, 1, 4] <- 2
theta[8, 2, 4] <- 2
theta[9, 3, 4] <- -2
theta[10, 4, 4] <- -2
theta[11, 1, 5] <- 2
theta[13, 2, 5] <- 2
theta[14, 3, 5] <- -2
theta[15, 4, 5] <- -2
theta[11, 1, 6] <- 2
theta[13, 2, 6] <- 2
theta[14, 3, 6] <- -2
theta[15, 4, 6] <- -2
library(MASS)
pliable <- matrix(0, N, 6)
for (e in 1:6) {
  pliable[, e] <- compute_pliable(X, Z, theta[, , e])
}
esd <- diag(6)
e <- MASS::mvrnorm(N, mu = rep(0, 6), Sigma = esd)
y_train <- X %*% Beta + pliable + e
y <- y_train
# colnames(y)<-c(1:6)
colnames(y) <- c(paste("y", 1:(ncol(y)), sep = ""))
TT <- tree_parms(y)
gg1 <- matrix(0, 2, 2)
gg1[1, ] <- c(0.02, 0.02)
gg1[2, ] <- c(0.2, 0.2)
nlambda <- 50
e.abs <- 1E-4
e.rel <- 1E-2
alpha <- .5
tol <- 1E-3
fit <- MADMMplasso(X, Z, y, alpha = alpha, my_lambda = NULL, lambda_min = 0.001, max_it = 5000, e.abs = e.abs, e.rel = e.rel, maxgrid = nlambda, nlambda = nlambda, rho = 5, tree = TT, my_print = FALSE, alph = 1, parallel = FALSE, pal = TRUE, gg = gg1, tol = tol)
#> Convergence reached after 31 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 43 iterations
#> Convergence reached after 43 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 43 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 47 iterations
#> Convergence reached after 50 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 56 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 70 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 78 iterations
#> Convergence reached after 81 iterations
#> Convergence reached after 85 iterations
#> Convergence reached after 89 iterations
#> Convergence reached after 47 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 51 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 55 iterations
#> Convergence reached after 57 iterations
#> Convergence reached after 58 iterations
#> Convergence reached after 60 iterations
#> Convergence reached after 62 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 67 iterations
#> Convergence reached after 68 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 71 iterations
#> Convergence reached after 72 iterations
#> Convergence reached after 73 iterations
#> Convergence reached after 73 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 75 iterations
#> Convergence reached after 76 iterations
#> Convergence reached after 76 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 78 iterations
#> Convergence reached after 78 iterations
#> Convergence reached after 78 iterations
gg1 <- fit$gg
cv_admp <- cv_MADMMplasso(fit, nfolds = 5, X, Z, y, alpha = alpha, lambda = fit$Lambdas, max_it = 5000, e.abs = e.abs, e.rel = e.rel, nlambda, rho = 5, my_print = FALSE, alph = 1, foldid = NULL, parallel = FALSE, pal = TRUE, gg = gg1, TT = TT, tol = tol)
#> Convergence reached after 37 iterations
#> Convergence reached after 37 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 47 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 47 iterations
#> Convergence reached after 50 iterations
#> Convergence reached after 55 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 56 iterations
#> Convergence reached after 57 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 64 iterations
#> Convergence reached after 67 iterations
#> Convergence reached after 72 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 82 iterations
#> Convergence reached after 87 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 97 iterations
#> Convergence reached after 102 iterations
#> Convergence reached after 109 iterations
#> Convergence reached after 115 iterations
#> Convergence reached after 122 iterations
#> Convergence reached after 66 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 73 iterations
#> Convergence reached after 76 iterations
#> Convergence reached after 79 iterations
#> Convergence reached after 82 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 87 iterations
#> Convergence reached after 90 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 94 iterations
#> Convergence reached after 95 iterations
#> Convergence reached after 96 iterations
#> Convergence reached after 98 iterations
#> Convergence reached after 99 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 101 iterations
#> Convergence reached after 102 iterations
#> Convergence reached after 102 iterations
#> Convergence reached after 103 iterations
#> Convergence reached after 104 iterations
#> Convergence reached after 104 iterations
#> Convergence reached after 105 iterations
#> Convergence reached after 41 iterations
#> Convergence reached after 46 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 55 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 44 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 58 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 79 iterations
#> Convergence reached after 83 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 96 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 105 iterations
#> Convergence reached after 110 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 68 iterations
#> Convergence reached after 70 iterations
#> Convergence reached after 72 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 79 iterations
#> Convergence reached after 81 iterations
#> Convergence reached after 83 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 86 iterations
#> Convergence reached after 87 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 89 iterations
#> Convergence reached after 90 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 39 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 43 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 43 iterations
#> Convergence reached after 46 iterations
#> Convergence reached after 50 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 62 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 73 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 83 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 97 iterations
#> Convergence reached after 102 iterations
#> Convergence reached after 107 iterations
#> Convergence reached after 112 iterations
#> Convergence reached after 118 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 66 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 71 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 79 iterations
#> Convergence reached after 82 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 86 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 90 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 93 iterations
#> Convergence reached after 94 iterations
#> Convergence reached after 95 iterations
#> Convergence reached after 96 iterations
#> Convergence reached after 97 iterations
#> Convergence reached after 98 iterations
#> Convergence reached after 99 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 101 iterations
#> Convergence reached after 101 iterations
#> Convergence reached after 102 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 52 iterations
#> Convergence reached after 52 iterations
#> Convergence reached after 50 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 52 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 53 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 57 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 67 iterations
#> Convergence reached after 70 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 81 iterations
#> Convergence reached after 85 iterations
#> Convergence reached after 89 iterations
#> Convergence reached after 95 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 105 iterations
#> Convergence reached after 56 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 64 iterations
#> Convergence reached after 67 iterations
#> Convergence reached after 69 iterations
#> Convergence reached after 72 iterations
#> Convergence reached after 75 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 79 iterations
#> Convergence reached after 81 iterations
#> Convergence reached after 83 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 86 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 90 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 94 iterations
#> Convergence reached after 95 iterations
#> Convergence reached after 96 iterations
#> Convergence reached after 97 iterations
#> Convergence reached after 98 iterations
#> Convergence reached after 98 iterations
#> Convergence reached after 99 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 42 iterations
#> Convergence reached after 52 iterations
#> Convergence reached after 57 iterations
#> Convergence reached after 48 iterations
#> Convergence reached after 46 iterations
#> Convergence reached after 44 iterations
#> Convergence reached after 45 iterations
#> Convergence reached after 46 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 48 iterations
#> Convergence reached after 49 iterations
#> Convergence reached after 50 iterations
#> Convergence reached after 54 iterations
#> Convergence reached after 58 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 71 iterations
#> Convergence reached after 77 iterations
#> Convergence reached after 82 iterations
#> Convergence reached after 89 iterations
#> Convergence reached after 95 iterations
#> Convergence reached after 100 iterations
#> Convergence reached after 105 iterations
#> Convergence reached after 110 iterations
#> Convergence reached after 59 iterations
#> Convergence reached after 61 iterations
#> Convergence reached after 63 iterations
#> Convergence reached after 65 iterations
#> Convergence reached after 68 iterations
#> Convergence reached after 70 iterations
#> Convergence reached after 72 iterations
#> Convergence reached after 74 iterations
#> Convergence reached after 76 iterations
#> Convergence reached after 78 iterations
#> Convergence reached after 80 iterations
#> Convergence reached after 81 iterations
#> Convergence reached after 83 iterations
#> Convergence reached after 84 iterations
#> Convergence reached after 85 iterations
#> Convergence reached after 86 iterations
#> Convergence reached after 87 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 88 iterations
#> Convergence reached after 89 iterations
#> Convergence reached after 90 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 91 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 92 iterations
#> Convergence reached after 92 iterations
s_ad <- which(cv_admp$lambda[, 1] == cv_admp$lambda.min)
print(fit$beta[[s_ad]])
#> 50 x 6 sparse Matrix of class "dgCMatrix"
#>                                                                      
#>  [1,] 1.932783336  1.924357361  .            .            .          
#>  [2,] 1.842556697  1.785615971  .           -0.014023030  .          
#>  [3,] 1.851813202  1.930390710  .            .            .          
#>  [4,] 1.905341902  1.879121040  .            .            0.009985256
#>  [5,] 1.995553057  1.908662378  .            .            0.001122245
#>  [6,] .            .            1.561019826  1.474884542  .          
#>  [7,] .            .            1.481321927  1.680940622  .          
#>  [8,] .            .            1.825968704  1.689887063  .          
#>  [9,] .           -0.046097852 -1.561676981 -1.659310229  .          
#> [10,] .            .           -1.825172412 -1.852150281  .          
#> [11,] .            .            0.079255379  .           -1.634118217
#> [12,] .            0.020630796  .            .           -1.795940506
#> [13,] .            .            .            .           -1.766903080
#> [14,] .            .           -0.003954695  .           -1.641047357
#> [15,] .            .            .           -0.065666500 -1.668932018
#> [16,] .            .            .           -0.044784773 -0.028893659
#> [17,] .            .            .            .            .          
#> [18,] .            .            .            .            .          
#> [19,] 0.013164902  .            .            .            0.002296439
#> [20,] .            .           -0.075709023 -0.001602451  .          
#> [21,] .            .            .            .            .          
#> [22,] .            .            0.076493497  .            .          
#> [23,] .            .            .            .            .          
#> [24,] .            .            .            .            .          
#> [25,] .            .            .            .            .          
#> [26,] .            .           -0.021297641  .            .          
#> [27,] .            .            0.028055520  .            .          
#> [28,] .            .            .            .            .          
#> [29,] .            0.036609118  .            .            .          
#> [30,] .            .            .            .           -0.210779457
#> [31,] .            .            .            .            .          
#> [32,] .            .            .            .            .          
#> [33,] .            .            .            .            .          
#> [34,] .            .            .            .            .          
#> [35,] .            .            .            .            .          
#> [36,] .            .            .            0.013054171  .          
#> [37,] .            .            .            .            .          
#> [38,] .            .            .            .            .          
#> [39,] .            .            .            .            .          
#> [40,] .            .            .            .            .          
#> [41,] .            0.014253410  .            .            .          
#> [42,] .           -0.003188221  .            .            .          
#> [43,] .            .            .            .            0.166158122
#> [44,] .            .            .            .            .          
#> [45,] 0.005129281  .            .            .            .          
#> [46,] .            .           -0.016695091  .            .          
#> [47,] .            .            .            .            .          
#> [48,] .            0.005291275  .            0.002492285  .          
#> [49,] .            .            .            .            .          
#> [50,] .            .           -0.026306536  .            .          
#>                   
#>  [1,]  .          
#>  [2,]  .          
#>  [3,] -0.008737992
#>  [4,]  .          
#>  [5,]  0.008419943
#>  [6,]  .          
#>  [7,]  .          
#>  [8,]  .          
#>  [9,]  .          
#> [10,]  .          
#> [11,] -1.744816346
#> [12,] -1.611201627
#> [13,] -1.592585819
#> [14,] -1.643865443
#> [15,] -1.716013535
#> [16,]  .          
#> [17,]  .          
#> [18,]  .          
#> [19,]  0.013721400
#> [20,]  .          
#> [21,]  .          
#> [22,]  .          
#> [23,]  .          
#> [24,]  .          
#> [25,]  .          
#> [26,]  .          
#> [27,]  .          
#> [28,]  .          
#> [29,]  .          
#> [30,] -0.029479503
#> [31,]  .          
#> [32,]  .          
#> [33,]  .          
#> [34,]  .          
#> [35,]  .          
#> [36,]  .          
#> [37,]  0.023856589
#> [38,]  .          
#> [39,]  .          
#> [40,]  .          
#> [41,]  .          
#> [42,]  .          
#> [43,]  0.198158135
#> [44,]  .          
#> [45,]  .          
#> [46,]  .          
#> [47,]  .          
#> [48,]  .          
#> [49,]  .          
#> [50,]  .

Created on 2024-03-11 with reprex v2.1.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment