4.4 Climate resilience

Purpose of indicator

Climate change is affecting food systems around the world, with temperatures and precipitation anomalies and extreme events leading to crop/livestock losses, altering species ranges, creating agricultural water stress, altering working conditions and triggering human migration. Building farm and food system resilience to climate change and other major stressors (e.g. pandemics, war) is fundamental to prevent food and livelihood insecurity (SDG 1, 2), and avoidable loss of life (SDG 3, 15).

Key Metadata

Metadata Item Description
Indicator Name Resilience score
Theme Climate resilience
SDGs Targeted SDG1, SDG2, SDG3, SDG15
Data Source Household survey
Measurement Resilience score adapted from RIMA
Measurement Units Score 0-20

Guidance on Measurement

Resilience is the capacity of socioeconomic systems (e.g., households) to withstand shocks through adaptation and transformation.

FAO’s Resilience Index Measurement and Analysis (RIMA) is one way to measure resilience. FAO computes a Resilience Capacity Index (RCI) based on data collected across four pillars:

  1. Access to basic services (ABS)
  2. Assets (AST)
  3. Social safety nets (SSN)
  4. Adaptive capacity (AC)

FAO calculates the RCI using structural equation modelling (SEM), combining Confirmatory Factor Analysis and Path Analysis. There are two steps: 1) estimate resilience of each pillar through Factor Analysis (FA), 2) calculate a resilience index from the pillars, using Ordinary Least Squares with the outcome variable being a food security indicator(s) such as dietary diversity score. The benefit of this approach is that is possible to quantify the contribution of each pillar to the overall resilience. The limitation is that the RCI depends heavily on which indicator is used as the outcome variable which does not capture the variation across the four pillars.

For HOLPA, we adapt the FAO approach to directly combine the data from the four pillars into a measure of resilience scaled from 0-20. This can be done by assigning scores of 0-5 to all responses, then taking the mean within each pillar, and summing scores across the four pillars according to the following table:

Pillar Question Score assigned to response
ABS Does your farm/household have the following services: 1) Drinking water piped to the household, 2) Toilet with piped sewer or septic tank, 3) Electrical energy, 4) Waste (rubbish) collection service, 5) Mobile phone reception, 6) Internet. [Count services] 5: 3 or more; 2.5: 1-2; 0: None
ABS How far (one way) is the household from the closest accessible and functioning service in minutes (walking): 1) Freshwater source, 2) primary school, 3) public hospital or health facility, 4) livestock market 5) agricultural/crops market, 6) public means of transport, 7) well-maintained road suitable for cars. For each service: 5: <5 mins; 2.5: 5-20 mins; 0: > 20 mins
AST How many of the following assets do household members own: 1) Car, 2) Motorbike, 3) Bicycle, 4) Gas or electric cooker, 5) Mobile phone, 6) Ox-plough, 7) Tractor, 8) Machete. [Count assets] 5: 5 or more distinct asset types; 2.5: 2-4; 0: 0-1
SSN On average, how many school meals have the children living in the household received per week, during the last month of attending school? 5: 5 meals; 4: 4 meals; 3: 3 meals; 2: 2 meals; 1: 1 meal; 0: 0 meals
SSN Would any of the following individuals or organisations provide your household support in case of need: 1) local farmer associations or cooperatives, 2) other local associations (e.g. women support groups, youth groups), 3) individuals from my community, 4) individuals from a different community, 5) community leaders, 6) NGOs 8) local government, 9) national government, 10) other (please specify). [Count sources] 5: 3 or more; 2.5: 1-2; 0: None
AC Can the head of household read and write in any language? 5: Can read and write; 2.5: Can read or write; 0: Cannot read or write, or prefer not to say
AC On average, how many years have the household members of working age (>14 and <65 years old) attended formal school? 5: ≥7 (Secondary or higher); 2.5: <7 (Primary only); 0: 0 (None)
AC Has any household member received training in the last 12 months? 5: Y; 0: N
AC In the past 12 months, what were all the household’s sources of income: 1) Agriculture, animal breeding, fishing, 2) Other family business, 3) Government salary, 4) private sector salary, 5) Cash transfers (e.g. transfers from absent family members, donations), 6) Other (please specify) [count sources] 5: 3 or more sources; 2.5: 2 sources; 0: 1 source
AC In the past 7 days, what percentage of the household’s income was used for buying food 5: 0-25%; 3.33: 26-50%; 1.66: 51-75%; 0: 76-100%
AC In the past 5 years, has your farm/household had access to credit to support investment in your farming business. 5: Y; 0: N, or I don’t know
AC How do you feel about your farm/household’s ability to meet credit repayments now and until the loans are fully repaid? 5: Full repayments; 3.33: Uncertain future repayments; 1.66: Uncertain current repayments; 0: Uncertain current and future repayments
AC Do you have access to crop insurance? If yes, what is covered, e.g. losses from weather events, pest outbreaks market shocks? 5: Y; 0: N
AC Do you have access to subsidies for agricultural inputs? If yes, which inputs 5: Y; 0: N

