There are several ways of measuring poverty rate. One is through income or expenditure. For example, since 2011, the World Bank has set a cutoff of $1.90 a day income in determining extreme poverty. Using expenditure (real), you divide total household expenditure per day by total adult equivalence. A household is then classified as poor if it falls below the poverty line.

Multidimensional poverty index (MPI) is currently used by UNEP as a global poverty index and has been adapted in SDGs. MPI is based on Alkire-Foster method. MPI reveals a different pattern of poverty than income poverty, as it illuminates a different set of deprivations. The MPI has three dimensions: health, education, and standard of living. A person is identified as multidimensionally poor (or ‘MPI poor’) if he/she is deprived in at least one third (33.3%) of the weighted sum of all relevant indicators. To be deprived means that one fall below the weighted score in each dimension. The following dimensions and indicators are used in coming up with the MPI.

  1. Health (each indicator weighted equally at 1/6)
    • Child Mortality: If any child has died in the family
    • Nutrition: If any adult or child in the family is malnourished.
  2. Education (each indicator weighted equally at 1/6 )
    • Years of Schooling (if no household member has completed 5 years of schooling )
    • Child Enrolment (if any school-aged child is out of school in years 1 to 8)
  3. Standard of Living (each of the six indicators weighted equally at 1/18)
    • Electricity (no electricity is poor)
    • Safe drinking water (The household does not have access to safe drinking water, or safe water is more than a 45-minute walk
    • Sanitation (sanitation facility is not improved, or it is improved but shared with other households)
    • Flooring (dirt/sand/dung are poor)
    • Cooking Fuel (wood/charcoal/dung are poor)
    • Assets (poor if do not own more than one of: radio, tv, telephone, bike, motorbike)

Calculation of MPI

MPI is calculated as follows:

\[\begin{equation} MPI=H\times A \end{equation}\]
Where
* A is the intensity of poverty i.e. average percentage of dimensions in which poor people are deprived
* H Is the percentage of people who are poor, i.e. headcount ratio

If a person is deprived in 20-33.3% of the weighted indicators the person is considered ‘Vulnerable to Poverty’, and if deprived in 50% or more (i.e. k=50%), the person is identified as being in ‘Severe Poverty’.

The example that I will use is based on a survey (I have generated the data) and has the three dimensions. Indicators that I have used differ slightly with those listed earlier. Weights applied are clearly indicated.

  1. Health With each indicator having a weight of 1/6
    • Nutrition: Based on HDDs of each family, poor if household consume<=3 diets
    • Health status: A respondent is asked to give an overall scale (1 to 3) of health status of a family. A scale of 1 is poor
  2. Education Has one indicator with a score of 1/3
    • Child Enrolment (if any school-aged child is out of school in years 1 to 8)
  3. Standard of Living (each of the five indicators weighted equally at 1/15)
    • Safe drinking water (safe water is more than a 30-minute walk
    • Sanitation (sanitation facility is not improved, or it is improved but shared with other households)
    • Flooring (dirt/sand/dung are poor)
    • Cooking Fuel (wood/charcoal/dung are poor)
    • Assets (poor if do not own more than one of: bicycle, radio,tv,mobile phone)

First, import the stata file that contains the data. The data has not been weighted (yet), and contain all variables necessary. Most variables are binary e.g. yes where a household is deprived.

Apply all necessary packages required by R.

library(haven)
library(knitr)
library(kableExtra)
library(dplyr)
library(tidyr)
library(ggplot2)
poverty <- read_dta("D:/My projects/Stanley/poverty.dta")
head(poverty,10) %>%
  kable("html") %>%
  kable_styling(font_size=12) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
ID hdds health schoolchildren toilet water fuel floor bicycle radio tv phone no_assets
1 7 2 0 1 5 1 1 0 0 0 1 1
2 7 1 1 1 15 1 1 0 0 0 0 0
3 8 2 1 1 30 1 1 0 0 0 0 0
4 8 3 1 1 60 1 1 0 0 0 1 1
5 6 3 1 1 30 1 1 0 0 0 0 0
6 6 1 1 1 60 1 0 1 1 0 1 3
7 4 1 1 1 20 1 0 0 0 0 0 0
8 5 1 1 1 20 1 0 0 0 0 0 0
9 5 1 1 1 15 1 0 0 0 0 1 1
10 9 1 1 1 15 1 1 0 1 0 1 2

Weight the data, and display the data of the first 15 respondents. A column of people that are experiencing multidimensional poverty has been included. A person is multidimensional poor if weighted sum of dimensions>0.33.

poverty=select(poverty,ID,hdds,health,schoolchildren,toilet,water,fuel,floor,no_assets)
poverty_data= poverty %>%
  mutate(hdds=round(1/6*(ifelse(hdds<=3,1,0)),2),
         health=round(1/6*(ifelse(health>1,0,1)),2),
         schoolchildren=round(1/3*(ifelse(schoolchildren>0,1,0)),2),
         toilet=round(1/15*toilet,2),
         water=round(1/15*(ifelse(water>30,1,0)),2),
         fuel=round(1/15*fuel,2),
         floor=round(1/15*floor,2),
         no_assets=round(1/15*(ifelse(no_assets>1,0,1)),2))

poverty_data= poverty_data%>%
  mutate(weighted.sum=rowSums(poverty_data[,c("hdds","schoolchildren","toilet","water","fuel","floor","no_assets")]),
         multidimensionalpoor=factor(ifelse(weighted.sum>0.33,0,1),labels = c("Yes","No")))

head(poverty_data,15) %>%
  kable("html") %>%
  kable_styling(font_size=12,position = "center",full_width = T) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
ID hdds health schoolchildren toilet water fuel floor no_assets weighted.sum multidimensionalpoor
1 0 0.00 0.00 0.07 0.00 0.07 0.07 0.07 0.28 No
2 0 0.17 0.33 0.07 0.00 0.07 0.07 0.07 0.61 Yes
3 0 0.00 0.33 0.07 0.00 0.07 0.07 0.07 0.61 Yes
4 0 0.00 0.33 0.07 0.07 0.07 0.07 0.07 0.68 Yes
5 0 0.00 0.33 0.07 0.00 0.07 0.07 0.07 0.61 Yes
6 0 0.17 0.33 0.07 0.07 0.07 0.00 0.00 0.54 Yes
7 0 0.17 0.33 0.07 0.00 0.07 0.00 0.07 0.54 Yes
8 0 0.17 0.33 0.07 0.00 0.07 0.00 0.07 0.54 Yes
9 0 0.17 0.33 0.07 0.00 0.07 0.00 0.07 0.54 Yes
10 0 0.17 0.33 0.07 0.00 0.07 0.07 0.00 0.54 Yes
11 0 0.00 0.33 0.07 0.00 0.07 0.00 0.07 0.54 Yes
12 0 0.00 0.33 0.07 0.07 0.07 0.00 0.07 0.61 Yes
13 0 0.00 0.33 0.07 0.07 0.07 0.00 0.07 0.61 Yes
14 0 0.00 0.33 0.07 0.00 0.07 0.07 0.00 0.54 Yes
15 0 0.00 0.33 0.07 0.00 0.07 0.07 0.07 0.61 Yes

Get headcount ratio (H) of those experiencing multidimensional poverty which in this case is 19.2%.

hh_ratio=round(prop.table(table(poverty_data$multidimensionalpoor)),3); hh_ratio
## 
##   Yes    No 
## 0.192 0.808

We are interested with MPI. Thus go ahead and get intensity i.e.average percentage of dimensions in which poor people are deprived.

First, subset the data according to those who are experiencing multidimensional poverty i.e. “Yes” in the last column.

Based on the result, intensity is 0.2360774. This implies that the average number of dimensions in which poor people are deprived is 24%.

intensity_data=subset(poverty_data,multidimensionalpoor=="No")
avg=mean(poverty_data$weighted.sum,na.rm=T);avg
## [1] 0.2360774

After calculation, MPI= 0.0453269, and this reflect population that is multidimensionally poor adjusted by the intensity of the deprivation suffered.

What is the contribution of each indicator to MPI

To check contribution of each indicator, we need to get censored headcount ratio of dimension \(h_{j}(k)\) for each dimension, MPI denoted as \(M_{o}\), weights \(w_{j}\).

\[\begin{equation} \phi_{j}=\frac{w_{j}\times h_{j}(k)}{M_{o}} \end{equation}\]

In the data, first censore all non-poor people, by replacing weights in each column for non poor people. Then find censored headcount ratio for each dimension i.e. proportion of poor people deprived in each column.

var=names(poverty_data) %in% c("weighted.sum")
poverty_data2=poverty_data[!var]

for(i in seq_along(poverty_data)){
  if (poverty_data2$multidimensionalpoor[i]=="No"){
  poverty_data2$hdds[i]=0
  poverty_data2$health[i]=0
  poverty_data2$schoolchildren[i]=0
  poverty_data2$toilet[i]=0
  poverty_data2$water[i]=0
  poverty_data2$fuel[i]=0
  poverty_data2$floor[i]=0
  poverty_data2$no_assets[i]=0
  }
}

head(filter(poverty_data2,multidimensionalpoor=="No")) %>%    ##Display if results for No are true
  kable("html") %>%
  kable_styling(font_size=12,position = "center",full_width = T) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
ID hdds health schoolchildren toilet water fuel floor no_assets multidimensionalpoor
1 0 0.00 0 0.00 0 0.00 0.00 0.00 No
26 0 0.17 0 0.00 0 0.07 0.07 0.07 No
27 0 0.17 0 0.07 0 0.07 0.07 0.07 No
28 0 0.17 0 0.07 0 0.07 0.07 0.07 No
32 0 0.00 0 0.07 0 0.07 0.07 0.07 No
33 0 0.00 0 0.07 0 0.07 0.07 0.07 No

Get the censored head count for each dimension. For ease of interpretation, we will use the bar graph below.

options(digits=2)
hdds=1/6*prop.table(table(poverty_data2$hdds))[2]
health=1/6*prop.table(table(poverty_data2$health))[2]
schoolchildren=1/3*prop.table(table(poverty_data2$schoolchildren))[2]
toilet=1/15*prop.table(table(poverty_data2$toilet))[2]
water=1/15*prop.table(table(poverty_data2$water))[2]
fuel=1/15*prop.table(table(poverty_data2$fuel))[2]
floor=1/15*prop.table(table(poverty_data2$floor))[2]
no_assets=1/15*prop.table(table(poverty_data2$no_assets))[2]

data=c(hdds,health,schoolchildren,toilet,water,fuel,floor,no_assets)
names(data)=c(1,2,3,4,5,6,7,8)
df=data.frame(indicator=c("hdds","health","schoolchildren","toilet","water","fuel","floor","no_assets"),weight_hr=t(t(data)))

total=sum(df$weight_hr)

df=mutate(df,contribution=weight_hr/total)
data=select(df,indicator,contribution); data
##        indicator contribution
## 1           hdds        0.089
## 2         health        0.122
## 3 schoolchildren        0.188
## 4         toilet        0.160
## 5          water        0.035
## 6           fuel        0.119
## 7          floor        0.122
## 8      no_assets        0.165

We generate a simple graph to show contribution of each indicator to multidimensional poverty index. From the chart, enrollment of school-aged children to school contribute the highest proportion thus showing its centrality in determining poverty. Distance walked to fetch water has the lowest contribution.

ggplot(data, aes(x = reorder(indicator,-contribution), y = contribution)) + 
  geom_bar(stat= "identity", fill = "skyblue2", width = 0.7) +
  ggtitle("Contribution of each indicator") + xlab("")