When you include a term like (1|country/region) in your model, that is equivalent with including the following two terms: (1|country) and (1|region:country). See the Cross Validated post Crossed vs nested random effects: how do they differ and how are they specified correctly in lme4? for details.
This means that you can replace a model formulation like:
model1a <- glmer(participation ~ Education + income + (1|country/region),
data = NorthAfrica,
family = 'binomial')
with
model1b <- glmer(participation ~ Education + income + (1|country) + (1|region:country),
data = NorthAfrica,
family = 'binomial')
The two model formulations are equivalent and allow for a random intercept for country and a random intercept for region nested within country. The second formulation is however more flexible as it allows you to include random slopes for predictor variables at the appropriate level of your data hierarchy. For instance, if you would like the effect of education to vary at the region level, you would use a model formulation like this:
model2 <- glmer(participation ~ Education + income + (1|country) + (1 + Education|region:country),
data = NorthAfrica,
family = 'binomial')
This model formulation assumes that each study subject within a region comes with his/her own value for Education. If each study subject also came with his/her own income value, you could expand the above model to also include a random slope for income:
model3 <- glmer(participation ~ Education + income + (1|country) + (1 + Education + income|region:country),
data = NorthAfrica,
family = 'binomial')
To sum up, your data hierarchy includes 3 levels:
countries
regions
subjects
The region and the country are considered as random grouping factors, with region nested within country. To reflect this data hierarchy, your model should include, at a minimum, random intercepts for country and region nested within country:
(1|country) + (1|region:country)
If you have a predictor variable measured for each subject (e.g., income), you can include a random slope for it in your model like so:
(1|country) + (1 + income|region:country)
This is telling the model that the effect of that predictor (e.g., income) varies across regions (nested within countries).
If you have a predictor variable measured for each region (say, proportion of people with graduate and post-graduate education in the region), then you can include a random slope for that predictor in your model as follows:
(1 + proportion|country) + (1|region:country)
This is telling the model that the effect of the proportion predictor varies across countries.
If your predictor is measured for the entire country (e.g., proportion of people with graduate and post-graduate degrees in the country), then you cannot include a random slope for it in your model - to do that, you would need an additional level for your data hierarchy determined by a random grouping factor (e.g., continent).