Как создать цикл для настройки лямбда и альфа для эластичной сетки glmm? - PullRequest
0 голосов
/ 26 июня 2019

Я использую пакет MMS в R для проведения регрессии эластичной сети на GLMM.То, что я хочу сделать, это настроить лямбда (или mu, как это называется в пакете) и альфа-значения.Я хочу выбрать лучшую комбинацию альфа и лямбда.

В настоящее время я создал цикл for, который перебирает альфа значения от 0,1 до 0,9, и я пытаюсь сделать то же самое с альфа, но это не работает,Я хочу, чтобы для каждой альфы (скажем, 0,1) использовалось каждое лямбда-значение в последовательности.Например, для альфа = 0,1 я хочу попробовать lambda = seq (10, by = -1), и я хочу это для каждого альфа-значения.

mu <- seq(10, by = -1)

for (i in 1:9) {
  for (j in mu) {
    fit.name <- paste0("alpha ", i/10)
    list.of.fits[[fit.name]] <- lassop(X, Y, Z, grp = g, alpha = i/10, mu = j)
  }
}

Этот вывод для list.of.fits представляет собой список подгонок, использующих различные альфа-значения, но mu (лямбда) равен 1, когда я хочу, чтобы он повторял от 1 до 10 для каждого альфа-значения.

X = matrix of fixed effects, first column is intercept of 1
Y = vector of response variable
Z = 1 random effect
grp = group variable

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Вот еще одно решение, которое может быть быстрее.

mu <- seq(10)
alpha <- 1:9/10
df.of.params <- data.frame(expand.grid(mu, alpha))
names(df.of.params) <- c('mu', 'alpha')
list.of.params <- split(df.of.params, seq(nrow(df.of.params)))

list.of.fits <- mclapply(list.of.params, function(params) {
    lassop(X, Y, Z, grp = g, alpha = params$alpha, mu = params$mu)
})

Если вы хотите распараллелить, просто измените mclapply на обычный lapply.

0 голосов
/ 26 июня 2019

Это сработало!

list.of.fits <- list()


for (i in 1:9) {
  for (j in 1:10) {
    alpha.name <- paste0("alpha ", i/10)
    mu.name <- paste0("mu ", j)
    list.of.fits[[alpha.name]][[mu.name]] <- lassop(X, Y, Z, grp = g, alpha = i/10, mu = j)
  }
}
list.of.fits
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...