Additionally, HOLPA collects data on household exposure to shocks over the last 12 months and any coping mechanisms employed.

Guidance on Data Entry and Reporting

no information is available

Calculation Method

1. Access to basic services (ABS)


  ## Access to basic services (ABS)

  abs1 <- main_surveys %>%
    select(
      farm_id,
      owner_id,
      submission_id,
      starts_with("distanceunit"),
      starts_with("transportation_"),
      starts_with("distance")
    ) %>%
    pivot_longer(
      cols = distanceunit_farmland:distance_freshwater,
      names_to = c(".value", "place"),
      names_sep = "_"
    ) %>%
    mutate(
      transportation = ifelse(distanceunit == "km", NA, transportation)
    ) %>%
    mutate(
      distance = ifelse(distance %in% c(99, 999, 9999, 99999), NA, distance)
    ) %>% #move to cleaning script
    mutate(
      walking_time = case_when(
        distanceunit == "km" ~ (distance / 5) * 60,
        transportation %in% c("motorbike", "car") ~ distance * 10,
        transportation == "cycling" ~ distance * 3,
        transportation %in% c("horse", "donkey") ~ distance * 2,
        transportation == "walking" ~ distance
      )
    ) %>%
    mutate(
      walking_time_score = case_when(
        walking_time < 5 ~ 5,
        walking_time < 20 ~ 2.5,
        walking_time >= 20 ~ 0
      )
    ) %>%
    group_by(farm_id, owner_id, submission_id) %>%
    summarise(ABS_service_access = mean(walking_time_score, na.rm = TRUE))

  abs2 <- main_surveys %>%
    select(
      farm_id,
      owner_id,
      submission_id,
      piped_drinking_water,
      piped_toilet,
      electricity,
      waste_collection,
      phone_reception,
      internet
    ) %>%
    mutate_at(vars(piped_drinking_water:internet), as.numeric) %>%
    rowwise() %>%
    mutate(
      ABS_utilities = sum(c_across(piped_drinking_water:internet), na.rm = TRUE)
    ) %>%
    mutate(
      ABS_utilities = case_when(
        ABS_utilities >= 3 ~ 5,
        ABS_utilities > 0 ~ 2.5,
        ABS_utilities == 0 ~ 0
      )
    ) %>%
    select(farm_id, owner_id, submission_id, ABS_utilities)

  abs <- full_join(abs1, abs2) %>%
    rowwise() %>%
    mutate(
      ABS_score = mean(c_across(ABS_service_access:ABS_utilities), na.rm = TRUE)
    )

2. Assets (AST)


  ### Assets (AST)
  ast <- main_surveys %>%
    select(
      farm_id,
      owner_id,
      submission_id,
      cars:crop_facilities,
      asset_other_count
    ) %>%
    mutate_at(vars(cars:asset_other_count), as.numeric) %>%
    mutate_at(vars(cars:asset_other_count), function(x) ifelse(x > 0, 1, 0)) %>%
    rowwise() %>%
    mutate(asset_sum = sum(c_across(cars:asset_other_count), na.rm = TRUE)) %>%
    mutate(
      AST_score = case_when(
        asset_sum >= 3 ~ 5,
        asset_sum > 0 ~ 2.5,
        asset_sum == 0 ~ 0
      )
    ) %>%
    select(farm_id, owner_id, submission_id, AST_score)

3. Social safety nets (SSN)


  ## SOCIAL Safety Nets (SSN)

  ssn <- main_surveys %>%
    select(
      farm_id,
      owner_id,
      submission_id,
      "SSN_school_meals" = free_school_meals,
      starts_with("support_")
    ) %>%
    mutate_at(vars(starts_with("support_")), as.numeric) %>%
    mutate_at(vars(starts_with("support_")), function(x) na_if(x, 999)) %>%
    mutate(SSN_school_meals = as.numeric(SSN_school_meals)) %>%
    rowwise() %>%
    mutate(
      SSN_hh_support = sum(c_across(starts_with("support_")), na.rm = TRUE)
    ) %>%
    mutate(
      SSN_hh_support = case_when(
        SSN_hh_support >= 3 ~ 5,
        SSN_hh_support > 0 ~ 2.5,
        SSN_hh_support == 0 ~ 0
      )
    ) %>%
    mutate(
      SSN_score = mean(
        c_across(c(SSN_school_meals, SSN_hh_support)),
        na.rm = TRUE
      )
    )

