unzipfile ZA4582_v1-0-0.dta.zip
use ZA4582_v1-0-0.dta, clear
// Fix variables
// Life satisfaction
recode v545 ( 0 = 0 "Completely dissatisfied") ///
(10 = 10 "Completely satisfied") ///
(96 = .a "Not asked") ///
(99 = .b "No response") ///
, gen(lsat)
label var lsat "Life satisfaction"
// Household income (OECD)
recode v924 (99996 = .d "Can't be determined") ///
(99997 = .a "Refused") ///
( 0 = 0 "No income") ///
(99998 = .b "Don't know") ///
(99999 = .c "No response") ///
, gen(income)
label var income "Income"
// Age, truncated at 99.9th percentile
recode v729 (997 = .a "Refused") ///
(999 = .b "No Response"), gen(age)
label var age "Age"
qui centile(age), centile(99.9)
replace age = r(c_1) if age > r(c_1) & !missing(age)
// Fit model
regress lsat c.age##c.age##c.income
// Calculate income percentiles
centile(income), centile(10 25 50 75 90)
local r10 = r(c_1)
local r25 = r(c_2)
local r50 = r(c_3)
local r75 = r(c_4)
local r90 = r(c_5)
// Calculate margins
margins, at(age=(20 (5) 90) income=(`r10' `r50' `r75' `r90'))
// Plot
marginsplot, recastci(rarea) ciopts(color(gs12)) ///
ytitle("Predicted life satisfaction") ///
legend(order(8 "90th percentile" ///
7 "75th percentile" ///
6 "50th percentile" ///
5 "10th percentile") ring(0) pos(11) ///
title("Equivalized household income", size(*.7))) ///
xtitle("Age") ylab(, format(%6.1f)) title("") ///
note(" " "{it:Source:} German General Social Survey (Allbus), doi: 10.4232/1.12439" ///
"{it:Note:} Gray-shaded areas denote 95% confidence intervals.", span)
erase ZA4582_v1-0-0.dta
May 19, 2016
Random graphs (83): Quadratic by continuous interaction
Labels:
Allbus,
centile,
erase,
Interaction plot,
marginsplot,
Random graphs
