4.1 Alkire-Foster Class and Decomposition (svyafc, svyafcdec)

This class of measures are defined in Alkire and Foster (2011Alkire, Sabina, and James Foster. 2011. “Counting and Multidimensional Poverty Measurement.” Journal of Public Economics 95 (7-8): 476–87. https://ideas.repec.org/a/eee/pubeco/v95y2011i7-8p476-487.html.), using what is called the “dual cutoff” approach. This method applies a cutoffs to define dimensional deprivations and another cutoff for multidimensional deprivation.

To analyze a population of \(n\) individuals across \(d\) achievement dimensions, the first step of the method is applying a FGT-like transformation to each dimension, defined as

\[ g_{ij}^\alpha = \bigg( \frac{ z_j - x_{ij} }{ z_j } \bigg)^{\alpha} \]

where \(i\) is an observation index, \(j\) is a dimension index and \(\alpha\) is an exponent weighting the deprivation intensity. If \(\alpha=0\), then \(g_{ij}^0\) becomes a binary variable, assuming value \(1\) if person \(i\) is deprived in dimension \(j\) and \(0\) otherwise. The \(n \times d\) matrix \(G^\alpha\) will be referred to as deprivation matrix.

Each dimension receives a weight \(w_j\), so that the weighted sum of multidimensional deprivation is the matrix multiplication of \(G^\alpha\) by the \(j \times 1\) vector \(W = [w_j]\). The \(n \times 1\) vector \(C^\alpha = [c^\alpha_i]\) is the weighted sum of dimensional deprivation scores, i.e.,

\[ c^\alpha_{i} = \sum_{j \in d} w_j g_{ij}^\alpha \]

The second cutoff is defining those considered to be multidimensionally poor. Assuming that \(\sum_{j \in d} w_j = 1\), the multidimensional cutoff \(k\) belongs to the interval \((0,1]\). If \(c^0_{i} \geqslant k\), then this person is considered multidimensionally poor. The censored vector of deprivation sums \(C^\alpha(k)\) is defined as

\[ C^\alpha (k) = \bigg[ c_{ij}^\alpha \cdot \delta \big( c_{ij}^0 \geqslant k \big) \bigg] \text{,} \]

where \(\delta(A)\) is an indicator function, taking value \(1\) if condition \(A\) is true and \(0\) otherwise. If \(k \geqslant \min{ w_j }\), this is called the “union approach”, where a person is considered poor if she is poor in at least one dimension. On the other extreme, the “intersection approach” happens when \(k = 1\), meaning that a person is considered poor if she is poor in all dimensions.

The average of vector \(C^0 (k)\) returns the multidimensional headcount ratio. For the multidimensional FGT class, a general measure can be defined as

\[ M^\alpha = \frac{1}{n} \sum_{i \in n} \sum_{j \in d} w_j g_{ij}^{\alpha}(k) \text{, } \alpha \geq 0 \text{,} \]

where \(g_{ij}^{\alpha}(k) = g_{ij}^\alpha \cdot \delta \big( c^0_i \geqslant k \big)\).

For inferential purposes, since this variable is actually the average of scores \(\sum_{j \in d} w_j g_{ij}^{\alpha}(k)\), the linearization is straightforward.

The Alkire-Foster index is both dimensional and subgroup decomposable. This way, it is possible to analyze how much each dimension or group contribute to the general result. The overall poverty measure can be seen as the weighted sum of each group’s poverty measure, as in the formula below:

\[ M^\alpha = \sum_{l \in L} \frac{ n_l }{ n } M^\alpha_{l} \]

where \(l\) is one of \(L\) groups.

Also, the overall poverty index can be expressed across dimensions as \[ M^\alpha = \sum_{j \in d} w_j \bigg[ \frac{1}{n} \sum_{i \in n} g_{ij}^\alpha (k) \bigg] \text{.} \]

Since those functions are linear combinations of ratios and totals, it is also possible to calculate standard errors for such measures.


A replication example

In November 2015, Christopher Jindra presented at the Oxford Poverty and Human Development Initiative on the Alkire-Foster multidimensional poverty measure. His presentation can be viewed here. The example below reproduces those statistics.

Load and prepare the same data set:

# load the convey package
library(convey)

# load the survey library
library(survey)

# load the stata-style webuse library
library(webuse)

# load the same microdata set used by Jindra in his presentation
webuse("nlsw88")

# coerce that `tbl_df` to a standard R `data.frame`
nlsw88 <- data.frame( nlsw88 )

# create a `collgrad` column
nlsw88$collgrad <-
    factor( 
        as.numeric( nlsw88$collgrad ) , 
        label = c( 'not college grad' , 'college grad' ) , 
        ordered = TRUE 
      )

# coerce `married` column to factor
nlsw88$married <- 
    factor( 
        nlsw88$married , 
        levels = 0:1 , 
        labels = c( "single" , "married" ) 
    )

# initiate a linearized survey design object
des_nlsw88 <- svydesign( ids = ~1 , data = nlsw88 )

# immediately run the `convey_prep` function on the survey design
des_nlsw88 <- convey_prep(des_nlsw88)

Replicate PDF page 9

page_nine <-
  svyafc(
    ~ wage + collgrad + hours , 
    design = des_nlsw88 , 
    cutoffs = list( 4, 'college grad' , 26 ) , 
    k = 1/3 , g = 0 , 
    na.rm = TRUE
  )

# MO and seMO
print( page_nine )
##      alkire-foster     SE
## [1,]       0.36991 0.0053
# H seH and A seA
print( attr( page_nine , "extra" ) )
##        coef          SE
## H 0.8082070 0.008316807
## A 0.4576895 0.004573443

Replicate PDF page 10

page_ten <- NULL

# loop through every poverty cutoff `k`
for( ks in seq( 0.1 , 1 , .1 ) ){
    
    this_ks <-
        svyafc(
            ~ wage + collgrad + hours , 
            design = des_nlsw88 , 
            cutoffs = list( 4 , 'college grad' , 26 ) , 
            k = ks , 
            g = 0 , 
            na.rm = TRUE 
           )
    
    page_ten <-
        rbind(
            page_ten ,
            data.frame( 
                k = ks , 
                MO = coef( this_ks ) ,
                seMO = SE( this_ks ) ,
                H = attr( this_ks , "extra" )[ 1 , 1 ] ,
                seH = attr( this_ks , "extra" )[ 1 , 2 ] ,
                A = attr( this_ks , "extra" )[ 2 , 1 ] ,
                seA = attr( this_ks , "extra" )[ 2 , 2 ]
          )
        )
    
}

Table 4.1: PDF Page 10 Replication

k MO seMO H seH A seA
alkire-foster 0.1 0.3699078 0.0053059 0.8082070 0.0083168 0.4576895 0.0045734
alkire-foster1 0.2 0.3699078 0.0053059 0.8082070 0.0083168 0.4576895 0.0045734
alkire-foster2 0.3 0.3699078 0.0053059 0.8082070 0.0083168 0.4576895 0.0045734
alkire-foster3 0.4 0.1865894 0.0068123 0.2582516 0.0092455 0.7225101 0.0051745
alkire-foster4 0.5 0.1865894 0.0068123 0.2582516 0.0092455 0.7225101 0.0051745
alkire-foster5 0.6 0.1865894 0.0068123 0.2582516 0.0092455 0.7225101 0.0051745
alkire-foster6 0.7 0.0432649 0.0042978 0.0432649 0.0042978 1.0000000 0.0000000
alkire-foster7 0.8 0.0432649 0.0042978 0.0432649 0.0042978 1.0000000 0.0000000
alkire-foster8 0.9 0.0432649 0.0042978 0.0432649 0.0042978 1.0000000 0.0000000
alkire-foster9 1.0 0.0432649 0.0042978 0.0432649 0.0042978 1.0000000 0.0000000

Replicate PDF page 13

page_thirteen <- NULL

# loop through every poverty cutoff `k`
for( ks in c( 0.5 , 0.75 , 1 ) ){
    
    this_ks <-
        svyafc(
        ~ wage + collgrad + hours , 
        design = des_nlsw88 , 
        cutoffs = list( 4, 'college grad' , 26 ) , 
        k = ks , 
        g = 0 , 
        dimw = c( 0.5 , 0.25 , 0.25 ) ,
        na.rm = TRUE
      )
    
    page_thirteen <-
        rbind(
            page_thirteen ,
            data.frame( 
                k = ks , 
                MO = coef( this_ks ) ,
                seMO = SE( this_ks ) ,
                H = attr( this_ks , "extra" )[ 1 , 1 ] ,
                seH = attr( this_ks , "extra" )[ 1 , 2 ] ,
                A = attr( this_ks , "extra" )[ 2 , 1 ] ,
                seA = attr( this_ks , "extra" )[ 2 , 2 ]
          )
        )
}

Table 4.2: PDF Page 13 Replication

k MO seMO H seH A seA
alkire-foster 0.50 0.1913470 0.0069137 0.2689563 0.0093668 0.7114428 0.0068474
alkire-foster1 0.75 0.1489741 0.0066918 0.1842105 0.0081889 0.8087167 0.0052160
alkire-foster2 1.00 0.0432649 0.0042978 0.0432649 0.0042978 1.0000000 0.0000000

Replicate PDF page 16

page_sixteen <- NULL

# loop through every alpha value `g`
for( gs in 0:3 ){
    
    this_gs <-
        svyafc(
        ~ wage + collgrad + hours , 
        design = des_nlsw88 , 
        cutoffs = list( 4, 'college grad' , 26 ) , 
        k = 1/3 , 
        g = gs , 
        na.rm = TRUE
      )
    
    page_sixteen <-
        rbind(
            page_sixteen ,
            data.frame( 
                g = gs , 
                MO = coef( this_gs ) ,
                seMO = SE( this_gs ) 
          )
        )
}

Table 4.3: PDF Page 16 Replication

g MO seMO
alkire-foster 0 0.3699078 0.0053059
alkire-foster1 1 0.2859332 0.0033708
alkire-foster2 2 0.2676266 0.0031164
alkire-foster3 3 0.2616335 0.0030531

Replicate k=1/3 rows of PDF page 17 and 19

svyafcdec(
    ~ wage + collgrad + hours , 
    design = des_nlsw88 , 
    cutoffs = list( 4 , 'college grad' , 26 ) , 
    k = 1/3 , 
    g = 0 ,
    na.rm = TRUE
)
## $overall
##               alkire-foster     SE
## alkire-foster       0.36991 0.0053
## 
## $`raw headcount ratio`
##          raw headcount     SE
## wage           0.19492 0.0084
## collgrad       0.76316 0.0090
## hours          0.15165 0.0076
## 
## $`censored headcount ratio`
##          cens. headcount     SE
## wage             0.19492 0.0084
## collgrad         0.76316 0.0090
## hours            0.15165 0.0076
## 
## $`percentual contribution per dimension`
##          dim. % contribution     SE
## wage                 0.17564 0.0061
## collgrad             0.68770 0.0077
## hours                0.13666 0.0059

Replicate PDF pages 21 and 22

svyafcdec(
    ~ wage + collgrad + hours , 
    subgroup = ~married , 
    design = des_nlsw88 , 
    cutoffs = list( 4 , 'college grad' , 26 ) , 
    k = 1/3 , 
    g = 0 ,
    na.rm = TRUE
)
## $overall
##               alkire-foster     SE
## alkire-foster       0.36991 0.0053
## 
## $`raw headcount ratio`
##          raw headcount     SE
## wage           0.19492 0.0084
## collgrad       0.76316 0.0090
## hours          0.15165 0.0076
## 
## $`censored headcount ratio`
##          cens. headcount     SE
## wage             0.19492 0.0084
## collgrad         0.76316 0.0090
## hours            0.15165 0.0076
## 
## $`percentual contribution per dimension`
##          dim. % contribution     SE
## wage                 0.17564 0.0061
## collgrad             0.68770 0.0077
## hours                0.13666 0.0059
## 
## $`subgroup alkire-foster estimates`
##         alkire-foster     SE
## single        0.35414 0.0088
## married       0.37867 0.0066
## 
## $`percentual contribution per subgroup`
##         grp. % contribution    SE
## single              0.34204 0.012
## married             0.65796 0.012

For additional usage examples of svyafc or svyafcdec, type ?convey::svyafc or ?convey::svyafcdec in the R console.

(Alkire and Foster 2011Alkire, Sabina, and James Foster. 2011. “Counting and Multidimensional Poverty Measurement.” Journal of Public Economics 95 (7-8): 476–87. https://ideas.repec.org/a/eee/pubeco/v95y2011i7-8p476-487.html.) and (Alkire et al. 2015Alkire, Sabina, James Foster, Suman Seth, Maria Emma Santos, Jose Manuel Roche, and Paola Ballon. 2015. Multidimensional Poverty Measurement and Analysis. Oxford University Press.) and (Pacifico and Poge 2016Pacifico, Daniele, and Felix Poge. 2016. “MPI: Stata Module to Compute the Alkire-Foster Multidimensional Poverty Measures and Their Decomposition by Deprivation Indicators and Population Sub-Groups.” http://EconPapers.repec.org/RePEc:boc:bocode:s458120.)