4. Adaptive capacity (AC)


  ## ADAPTIVE CAPACITY PILLAR

  ac <- main_surveys %>%
    select(
      farm_id,
      owner_id,
      submission_id,
      read_write,
      highest_education_male,
      highest_education_female,
      agricultural_training,
      business_training,
      other_training_yn,
      income_count,
      food_expenditure_percent,
      credit_access,
      debt_repayment,
      debt,
      agricultural_loss_insurance,
      subsidies
    ) %>%
    mutate_at(
      vars(
        read_write,
        highest_education_male,
        highest_education_female,
        agricultural_training,
        business_training,
        other_training_yn,
        income_count,
        credit_access,
        debt_repayment,
        debt,
        agricultural_loss_insurance,
        subsidies
      ),
      as.numeric
    ) %>%
    mutate(
      AC_literacy = case_when(
        read_write == 3 ~ 5,
        read_write %in% c(1, 2) ~ 2.5,
        read_write %in% c(0, 777) ~ 0
      ),
      highest_education_male = case_when(
        highest_education_male >= 2 ~ 5,
        highest_education_male == 1 ~ 2.5,
        highest_education_male == 0 ~ 0
      ),
      highest_education_female = case_when(
        highest_education_female >= 2 ~ 5,
        highest_education_female == 1 ~ 2.5,
        highest_education_female == 0 ~ 0
      ),
      AC_training = ifelse(
        agricultural_training == 1 |
          business_training == 1 |
          other_training_yn == 1,
        5,
        0
      ),
      AC_income_sources = case_when(
        #FLAG AS NOT CURRENRLY POSSIBLE TO EQUAL 0
        income_count >= 3 ~ 5,
        income_count > 0 ~ 2.5,
        income_count == 0 ~ 0
      ),
      AC_food_expenditure = case_when(
        food_expenditure_percent %in% c("0", "1_25") ~ 5,
        food_expenditure_percent == "26_50" ~ 3.33,
        food_expenditure_percent == "51_75" ~ 1.66,
        food_expenditure_percent == "76_100" ~ 0
      ),
      AC_credit_access = case_when(
        credit_access == 2 ~ 5,
        credit_access == 999 ~ NA,
        .default = 0
      ),
      AC_credit_repayment = case_when(
        credit_access == 2 & debt == 1 ~ 5,
        debt_repayment == 4 ~ 5,
        debt_repayment == 3 ~ 3.33,
        debt_repayment == 2 ~ 1.66,
        debt_repayment == 1 | credit_access %in% c(1, 0) ~ 0
      ),
      AC_insurance = case_when(
        agricultural_loss_insurance > 0 ~ 5,
        agricultural_loss_insurance == 0 ~ 0
      ),
      AC_subsidies = case_when(
        subsidies == 1 ~ 5,
        subsidies == 0 ~ 0
      )
    ) %>%
    rowwise() %>%
    mutate(
      AC_education = mean(
        c_across(c(highest_education_male, highest_education_female)),
        na.rm = TRUE
      )
    ) %>%
    mutate(AC_score = mean(c_across(starts_with("AC_")), na.rm = TRUE))

Overall RIMA Calculation

Requires calculating the 4 sub-indicators above


  ## Calculate the overall Resilience Index Measurement and Analysis score

  RIMA <- abs %>%
    select(farm_id, owner_id, submission_id, ABS_score) %>%
    left_join(ast %>% select(farm_id, owner_id, submission_id, AST_score)) %>%
    left_join(ssn %>% select(farm_id, owner_id, submission_id, SSN_score)) %>%
    left_join(ac %>% select(farm_id, owner_id, submission_id, AC_score)) %>%
    rowwise() %>%
    mutate(
      kpi14a_climate_resilience = sum(
        c_across(ends_with("_score")),
        na.rm = TRUE
      )
    )

  ### include the new variables in the performance_indicators data frame
  performance_indicators <- performance_indicators %>%
    left_join(
      RIMA %>%
        select(farm_id, owner_id, submission_id, kpi14a_climate_resilience)
    ) %>%
    left_join(
      main_surveys %>%
        mutate(kpi14b_climate_resilience = as.numeric(capacity_to_recover)) %>%
        select(farm_id, owner_id, submission_id, kpi14b_climate_resilience)
    )

Indicator Interpretation and Threshold Setting

no information is available

Limitations

The RIMA methodology has been criticized for failing to reliably predict future household resilience in terms of food security (Upton et al. 2022). In a review of resilience indices presented in Upton et al. (2022), the best-performing food security resilience indicator, which was the one developed by Cissé and Barrett (2018), achieved only modest overall accuracy in classifying food-insecure households in their application, whereas other approaches (RIMA and TANGO) performed no better than random chance. Furthermore, none of the resilience measures predicted significantly better than the far simpler approach of using the most recent observed value of wellbeing to predict future wellbeing. Therefore, Upton et al. (2022) argue, the value added in terms of predictive and targeting performance by these measures remains unclear. Overall, Upton et al. (2022) conclude that “the approaches presently in play are all, at best, imperfect, and at worst deeply flawed.”

Currently, there is a shortage of alternative resilience indicators suitable for inclusion in a holistic survey (that is, robust yet not requiring time-consuming data collection). The World Bank is working on a Causal machine Learning Approach to Resilience Estimation (CLARE), which is rooted in an impact evaluation framework and causal machine learning algorithms applied to longitudinal household survey data. The indicator is model-agnostic, data-driven, scalable, and normatively anchored to wellbeing thresholds, and can be either shock-specific or a general-purpose resilience metric. CLARE is calculated using data on food consumption, food insecurity, drought, shocks, gender, household size and demographic structure, assets and access to services. However, the reliance on repeat survey data may present a constraint to use in projects with short timespans or limited resources.

References