{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Measures of Income Mobility \n",
"\n",
"**Author: Wei Kang , Serge Rey **\n",
"\n",
"Income mobility could be viewed as a reranking pheonomenon where regions switch income positions while it could also be considered to be happening as long as regions move away from the previous income levels. The former is named absolute mobility and the latter relative mobility.\n",
"\n",
"This notebook introduces how to estimate income mobility measures from longitudinal income data using methods in **giddy**. Currently, five summary mobility estimators are implemented in **giddy.mobility**. All of them are Markov-based, meaning that they are closely related to the discrete Markov Chains methods introduced in [Markov Based Methods notebook](Markov Based Methods.ipynb). More specifically, each of them is derived from a transition probability matrix $P$. Whether the final estimate is absolute or reletive mobility depends on how the original continuous income data are discretized."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The five Markov-based summary measures of mobility (Formby et al., 2004) are listed below:\n",
"\n",
"| Num| Measures | Symbol | \n",
"|-------------| :-------------: |:-------------:|\n",
"|1| $M_P(P) = \\frac{m-\\sum_{i=1}^m p_{ii}}{m-1} $ | P |\n",
"|2| $M_D(P) = 1-|det(P)|$ |D | \n",
"|3| $M_{L2}(P)=1-|\\lambda_2|$| L2| \n",
"|4| $M_{B1}(P) = \\frac{m-m \\sum_{i=1}^m \\pi_i P_{ii}}{m-1} $ | B1 | \n",
"|5| $M_{B2}(P)=\\frac{1}{m-1} \\sum_{i=1}^m \\sum_{j=1}^m \\pi_i P_{ij} |i-j|$| B2| \n",
"\n",
"$\\pi$ is the inital income distribution. For any transition probability matrix with a quasi-maximal diagonal, all of these mobility measures take values on $[0,1]$. $0$ means immobility and $1$ perfect mobility. If the transition probability matrix takes the form of the identity matrix, every region is stuck in its current state implying complete immobility. On the contrary, when each row of $P$ is identical, current state is irrelevant to the probability of moving away to any class. Thus, the transition matrix with identical rows is considered perfect mobile. The larger the mobility estimate, the more mobile the regional income system is. However, it should be noted that these measures try to reveal mobility pattern from different aspects and are thus not comparable to each other. Actually the mean and variance of these measures are different. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We implemented all the above five summary mobility measures in a single method $markov\\_mobility$. A parameter $measure$ could be specified to select which measure to calculate. By default, the mobility measure 'P' will be estimated.\n",
"\n",
"```python\n",
"def markov_mobility(p, measure = \"P\",ini=None)\n",
"```"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from giddy import markov,mobility\n",
"mobility.markov_mobility?"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### US income mobility example\n",
"Similar to [Markov Based Methods notebook](Markov Based Methods.ipynb), we will demonstrate the usage of the mobility methods by an application to data on per capita incomes observed annually from 1929 to 2009 for the lower 48 US states."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import libpysal\n",
"import numpy as np\n",
"import mapclassify as mc"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/weikang/anaconda3/lib/python3.6/site-packages/scipy/stats/stats.py:1713: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
" return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
]
},
{
"data": {
"text/plain": [
"array([[0.91011236, 0.0886392 , 0.00124844, 0. , 0. ],\n",
" [0.09972299, 0.78531856, 0.11080332, 0.00415512, 0. ],\n",
" [0. , 0.10125 , 0.78875 , 0.1075 , 0.0025 ],\n",
" [0. , 0.00417827, 0.11977716, 0.79805014, 0.07799443],\n",
" [0. , 0. , 0.00125156, 0.07133917, 0.92740926]])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"income_path = libpysal.examples.get_path(\"usjoin.csv\")\n",
"f = libpysal.io.open(income_path)\n",
"pci = np.array([f.by_col[str(y)] for y in range(1929, 2010)]) #each column represents an state's income time series 1929-2010\n",
"q5 = np.array([mc.Quantiles(y).yb for y in pci]).transpose() #each row represents an state's income time series 1929-2010\n",
"m = markov.Markov(q5)\n",
"m.p"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After acquiring the estimate of transition probability matrix, we could call the method $markov\\_mobility$ to estimate any of the five Markov-based summary mobility indice. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1. Shorrock1's mobility measure\n",
"\n",
"$$M_{P} = \\frac{m-\\sum_{i=1}^m P_{ii}}{m-1}$$\n",
"\n",
"```python\n",
"measure = \"P\"```"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.19758992000997844"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mobility.markov_mobility(m.p, measure=\"P\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 2. Shorroks2's mobility measure\n",
"\n",
"$$M_{D} = 1 - |\\det(P)|$$\n",
"```python\n",
"measure = \"D\"```"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.6068485462369559"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mobility.markov_mobility(m.p, measure=\"D\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 3. Sommers and Conlisk's mobility measure\n",
"$$M_{L2} = 1 - |\\lambda_2|$$\n",
"\n",
"```python\n",
"measure = \"L2\"```"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.03978200230815965"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mobility.markov_mobility(m.p, measure = \"L2\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4. Bartholomew1's mobility measure\n",
"\n",
"$$M_{B1} = \\frac{m-m \\sum_{i=1}^m \\pi_i P_{ii}}{m-1}$$\n",
"\n",
"$\\pi$: the inital income distribution\n",
"\n",
"```python\n",
"measure = \"B1\"```"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.2277675878319787"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pi = np.array([0.1,0.2,0.2,0.4,0.1])\n",
"mobility.markov_mobility(m.p, measure = \"B1\", ini=pi)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 5. Bartholomew2's mobility measure\n",
"\n",
"$$M_{B2} = \\frac{1}{m-1} \\sum_{i=1}^m \\sum_{j=1}^m \\pi_i P_{ij} |i-j|$$\n",
"\n",
"$\\pi$: the inital income distribution\n",
"\n",
"```python\n",
"measure = \"B1\"```"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0.04636660119478926"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pi = np.array([0.1,0.2,0.2,0.4,0.1])\n",
"mobility.markov_mobility(m.p, measure = \"B2\", ini=pi)"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Next steps\n",
"\n",
"* Markov-based partial mobility measures\n",
"* Other mobility measures:\n",
" * Inequality reduction mobility measures (Trede, 1999)\n",
"* Statistical inference for mobility measures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## References\n",
"\n",
"* Formby, J. P., W. J. Smith, and B. Zheng. 2004. “[Mobility Measurement, Transition Matrices and Statistical Inference](http://www.sciencedirect.com/science/article/pii/S0304407603002112).” Journal of Econometrics 120 (1). Elsevier: 181–205.\n",
"* Trede, Mark. 1999. “[Statistical Inference for Measures of Income Mobility / Statistische Inferenz Zur Messung Der Einkommensmobilität](https://www.jstor.org/stable/23812388).” Jahrbücher Für Nationalökonomie Und Statistik / Journal of Economics and Statistics 218 (3/4). Lucius & Lucius Verlagsgesellschaft mbH: 473–90."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}