{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Do generations exist?\n", "\n", "This notebook contains a \"one-day paper\", my attempt to pose a research question, answer it, and publish the results in one work day (May 13, 2016).\n", "\n", "Copyright 2016 Allen B. Downey\n", "\n", "MIT License: https://opensource.org/licenses/MIT" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from __future__ import print_function, division\n", "\n", "from thinkstats2 import Pmf, Cdf\n", "\n", "import thinkstats2\n", "import thinkplot\n", "\n", "import pandas as pd\n", "import numpy as np\n", "from scipy.stats import entropy\n", "\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### What's a generation supposed to be, anyway?\n", "\n", "If generation names like \"Baby Boomers\" and \"Generation X\" are just a short way of referring to people born during certain intervals, you can use them without implying that these categories have any meaningful properties.\n", "\n", "But if these names are supposed to refer to generations with identifiable characteristics, we can test whether these generations exist. In this notebook, I suggest one way to formulate generations as a claim about the world, and test it.\n", "\n", "Suppose we take a representative sample of people in the U.S., divide them into cohorts by year of birth, and measure the magnitude of the differences between consecutive cohorts. Of course, there are many ways we could define and measure these differences; I'll suggest one in a minute.\n", "\n", "But ignoring the details for now, what would those difference look like if generations exist? Presumably, the differences between successive cohorts would be relatively small within each generation, and bigger between generations.\n", "\n", "If we plot the cumulative total of these differences, we expect to see something like the figure below (left), with relatively fast transitions (big differences) between generations, and periods of slow change (small differences) within generations.\n", "\n", "On the other hand, if there are no generations, we expect the differences between successive cohorts to be about the same. In that case the cumulative differences should look like a straight line, as in the figure below (right):\n", "\n", "![Diagrams showing hypothetical data.](generation_cartoon.png)\n", "\n", "So, how should we quantify the differences between successive cohorts. When people talk about generational differences, they are often talking about differences in attitudes about political, social issues, and other cultural questions. Fortunately, these are exactly the sorts of things surveyed by the General Social Survey (GSS).\n", "\n", "To gather data, I selected question from the GSS that were asked during the last three cycles (2010, 2012, 2014) and that were coded on a 5-point Likert scale.\n", "\n", "You can see the variables that met these criteria, and download the data I used, here:\n", "\n", "https://gssdataexplorer.norc.org/projects/13170/variables/data_cart\n", "\n", "Now let's see what we got." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First I load the data dictionary, which contains the metadata:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dct = thinkstats2.ReadStataDct('GSS.dct')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then I load the data itself:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df = dct.ReadFixedWidth('GSS.dat')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'm going to drop two variables that turned out to be mostly N/A" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df.drop(['immcrime', 'pilloky'], axis=1, inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And then replace the special codes 8, 9, and 0 with N/A" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearid_agewrkwayupfepolpillokpremarsxspankingfechldfepresch...patriot2patriot3patriot4poleff18poleff19poleff20govdookpolgreedchoicesrefrndms
020101314214422...NaNNaNNaNNaNNaNNaN32NaNNaN
120102235214323...NaNNaNNaNNaNNaNNaN44NaNNaN
22010371NaN221132...NaNNaNNaNNaNNaNNaN34NaNNaN
320104822213332...NaNNaNNaNNaNNaNNaN22NaNNaN
42010578NaNNaNNaNNaNNaNNaNNaN...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
\n", "

5 rows × 150 columns

\n", "
" ], "text/plain": [ " year id_ age wrkwayup fepol pillok premarsx spanking fechld \\\n", "0 2010 1 31 4 2 1 4 4 2 \n", "1 2010 2 23 5 2 1 4 3 2 \n", "2 2010 3 71 NaN 2 2 1 1 3 \n", "3 2010 4 82 2 2 1 3 3 3 \n", "4 2010 5 78 NaN NaN NaN NaN NaN NaN \n", "\n", " fepresch ... patriot2 patriot3 patriot4 poleff18 poleff19 \\\n", "0 2 ... NaN NaN NaN NaN NaN \n", "1 3 ... NaN NaN NaN NaN NaN \n", "2 2 ... NaN NaN NaN NaN NaN \n", "3 2 ... NaN NaN NaN NaN NaN \n", "4 NaN ... NaN NaN NaN NaN NaN \n", "\n", " poleff20 govdook polgreed choices refrndms \n", "0 NaN 3 2 NaN NaN \n", "1 NaN 4 4 NaN NaN \n", "2 NaN 3 4 NaN NaN \n", "3 NaN 2 2 NaN NaN \n", "4 NaN NaN NaN NaN NaN \n", "\n", "[5 rows x 150 columns]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.ix[:, 3:] = df.ix[:, 3:].replace([8, 9, 0], np.nan)\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the age variable, I also have to replace 99 with N/A" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df.age.replace([99], np.nan, inplace=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's an example of a typical variable on a 5-point Likert scale." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nKCowCk8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Hist(Pmf(df.choices))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I have to compute year born" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "df['yrborn'] = df.year - df.age" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's what the distribution looks like. The survey includes roughly equal numbers of people born each year from 1922 to 1996." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'xscale': 'linear', 'yscale': 'linear'}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pmf_yrborn = Pmf(df.yrborn)\n", "thinkplot.Cdf(pmf_yrborn.MakeCdf())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next I sort the respondents by year born and then assign them to cohorts so there are 200 people in each cohort." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearageyrborncounter
141120108919210
103520108919210
173920108919210
149020108919210
86120108919210
\n", "
" ], "text/plain": [ " year age yrborn counter\n", "1411 2010 89 1921 0\n", "1035 2010 89 1921 0\n", "1739 2010 89 1921 0\n", "1490 2010 89 1921 0\n", "861 2010 89 1921 0" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_sorted = df[~df.age.isnull()].sort_values(by='yrborn')\n", "df_sorted['counter'] = np.arange(len(df_sorted), dtype=int) // 200\n", "df_sorted[['year', 'age', 'yrborn', 'counter']].head()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
yearageyrborncounter
4301201418199632
4613201418199632
4993201418199632
4451201418199632
6032201418199632
\n", "
" ], "text/plain": [ " year age yrborn counter\n", "4301 2014 18 1996 32\n", "4613 2014 18 1996 32\n", "4993 2014 18 1996 32\n", "4451 2014 18 1996 32\n", "6032 2014 18 1996 32" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_sorted[['year', 'age', 'yrborn', 'counter']].tail()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I end up with the same number of people in each cohort (except the last)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "thinkplot.Cdf(Cdf(df_sorted.counter))\n", "None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then I can group by cohort." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "groups = df_sorted.groupby('counter')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "I'll instantiate an object for each cohort." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Cohort:\n", " skip = ['year', 'id_', 'age', 'yrborn', 'cohort', 'counter']\n", " \n", " def __init__(self, name, df):\n", " self.name = name\n", " self.df = df\n", " self.pmf_map = {}\n", " \n", " def make_pmfs(self):\n", " for col in self.df.columns:\n", " if col in self.skip:\n", " continue\n", " self.pmf_map[col] = Pmf(self.df[col].dropna())\n", " try:\n", " self.pmf_map[col].Normalize()\n", " except ValueError:\n", " print(self.name, col)\n", " \n", " def total_divergence(self, other, divergence_func):\n", " total = 0\n", " for col, pmf1 in self.pmf_map.items():\n", " pmf2 = other.pmf_map[col]\n", " divergence = divergence_func(pmf1, pmf2)\n", " #print(col, pmf1.Mean(), pmf2.Mean(), divergence)\n", " total += divergence\n", " return total" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To compute the difference between successive cohorts, I'll loop through the questions, compute Pmfs to represent the responses, and then compute the difference between Pmfs.\n", "\n", "I'll use two functions to compute these differences. One computes the difference in means:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def MeanDivergence(pmf1, pmf2):\n", " return abs(pmf1.Mean() - pmf2.Mean())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The other computes the [Jensen-Shannon divergence](https://en.wikipedia.org/wiki/Jensen%E2%80%93Shannon_divergence)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def JSDivergence(pmf1, pmf2):\n", " xs = set(pmf1.Values()) | set(pmf2.Values())\n", " ps = np.asarray(pmf1.Probs(xs))\n", " qs = np.asarray(pmf2.Probs(xs))\n", " ms = ps + qs\n", " return 0.5 * (entropy(ps, ms) + entropy(qs, ms))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First I'll loop through the groups and make Cohort objects" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "33" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cohorts = []\n", "for name, group in groups:\n", " cohort = Cohort(name, group)\n", " cohort.make_pmfs()\n", " cohorts.append(cohort)\n", " \n", "len(cohorts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each cohort spans a range about 3 birth years. For example, the cohort at index 10 spans 1965 to 1967." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "count 200.000000\n", "mean 1956.585000\n", "std 0.493958\n", "min 1956.000000\n", "25% 1956.000000\n", "50% 1957.000000\n", "75% 1957.000000\n", "max 1957.000000\n", "Name: yrborn, dtype: float64" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cohorts[11].df.yrborn.describe()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here's the total divergence between the first two cohorts, using the mean difference between Pmfs." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "31.040279367049521" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cohorts[0].total_divergence(cohorts[1], MeanDivergence)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And here's the total J-S divergence:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "6.7725572288951366" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cohorts[0].total_divergence(cohorts[1], JSDivergence)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This loop computes the (absolute value) difference between successive cohorts and the cumulative sum of the differences." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 31.040279367 31.040279367\n", "1 28.3836530218 59.4239323888\n", "2 23.5696110289 82.9935434177\n", "3 26.2323801584 109.225923576\n", "4 24.9007829029 134.126706479\n", "5 26.0393476525 160.166054132\n", "6 24.8166232133 184.982677345\n", "7 21.6520436658 206.634721011\n", "8 24.1933904043 230.828111415\n", "9 25.6776252798 256.505736695\n", "10 29.8524030016 286.358139696\n", "11 26.8980464824 313.256186179\n", "12 25.7648247447 339.021010923\n", "13 26.1889717953 365.209982719\n", "14 22.8978988777 388.107881596\n", "15 21.8568321591 409.964713756\n", "16 24.0318591633 433.996572919\n", "17 26.5253260458 460.521898965\n", "18 22.8921890979 483.414088063\n", "19 23.2634817637 506.677569826\n", "20 22.7139238903 529.391493717\n", "21 21.8612744354 551.252768152\n", "22 28.7140491676 579.96681732\n", "23 25.3770585475 605.343875867\n", "24 28.4834464175 633.827322285\n", "25 26.5365954008 660.363917685\n", "26 25.9157951263 686.279712812\n", "27 24.5135820021 710.793294814\n", "28 25.8325896861 736.6258845\n", "29 23.3612099178 759.987094418\n", "30 25.4897938733 785.476888291\n", "31 33.1647682631 818.641656554\n" ] } ], "source": [ "res = []\n", "cumulative = 0\n", "for i in range(len(cohorts)-1):\n", " td = cohorts[i].total_divergence(cohorts[i+1], MeanDivergence)\n", " cumulative += td\n", " print(i, td, cumulative)\n", " res.append((i, cumulative))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results are a nearly straight line, suggesting that there are no meaningful generations, at least as I've formulated the question." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nsiJhjDEmV/8fXQtgnSlxj+UAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xs, ys = zip(*res)\n", "thinkplot.Plot(xs, ys)\n", "thinkplot.Config(xlabel='Cohort #',\n", " ylabel='Cumulative difference in means',\n", " legend=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The results looks pretty much the same using J-S divergence." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0 6.7725572289 6.7725572289\n", "1 5.62917236405 12.4017295929\n", "2 5.0624907141 17.464220307\n", "3 4.17000968182 21.6342299889\n", "4 4.28812434098 25.9223543299\n", "5 4.82791915546 30.7502734853\n", "6 4.68718559848 35.4374590838\n", "7 4.68468177153 40.1221408553\n", "8 5.05290361605 45.1750444714\n", "9 4.73898052765 49.914024999\n", "10 4.70690791746 54.6209329165\n", "11 4.50240017279 59.1233330893\n", "12 4.27566340317 63.3989964924\n", "13 4.25538202128 67.6543785137\n", "14 3.81795459454 71.4723331083\n", "15 3.87937009897 75.3517032072\n", "16 4.04261284213 79.3943160494\n", "17 4.08350528576 83.4778213351\n", "18 4.48996769966 87.9677890348\n", "19 3.91403460156 91.8818236363\n", "20 3.84677999195 95.7286036283\n", "21 3.80839549117 99.5369991195\n", "22 4.51411169618 104.051110816\n", "23 4.08910255992 108.140213376\n", "24 4.4797335534 112.619946929\n", "25 4.89923921364 117.519186143\n", "26 4.31338353073 121.832569673\n", "27 4.2918089177 126.124378591\n", "28 4.12560127765 130.249979869\n", "29 3.9072987636 134.157278632\n", "30 4.5453620366 138.702640669\n", "31 8.30423913322 147.006879802\n" ] } ], "source": [ "res = []\n", "cumulative = 0\n", "for i in range(len(cohorts)-1):\n", " td = cohorts[i].total_divergence(cohorts[i+1], JSDivergence)\n", " cumulative += td\n", " print(i, td, cumulative)\n", " res.append((i, cumulative))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xs, ys = zip(*res)\n", "thinkplot.Plot(xs, ys)\n", "thinkplot.Config(xlabel='Cohort #',\n", " ylabel='Cumulative JS divergence',\n", " legend=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Conclusion: Using this set of questions from the GSS, and two measures of divergence, it seems that the total divergence between successive cohorts is nearly constant over time.\n", "\n", "If a \"generation\" is supposed to be a sequence of cohorts with relatively small differences between them, punctuated by periods of larger differences, this study suggests that generations do not exist." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.11" } }, "nbformat": 4, "nbformat_minor": 0 }