IPAQ-E
The International Physical Activity Questionnaire Environment Module (IPAQ-E)
Measuring: Assess environmental factors for physical activity participation; Residential density - Item 1, Access to destinations - Item 2, Item 3, Item 6, Neighbourhood’s infrastructure - Item 4, Item 5, and Neighbourhood safety - Item 7.
Number of Items: 7
| Item | Question Wording | TILDA Variable |
|---|---|---|
| 1 | What is the main type of housing in your neighbourhood? | SCQIPAQE1 |
| 2 | Many shops are within walking distance of my home. | SCQIPAQE2 |
| 3 | It is within a 10- to 15-min walk to a transit stop from my home. | SCQIPAQE3 |
| 4 | There are sidewalks on most of the streets in my neighbourhood. | SCQIPAQE4 |
| 5 | There are facilities to bicycle in or near my neighbourhood. | SCQIPAQE5 |
| 6 | My neighbourhood has several free or low-cost recreation facilities. | SCQIPAQE6 |
| 7 | The crime rate in my neighbourhood makes it unsafe to go on walks at night. | SCQIPAQE7 |
Scoring Method:
Response options differ dependent on item. All 5-point Likert scale.
The TILDA version of the IPAQ Environmental Module includes seven core items covering four aspects of the neighbourhood environment: residential density, access to destinations, neighbourhood infrastructure, and neighbourhood safety.
Item 1.
1 = Detached single-family housing.
2 = Townhouses, row houses, apartments, or condos of 2-3 stories.
3 = Mix of single-family residences and townhouses, row houses, apartments or condos.
4 = Apartments or condos of 4-12 stories.
5 = Apartments or condos of more than 12 stories.
Items 2 – 7.
1 = Strongly Disagree.
2 = Somewhat Disagree.
3 = Somewhat Agree.
4 = Strongly Agree.
5 = Don’t Know/Not Sure.
- There are four measures generated from this scale;
Four domain scores are generated:
Residential density (Item 1)
Access to destinations (mean of Item 2, Item 3, Item 6)
Neighbourhood’s infrastructure (mean of Item 4 - Item 5)
Neighbourhood safety (reverse scored Item 7)
Item 1 assesses residential density and is scored separately: detached single-family housing is coded 0, while all other housing types are coded 1, with higher values indicating greater residential density.
Items 2–6 are scored on a 4-point Likert scale from 1 = Strongly disagree to 4 = Strongly agree. A response of 5 = Don’t know/Not sure is treated as missing. Higher scores indicate a more favourable neighbourhood environment.
Item 7 assesses perceived neighbourhood safety and is negatively worded. It is reverse scored so that higher values indicate greater perceived safety.
The access and infrastructure domains are calculated as mean scores and therefore range from 1 to 4. The safety score also ranges from 1 to 4, with higher scores indicating a more favourable neighbourhood environment. Residential density is coded 0–1.
Citation: Oyeyemi, A.L., Adegoke, B.O., Oyeyemi, A.Y. et al. Test-retest reliability of IPAQ environmental- module in an African population. Int J Behav Nutr Phys Act 5, 38 (2008). https://doi.org/10.1186/1479-5868-5-38
Code
*---------------------------------------------------------------*
* Recode no-response values
*---------------------------------------------------------------*
mvdecode SCQIPAQE1-SCQIPAQE7, mv(-99=.)
* Items 2-7: 5 = Don't know / Not sure
foreach var of varlist SCQIPAQE2-SCQIPAQE7 {
replace `var' = . if `var' == 5
}
*---------------------------------------------------------------*
* Residential density
* Item 1
*---------------------------------------------------------------*
gen IPAQE_density = .
replace IPAQE_density = 0 if SCQIPAQE1 == 1
replace IPAQE_density = 1 if inrange(SCQIPAQE1, 2, 5)
label variable IPAQE_density ///
"IPAQ-E residential density (0=detached, 1=other housing)"
*---------------------------------------------------------------*
* Access to destinations
* Items 2, 3 and 6
* Mean score range: 1-4
*---------------------------------------------------------------*
egen IPAQE_access = rowmean( ///
SCQIPAQE2 ///
SCQIPAQE3 ///
SCQIPAQE6 ///
)
* Require all three items
egen IPAQE_access_missing = rowmiss( ///
SCQIPAQE2 ///
SCQIPAQE3 ///
SCQIPAQE6 ///
)
replace IPAQE_access = . if IPAQE_access_missing > 0
label variable IPAQE_access ///
"IPAQ-E access to destinations mean score (1-4)"
*---------------------------------------------------------------*
* Neighbourhood infrastructure
* Items 4 and 5
* Mean score range: 1-4
*---------------------------------------------------------------*
egen IPAQE_infrastructure = rowmean( ///
SCQIPAQE4 ///
SCQIPAQE5 ///
)
* Require both items
egen IPAQE_infrastructure_missing = rowmiss( ///
SCQIPAQE4 ///
SCQIPAQE5 ///
)
replace IPAQE_infrastructure = . ///
if IPAQE_infrastructure_missing > 0
label variable IPAQE_infrastructure ///
"IPAQ-E neighbourhood infrastructure mean score (1-4)"
*---------------------------------------------------------------*
* Neighbourhood safety
* Item 7 - reverse scored
*---------------------------------------------------------------*
gen IPAQE_safety = 5 - SCQIPAQE7 ///
if inrange(SCQIPAQE7, 1, 4)
label variable IPAQE_safety ///
"IPAQ-E neighbourhood safety score (1-4)"
*---------------------------------------------------------------*
* Checks
*---------------------------------------------------------------*
summarize ///
IPAQE_density ///
IPAQE_access ///
IPAQE_infrastructure ///
IPAQE_safety
tab IPAQE_density, missing
tab IPAQE_safety, missing
*---------------------------------------------------------------*
* Drop temporary variables
*---------------------------------------------------------------*
drop IPAQE_access_missing IPAQE_infrastructure_missing# ---------------------------------------------------------------
# Recode no-response values
# ---------------------------------------------------------------
ipaqe_items <- paste0("SCQIPAQE", 1:7)
for (v in ipaqe_items) {
data[[v]][!is.na(data[[v]]) & data[[v]] == -99] <- NA_real_
}
# Items 2-7: 5 = Don't know / Not sure
for (v in paste0("SCQIPAQE", 2:7)) {
data[[v]][!is.na(data[[v]]) & data[[v]] == 5] <- NA_real_
}
# ---------------------------------------------------------------
# Residential density
# Item 1
# ---------------------------------------------------------------
data$IPAQE_density <- NA_real_
data$IPAQE_density[
!is.na(data$SCQIPAQE1) & data$SCQIPAQE1 == 1
] <- 0
data$IPAQE_density[
!is.na(data$SCQIPAQE1) &
data$SCQIPAQE1 >= 2 &
data$SCQIPAQE1 <= 5
] <- 1
attr(data$IPAQE_density, "label") <-
"IPAQ-E residential density (0=detached, 1=other housing)"
# ---------------------------------------------------------------
# Access to destinations
# Items 2, 3 and 6
# Mean score range: 1-4
# ---------------------------------------------------------------
access_items <- c("SCQIPAQE2", "SCQIPAQE3", "SCQIPAQE6")
# Calculate row mean, then require all three items to be present
data$IPAQE_access <- rowMeans(data[access_items], na.rm = TRUE)
data$IPAQE_access_missing <- rowSums(is.na(data[access_items]))
data$IPAQE_access[
data$IPAQE_access_missing > 0
] <- NA_real_
attr(data$IPAQE_access, "label") <-
"IPAQ-E access to destinations mean score (1-4)"
# ---------------------------------------------------------------
# Neighbourhood infrastructure
# Items 4 and 5
# Mean score range: 1-4
# ---------------------------------------------------------------
infrastructure_items <- c("SCQIPAQE4", "SCQIPAQE5")
# Calculate row mean, then require both items to be present
data$IPAQE_infrastructure <- rowMeans(
data[infrastructure_items],
na.rm = TRUE
)
data$IPAQE_infrastructure_missing <- rowSums(
is.na(data[infrastructure_items])
)
data$IPAQE_infrastructure[
data$IPAQE_infrastructure_missing > 0
] <- NA_real_
attr(data$IPAQE_infrastructure, "label") <-
"IPAQ-E neighbourhood infrastructure mean score (1-4)"
# ---------------------------------------------------------------
# Neighbourhood safety
# Item 7 - reverse scored
# ---------------------------------------------------------------
data$IPAQE_safety <- NA_real_
valid_safety <- !is.na(data$SCQIPAQE7) &
data$SCQIPAQE7 >= 1 &
data$SCQIPAQE7 <= 4
data$IPAQE_safety[valid_safety] <-
5 - data$SCQIPAQE7[valid_safety]
attr(data$IPAQE_safety, "label") <-
"IPAQ-E neighbourhood safety score (1-4)"
# ---------------------------------------------------------------
# Checks
# ---------------------------------------------------------------
summary(data[c(
"IPAQE_density",
"IPAQE_access",
"IPAQE_infrastructure",
"IPAQE_safety"
)])
table(data$IPAQE_density, useNA = "ifany")
table(data$IPAQE_safety, useNA = "ifany")
# ---------------------------------------------------------------
# Drop temporary variables
# ---------------------------------------------------------------
data$IPAQE_access_missing <- NULL
data$IPAQE_infrastructure_missing <- NULL
* ---------------------------------------------------------------.
* Recode no-response values.
* ---------------------------------------------------------------.
RECODE SCQIPAQE1 TO SCQIPAQE7
(-99 = SYSMIS).
* Items 2-7: 5 = Don't know / Not sure.
RECODE SCQIPAQE2 TO SCQIPAQE7
(5 = SYSMIS).
* ---------------------------------------------------------------.
* Residential density.
* Item 1.
* ---------------------------------------------------------------.
COMPUTE IPAQE_density = $SYSMIS.
IF (SCQIPAQE1 = 1) IPAQE_density = 0.
IF (RANGE(SCQIPAQE1, 2, 5)) IPAQE_density = 1.
VARIABLE LABELS IPAQE_density
"IPAQ-E residential density (0=detached, 1=other housing)".
* ---------------------------------------------------------------.
* Access to destinations.
* Items 2, 3 and 6.
* Mean score range: 1-4.
* ---------------------------------------------------------------.
COMPUTE IPAQE_access = MEAN(
SCQIPAQE2,
SCQIPAQE3,
SCQIPAQE6
).
* Require all three items.
COMPUTE IPAQE_access_missing = NMISS(
SCQIPAQE2,
SCQIPAQE3,
SCQIPAQE6
).
IF (IPAQE_access_missing > 0) IPAQE_access = $SYSMIS.
VARIABLE LABELS IPAQE_access
"IPAQ-E access to destinations mean score (1-4)".
* ---------------------------------------------------------------.
* Neighbourhood infrastructure.
* Items 4 and 5.
* Mean score range: 1-4.
* ---------------------------------------------------------------.
COMPUTE IPAQE_infrastructure = MEAN(
SCQIPAQE4,
SCQIPAQE5
).
* Require both items.
COMPUTE IPAQE_infrastructure_missing = NMISS(
SCQIPAQE4,
SCQIPAQE5
).
IF (IPAQE_infrastructure_missing > 0)
IPAQE_infrastructure = $SYSMIS.
VARIABLE LABELS IPAQE_infrastructure
"IPAQ-E neighbourhood infrastructure mean score (1-4)".
* ---------------------------------------------------------------.
* Neighbourhood safety.
* Item 7 - reverse scored.
* ---------------------------------------------------------------.
COMPUTE IPAQE_safety = $SYSMIS.
IF (RANGE(SCQIPAQE7, 1, 4))
IPAQE_safety = 5 - SCQIPAQE7.
VARIABLE LABELS IPAQE_safety
"IPAQ-E neighbourhood safety score (1-4)".
* ---------------------------------------------------------------.
* Checks.
* ---------------------------------------------------------------.
DESCRIPTIVES VARIABLES=
IPAQE_density
IPAQE_access
IPAQE_infrastructure
IPAQE_safety.
FREQUENCIES VARIABLES=
IPAQE_density
IPAQE_safety
/MISSING=INCLUDE.
* ---------------------------------------------------------------.
* Drop temporary variables.
* ---------------------------------------------------------------.
DELETE VARIABLES
IPAQE_access_missing
IPAQE_infrastructure_missing.
EXECUTE.