help for povdeco                               Stephen P. Jenkins (August 2006)

Poverty indices, with optional decomposition by subgroup

povdeco varname [weights] [if exp] [in range] [, pline(#) varpline(zvar) bygroup(groupvar) summarize]

fweights and aweights are allowed; see help weights.


povdeco estimates three poverty indices from the Foster, Greer and Thorbecke (1984) class, FGT(a). FGT(0) is the headcount ratio (the proportion poor); FGT(1) is the average normalised poverty gap; FGT(2) is the average squared normalised poverty gap. The larger a is, the greater the degree of `poverty aversion' (sensitivity to large poverty gaps). Optionally provided are statistics such as mean income amongst the poor and also decompositions of these indices by population subgroup. Poverty decompositions by subgroup are useful for providing poverty `profiles' at a point in time, and for analyzing secular trends in poverty using shift-share analysis. Unit record (`micro' level) data are required.

Typically one's data are in one of two forms. Either (1) the money incomes for each unit i, x_i, are equivalised using an equivalence scale factor, m_i, so that y_i = x_i / m_i, and the poverty line is a single (common) value, in the same units as equivalised income, z. Or (2) incomes are not equivalised, but there are different poverty lines depending on (for example) household type. Suppose the poverty line for unit i is z_i. Observe that if z_i = z * m_i, FGT poverty index calculations based on {y_i,z} give exactly the same answers as calculations based on {x_i,z_i}, i=1,...,n. For the common poverty line case, use pline(#) to specify the poverty line. For the heterogeneous poverty line case, use varpline(zvar) to specify the poverty lines.

For the characterization of the FGT(a) poverty index, see Foster et al. (1984). Seidl (1988) and Zheng (1997) survey the literature on aggregate poverty indices.

groupvar must take non-negative integer values only. To create such a variable from an existing variable, use the egen function group. By default, observations with missing values on groupvar are excluded from calculations when the bygroup option is specified. If you wish to include them, create a new variable with the egen function group and use its missing option. The egen function group is also useful for multi-way decompositions. E.g. for a decomposition by sex and region, create a new groupvar defining sex-region combinations by specifying sex and region in group(varlist).

Bootstrapped standard errors for the estimates of the indices can be derived using bootstrap. Standard errors derived using linearization methods can be calculated straightforwardly by first creating for each FGT(a) index, a variable equal to I_i * [ ( z_i - y_i ) / z_i) ] ^ a, where I_i = 1 if observation i is poor and 0 otherwise. Then estimate the mean of each of these new variables using svy mean having first appropriately svyset your data. See Jenkins (2006) for examples.

Technical details

Consider a population of persons (or households ...), i = 1,...,n, with income y_i, and weight w_i. Let f_i = w_i / N, where N = SUM w_i. (In what follows all sums are over all values of whatever is subscripted.) When the data are unweighted, w_i = 1 and N = n. The poverty line is z_i for each i, and the poverty gap for person i is max(0, z_i-y_i). For the common poverty line case (1) above, z_i = z, all i.

Suppose there is an exhaustive partition of the population into mutually-exclusive subgroups k = 1,...,K.

The FGT class of poverty indices is given by

FGT(a) = SUM f_i * I_i * [ ( z_i - y_i ) / z_i) ] ^ a, a >= 0,

where I_i = 1 if y_i < z_i and I_i = 0 otherwise.

Each FGT(a) index can be additively decomposed as

FGT(a) = SUM v_k * FGT_k(a)

where v_k = N_k / N is the weighted number of persons in subgroup k divided by the weighted total number of persons (subgroup population share), and FGT_k(a), poverty for subgroup k, is calculated as if each subgroup were a separate population.

Also displayed when subgroup decompositions requested, for each k, are:

subgroup poverty 'share', S_k = v_k * FGT_k(a) / FGT(a), and

subgroup poverty 'risk', R_k = FGT_k(a) / FGT(a) = S_k / v_k.


bygroup(groupvar) requests inequality decompositions by population subgroup, with subgroup membership summarized by groupvar.

summarize requests presentation of the mean of varname, the mean among the poor, and the mean poverty gap among the poor.

pline(#) is used to specify the poverty line # in the common poverty line case.

varpline(zvar) is used to specify the variable zvar containing the values of poverty line for each observation in the heterogeneous poverty line case.

Saved results

r(fgt0), r(fgt1), r(fgt2) FGT(a), for a = 0, 1, 2 r(mean) mean r(meanpoor) mean among the poor r(meangappoor) mean poverty gap among the poor r(N), r(sumw) number of observations, sum of weights

If the bygroup option is specified, also saved are:

r(fgt0_k) FGT(a), for a = 0, 1, 2, and r(fgt1_k) each subgroup k, where the values of k r(fgt2_k) correspond to the values of groupvar in the estimation sample. See r(levels) below.

r(mean_k) mean among subgroup k r(meanpoor_k) mean among the poor in subgroup k r(meangappoor_k) mean poverty gap among the poor in subgroup k r(n_k), r(sumw_k) number of subgroup observations, subgroup sum o > f weights r(v_k) subgroup population share, v_k r(share0_k) FGT(0) poverty share among subgroup k r(share1_k) FGT(1) poverty share among subgroup k r(share2_k) FGT(2) poverty share among subgroup k r(risk0_k) FGT(0) poverty risk among subgroup k r(risk1_k) FGT(1) poverty risk among subgroup k r(risk2_k) FGT(2) poverty risk among subgroup k

r(levels) macro containing the set of values of groupvar (the number of unique values = K)

For the convenience of users of earlier versions of these programs, a selected set of estimates is also saved in global macros, as follows.

S_FGT0, S_FGT1, S_FGT2 FGT(a), for a = 0, 1, 2


. povdeco x [aw = wgtvar], pline(100)

. povdeco x [aw = wgtvar], pline(100) by(famtype)

. povdeco x, varpline(z)

. povdeco x if sex==1, pl(100) summarize

. // bootstrapped standard errors for FGT(2) in Stata version 8

. preserve

. keep if x > 0 & x < .

. version 8: bootstrap "povdeco x, pline(100)" fgt2 = r(fgt2), reps(100)

. restore

. // bootstrapped standard errors for FGT(2) in Stata version 9

. preserve

. keep if x > 0 & x < .

. bootstrap fgt2 = r(fgt2), reps(100): povdeco x, pline(100)

. restore

. // multi-way decomposition

. egen sexXregion = group(sex region)

. povdeco x, pline(100) by(sexXregion)


Stephen P. Jenkins <stephenj@essex.ac.uk> Institute for Social and Economic Research University of Essex, Colchester CO4 3SQ, U.K.


For comments and suggestions, I am grateful to Philippe Van Kerm and Nick Cox.


Foster, J.E., Greer, J., and Thorbecke, E. 1984. A class of decomposable poverty indices. Econometrica 52: 761-766.

Jenkins, S.P. 2006. Estimation and interpretation of measures of inequality, poverty, and social welfare using Stata. Presentation at North American Stata Users' Group Meetings 2006, Boston MA. http://econpapers.repec.org/paper/bocasug06/16.htm.

Seidl, C. 1988. Poverty measurement: a survey. In: D. Bös, M. Rose and C. Seidl (eds.), Welfare and Efficiency in Public Economics. Heidelberg: Springer-Verlag.

Zheng, B. 1997. Aggregate poverty indices. Journal of Economic Surveys 11: 123-162.

Also see

poverty if installed; ineqdeco if installed.