Notebook–A visual intuition for the instrumental argument for equality

— link-citations: true title: Notebook–A visual intuition for the instrumental argument for equality published: 2018-04-25 tags: notebook, social welfare, inequality —

var nerd = require('nerdamer/all')
var tex = require('./content/data/offline/tex-helper')
var plot = require('./content/data/offline/plot-helper')
var q = "quantitative"
var incomeDistribution = nerd('p^2 * 30')
var percentileDomain = [0, 100]
$$html$$ = tex(incomeDistribution)
\(30 \cdot p^{2}\)
var incomeDistributionFn = incomeDistribution.buildFunction()
var values = plot.mkRange(percentileDomain, 1)
  .map(percentile => {
    return { percentile, income: incomeDistributionFn(percentile) }
  })
var chart = {
  data: { values },
  mark: 'line',
  encoding: {
    x: { field: 'percentile', type: q },
    y: { field: 'income', type: q }
  }
}
$$html$$ = plot.mkGraphHtml(chart)
var minIncome = incomeDistributionFn(percentileDomain[0])
var maxIncome = incomeDistributionFn(percentileDomain[1])
var utilityOfMarginalDollar = nerd(`1 - d/${maxIncome}`)
var incomeDomain = [
  minIncome,
  maxIncome
]
$$html$$ = tex(utilityOfMarginalDollar)
\(-\frac{d}{300000}+1\)
var utilityOfMarginalDollarFn = utilityOfMarginalDollar.buildFunction()
var values = plot.mkRange(incomeDomain, 1000)
  .map(income => {
    return { income, marginalUtility: utilityOfMarginalDollarFn(income) }
  })
var chart = {
  data: { values },
  mark: 'line',
  encoding: {
    x: { field: 'income', type: q },
    y: { field: 'marginalUtility', type: q }
  }
}
$$html$$ = plot.mkGraphHtml(chart)
var utilityOfIncome = nerd(`integrate(${utilityOfMarginalDollar})`)
$$html$$ = tex(utilityOfIncome)
\(-\frac{d^{2}}{600000}+d\)
var utilityOfIncomeFn = utilityOfIncome.buildFunction()
var values = plot.mkRange(incomeDomain, 1000)
  .map(income => {
    return { income, utility: utilityOfIncomeFn(income) }
  })
var chart = {
  data: { values },
  mark: 'line',
  encoding: {
    x: { field: 'income', type: q },
    y: { field: 'utility', type: q }
  }
}
$$html$$ = plot.mkGraphHtml(chart)
var utilityAtPercentile = utilityOfIncome.sub('d', incomeDistribution)
$$html$$ = tex(utilityAtPercentile)
\(-\frac{3 \cdot p^{4}}{2000}+30 \cdot p^{2}\)
var utilityAtPercentileFn = utilityAtPercentile.buildFunction()
var inegalitarianValues = plot.mkRange(percentileDomain, 1)
  .map(percentile => {
    return {
      percentile,
      utility: utilityAtPercentileFn(percentile),
      series: 'inegalitarian'
     }
  })
var chart = {
  data: { values: inegalitarianValues },
  mark: 'line',
  encoding: {
    x: { field: 'percentile', type: q },
    y: { field: 'utility', type: q }
  }
}
$$html$$ = plot.mkGraphHtml(chart)
var averageIncomeExp = `defint((${incomeDistribution}), p, 0, 100)/100`
var averageIncome = nerd(`defint((${incomeDistribution}), 0, 100)/100`)
var averageHappinessExp = `defint((${utilityAtPercentile}), p, 0, 100)/100`
var averageHappiness = nerd(`defint((${utilityAtPercentile}), 0, 100)/100`)
$$html$$ = tex(
  averageIncomeExp,
  averageIncome,
  averageHappinessExp,
  averageHappiness)
\(\frac{\int\limits_{0}^{100} {\left(30 \cdot {p}^{2}\right)}\, dp}{100}\)
\(100000\)
\(\frac{\int\limits_{0}^{100} {\left(\left(- \frac{3}{2000}\right) \cdot {p}^{4} + 30 \cdot {p}^{2}\right)}\, dp}{100}\)
\(70000\)
var egalIncomeDistribution = nerd(averageIncome)
var egalUtilityAtPercentile = utilityOfIncome.sub('d', egalIncomeDistribution)
var egalUtilityAtPercentileFn = egalUtilityAtPercentile.buildFunction()
var egalitarianValues = plot.mkRange(percentileDomain, 1)
  .map(percentile => {
    return {
      percentile,
      utility: egalUtilityAtPercentileFn(percentile),
      series: 'egalitarian'
     }
  })
var chart = {
  config: {
    rule: {
      strokeDash: [8, 8],
      opacity: 0.3
    }
  },
  layer: [{
    mark: 'line',
    encoding: {
      x: { field: 'percentile', type: q },
      y: { field: 'utility', type: q },
      color: { field: 'series', type: 'nominal' }
    }
  }, {
    mark: 'rule',
    encoding: {
      y: {
        field: 'utility',
        type: q,
        aggregate: 'mean'
      },
      size: { value: 4 },
      color: { field: 'series', type: 'nominal' }
    }
  }],
  data: { values: [].concat(inegalitarianValues, egalitarianValues) }
}
$$html$$ = plot.mkGraphHtml(chart)
var averageIncomeExp = `defint((${incomeDistribution}), p, 0, 100)/100`
var averageIncome = nerd(`defint((${incomeDistribution}), 0, 100, p)/100`)
var inegalAverageHappinessExp = `defint((${utilityAtPercentile}), p, 0, 100)/100`
var inegalAverageHappiness = nerd(`defint((${utilityAtPercentile}), 0, 100, p)/100`)
var egalAverageHappinessExp = `defint((${egalUtilityAtPercentile}), p, 0, 100)/100`
var egalAverageHappiness = nerd(`defint((${egalUtilityAtPercentile}), 0, 100, p)/100`)
$$html$$ = tex(
  averageIncomeExp,
  averageIncome,
  inegalAverageHappinessExp,
  inegalAverageHappiness,
  egalAverageHappinessExp,
  egalAverageHappiness)
\(\frac{\int\limits_{0}^{100} {\left(30 \cdot {p}^{2}\right)}\, dp}{100}\)
\(100000\)
\(\frac{\int\limits_{0}^{100} {\left(\left(- \frac{3}{2000}\right) \cdot {p}^{4} + 30 \cdot {p}^{2}\right)}\, dp}{100}\)
\(70000\)
\(\frac{\int\limits_{0}^{100} {\left(\frac{250000}{3}\right)}\, dp}{100}\)
\(\frac{250000}{3}\)