DINA

This package uses DataDeps.jl to download the US distributional national accounts (DINA) dataset from Gabriel Zucman's website. The data are downloaded in bulk (>1GB) and stored in .julia/datadeps/dina/.

The dataset is described in Piketty, T, E. Saez and G. Zucman: Distributional National Accounts: Methods and Estimates for the United States, Quarterly Journal of Economics, 2018, 133 (2): 553-609.

The variables are described in the codebook at Gabriel Zucman's website.

Getting the micro data for a year

using DINA, DataFrames

tbl = get_dina(1980)
df80 = DataFrame(tbl)

first(df80, 5)

Getting the decile-year panel for selected variables

using DINA
import CSV

inc = :peinc
wgt = :dweght

dbt_var = [:ownermort, :rentalmort, :nonmort, :hwdeb]
var = [[:fiinc, :fninc, :ptinc, inc, :poinc, :ownerhome, :rentalhome]; dbt_var]
byvar = inc # compute deciles of `:peinc`

df = dina_quantile_panel(var, byvar, 10)

filename = joinpath(".", "dina-aggregated.csv") # hide
df |> CSV.write(filename) # hide

first(df, 5)

download

Some plots

using DataFrames, CairoMakie
using CairoMakie: AbstractPlotting.wong_colors
using LinearAlgebra: dot

agg_df = let
    df1 = select(df,
	    :group_id,
	    :age, :year, wgt, var...
    )
			
    df2 = combine(
	    groupby(df1, :year),
	    ([v, wgt] => ((x,w) -> dot(x,w)/sum(w)) => v for v in var)...
    )
		
    transform!(df2, ([d, inc] => ByRow(/) => string(d) * "2inc" for d in dbt_var)...)
end

let d = agg_df
	fig = Figure()
	
	# Define Layout, Labels, Titles
	Label(fig[1,1], "Growth of Household-Debt-To-Income in the USA", tellwidth = false)
	axs = [Axis(fig[2,1][1,i]) for i in 1:2]
	
	box_attr = (color = :gray90, )
	label_attr = (padding = (3,3,3,3), )
	
	Box(fig[2,1][1,1, Top()]; box_attr...)
	Label(fig[2,1][1,1, Top()], "relative to 1980"; label_attr...)
	
	Box(fig[2,1][1,2, Top()]; box_attr...)
	Label(fig[2,1][1,2, Top()], "relative to total debt in 1980"; label_attr...)
	
	# Plot
	i80 = findfirst(d.year .== 1980)
	
	for (i,dbt) in enumerate(dbt_var)
		var = string(dbt) * "2inc"
		for (j, fractionof) in enumerate([var, :hwdeb2inc])
			lines!(axs[j], d.year, d[!,var]/d[i80,fractionof], label = string(dbt), color = wong_colors[i])
		end
	end

	# Legend
	leg_attr = (orientation = :horizontal, tellheight = true, tellwidth = false)
	leg = Legend(fig[3,1], axs[1]; leg_attr...)

    save("fig_dbt.svg", fig) # hide
	fig
    nothing # hide
end

fig_dbt

    Modules = [DINA]