Page 1 of 1
looping through a list of independent variables
Posted: Mon Aug 29, 2016 12:09 pm
by adeldaoud
Hi
Has anyone figured out how to loop/iterate through a list of independent variables (and dependent variables)? Preferably with the doParrallel package, as Chris suggested here
https://www.cmm.bristol.ac.uk/forum/vie ... 43d352de0c
Suppose I want to iterate through the bang data with the following independent variable separately
Code: Select all
# (1) settings
library(doParallel)
library(R2MLwiN)
data(bang)
cl <- makeCluster(3)
registerDoParallel(cl) # register the cores
# this gives obviously an error since they are objects in the bang data. But I want them to eventually be part of the formula object defined below.
Focal_Independent_variables <- list(urban, age, hindu)
# (2) define the models to be passed to R2mlwin via doParallel
flist<-list(
list(logit(use, cons) ~ 1 + Focal_Independent_variables + (1 | district), D = "Binomial", estoptions = list(EstM = 0), data = bang))
result <- foreach(i=1:3, .packages="R2MLwiN", .errorhandling=c('pass')) %dopar% {
do.call(runMLwiN, flist[[i]])
}
Essentially, the question is how can I combine various parts of a formula objects of R2mlwin?
Re: looping through a list of independent variables
Posted: Wed Aug 31, 2016 1:23 pm
by ChrisCharlton
One possibility would be to build the required formulae as strings and then converting them into R formulae with the as.formula function (see
https://stat.ethz.ch/R-manual/R-devel/l ... rmula.html). An example of this would be as follows:
Code: Select all
# (1) settings
library(doParallel)
library(R2MLwiN)
data(bang)
cl <- makeCluster(3)
registerDoParallel(cl) # register the cores
# this gives obviously an error since they are objects in the bang data. But I want them to eventually be part of the formula object defined below.
Focal_Independent_variables <- c("urban", "age", "hindu")
# (2) define the models to be passed to R2mlwin via doParallel
flist<-list()
for (i in 1:length(Focal_Independent_variables)) {
flist[[i]] <- list(as.formula(paste0("logit(use, cons) ~ 1 +", Focal_Independent_variables[i], "+ (1 | district)")), D = "Binomial", estoptions = list(EstM = 0), data = bang)
}
result <- foreach::foreach(i=1:3, .packages="R2MLwiN", .errorhandling=c('pass')) %dopar% {
do.call(runMLwiN, flist[[i]])
}
stopCluster(cl)
Code: Select all
> result
[[1]]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
MLwiN (version: 2.36) multilevel model (Binomial)
N min mean max N_complete min_complete mean_complete max_complete
district 60 3 47.78333 173 60 3 47.78333 173
Estimation algorithm: IGLS MQL1 Elapsed time : 0.14s
Number of obs: 2867 (from total 2867) The model converged after 5 iterations.
Log likelihood: NA
Deviance statistic: NA
---------------------------------------------------------------------------------------------------
The model formula:
logit(use, cons) ~ 1 + urban + (1 | district)
Level 2: district Level 1: l1id
---------------------------------------------------------------------------------------------------
The fixed part estimates:
Coef. Std. Err. z Pr(>|z|) [95% Conf. Interval]
Intercept -0.65354 0.07607 -8.59 8.574e-18 *** -0.80263 -0.50445
urbanUrban 0.67291 0.09471 7.10 1.204e-12 *** 0.48728 0.85854
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
---------------------------------------------------------------------------------------------------
The random part estimates at the district level:
Coef. Std. Err.
var_Intercept 0.19017 0.05475
---------------------------------------------------------------------------------------------------
The random part estimates at the l1id level:
Coef. Std. Err.
var_bcons_1 1.00000 0.00000
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
[[2]]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
MLwiN (version: 2.36) multilevel model (Binomial)
N min mean max N_complete min_complete mean_complete max_complete
district 60 3 47.78333 173 60 3 47.78333 173
Estimation algorithm: IGLS MQL1 Elapsed time : 0.12s
Number of obs: 2867 (from total 2867) The model converged after 4 iterations.
Log likelihood: NA
Deviance statistic: NA
---------------------------------------------------------------------------------------------------
The model formula:
logit(use, cons) ~ 1 + age + (1 | district)
Level 2: district Level 1: l1id
---------------------------------------------------------------------------------------------------
The fixed part estimates:
Coef. Std. Err. z Pr(>|z|) [95% Conf. Interval]
Intercept -0.47850 0.07741 -6.18 6.361e-10 *** -0.63023 -0.32678
age 0.01331 0.00429 3.10 0.001941 ** 0.00489 0.02173
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
---------------------------------------------------------------------------------------------------
The random part estimates at the district level:
Coef. Std. Err.
var_Intercept 0.23992 0.06435
---------------------------------------------------------------------------------------------------
The random part estimates at the l1id level:
Coef. Std. Err.
var_bcons_1 1.00000 0.00000
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
[[3]]
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
MLwiN (version: 2.36) multilevel model (Binomial)
N min mean max N_complete min_complete mean_complete max_complete
district 60 3 47.78333 173 60 3 47.78333 173
Estimation algorithm: IGLS MQL1 Elapsed time : 0.14s
Number of obs: 2867 (from total 2867) The model converged after 5 iterations.
Log likelihood: NA
Deviance statistic: NA
---------------------------------------------------------------------------------------------------
The model formula:
logit(use, cons) ~ 1 + hindu + (1 | district)
Level 2: district Level 1: l1id
---------------------------------------------------------------------------------------------------
The fixed part estimates:
Coef. Std. Err. z Pr(>|z|) [95% Conf. Interval]
Intercept -0.53815 0.07835 -6.87 6.484e-12 *** -0.69171 -0.38459
hinduHindu 0.39805 0.11845 3.36 0.0007779 *** 0.16590 0.63021
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
---------------------------------------------------------------------------------------------------
The random part estimates at the district level:
Coef. Std. Err.
var_Intercept 0.23016 0.06220
---------------------------------------------------------------------------------------------------
The random part estimates at the l1id level:
Coef. Std. Err.
var_bcons_1 1.00000 0.00000
-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
Re: looping through a list of independent variables
Posted: Thu Sep 29, 2016 4:05 pm
by adeldaoud
Sorry for the late reply. This works perfectly.
Thanks Chris