-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path005A_CountTransitionsUnweighted_Plot.do
212 lines (174 loc) · 7.48 KB
/
005A_CountTransitionsUnweighted_Plot.do
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
// [0] Intro {{{1
// ----------------------------------------------------------------------------
/*
Project title: "Markov health transition probabilities"
(c) Juergen Jung, 2020
Towson University, Towson
jjung@towson.edu
----------------------------------------------------------------------------
This version uses: SPost13 commands and NOT SPost9 commands such as prvalue etc.
https://jslsoc.sitehost.iu.edu/spost13.htm
https://jslsoc.sitehost.iu.edu/web_spost13/sp13_faqspost9.htm
----------------------------------------------------------------------------
Uses: Rand HRS Data and MEPS data for 2000, 2002, 2004, 2006, and 2008
HRS is only available for every other year. So we limit ourselves to years where both
the HRS and MEPS data are available. The transition probabilities are therefore
2-year transition probabilities.
----------------------------------------------------------------------------
We use 5 states of health
Use mgen to generate predictions with confidence intervals for certain
characteristics. That is we 'evaluate' the predictions at certain population
characteristics.
----------------------------------------------------------------------------
*/
// }}}1
// [1] Initialize {{{1
// ----------------------------------------------------------------------------
clear all
set matsize 100
set more off
// Turn off Stata colors in plots
//set scheme s1manual
//ssc install blindschemes, replace all
set scheme plotplainblind
if missing("$initOn") {
di "--------------------------"
di "ERROR: run 000_Init.do first"
di "--------------------------"
}
local ageLo = 20
local ageHi = 95
// Graph options: MEPS vs HRS
global line_meps "msymbol(s) connect(l) mcolor(orange_red*1.75) lcolor(orange_red*1.75) lpattern(dash)"
global CI_meps "color(orange_red*0.3)"
global line_hrs "msymbol(o) connect(l) mcolor(gray*1.1) lcolor(gray*1.1) lpattern(dot)"
global CI_hrs "color(gray*0.2)"
global line_hrs_adj "msymbol(s) connect(l) mcolor(ebblue*1.4) lcolor(ebblue*1.4) lpattern(dot)"
// Graph options: Males vs. Females
global line_f "msymbol(s) connect(l) mcolor(orange_red*1.5) lcolor(orange_red*1.5) lpattern(dash)"
global CI_f "color(orange_red*0.3)"
// HRS adjusted line
global line_f_adj "msymbol(s) connect(l) mcolor(orange_red*1.85) lcolor(orange_red*1.85) lpattern(dash)"
global line_m "msymbol(o) connect(l) mcolor(ebblue*1.5) lcolor(ebblue*1.5) lpattern(dot)"
global CI_m "color(ebblue*0.3)"
// HRS adjusted line
global line_m_adj "msymbol(o) connect(l) mcolor(ebblue*1.85) lcolor(ebblue*1.85) lpattern(dot)"
// Load data
use "$DatDir/MEPS_HRS_1992_2017_1r.dta", clear
//}}}1
// [2] Count by 5 year age group and store results in matrices {{{1
// ----------------------------------------------------------------------------
label variable L_healthStatus "Health Status (t-1)"
label variable healthStatus "Health Status (t)"
label variable F_healthStatus "Health Status (t+1)"
label variable L_healthStatusD "Health Status (t-1)"
label variable healthStatusD "Health Status (t)"
label variable F_healthStatusD "Health Status (t+1) incl. Death"
// MEPS and HRS
forvalues i_meps = 0/1 {
forvalues i_age = 1/15 {
mat A = J(5,6,.)
mat B`i_age'`i_meps' = J(5,6,.)
if `i_age' == 1 {
local age_low = 20
local age_hi = 24
}
else {
local age_low = 15 + `i_age' * 5 - 2
local age_hi = 15 + `i_age' * 5 + 2
}
//tabulate healthStatus F_healthStatusD if d_MEPS==`i_meps' & lage == `i_age', row nofreq matcell(A)
tabulate healthStatus F_healthStatusD if d_MEPS==`i_meps' & age >= `age_low' & age <= `age_hi', row nofreq matcell(A)
mata : st_matrix("C", colsum(st_matrix("A")))
forvalues i = 1/5 {
forvalues j = 1/6 {
mat B`i_age'`i_meps'[`i',`j'] = A[`i',`j']/C[1, `i']
}
}
matlist B`i_age'`i_meps'
}
}
//}}}1
// [3] Convert matrices to data {{{1
// ----------------------------------------------------------------------------
// Move to data and plot
// svmat by lage --> somehow
// make column vector meps_a1to1v(age) meps_a1to2v(age) .... meps_5to6v(agev) and then use svmat to store
// make column vector hrs_a1to1v(age) hrs_a1to2v(age) .... hrs_5to6v(agev) and then use svmat to store
//
clear // clears data
mat lagev = J(15,1,.)
forvalues i_age = 1/15 {
mat lagev[`i_age',1] = 20 + (`i_age' - 1) * 5
}
svmat lagev
forvalues i_meps = 0/1 {
forvalues i_row = 1/5 {
forvalues i_col = 1/6 {
mat p_`i_meps'_`i_row'_`i_col'v = J(15,1,.)
forvalues i_age = 1/15 {
mat p_`i_meps'_`i_row'_`i_col'v[`i_age',1] = B`i_age'`i_meps'[`i_row',`i_col']
}
svmat p_`i_meps'_`i_row'_`i_col'v
}
}
}
save "$DatDir/MEPS_HRS_1992-2017_TransitionCounts_Age.dta", replace
//}}}1
// [4] Make Plots - Data Cleaning Program {{{1
//-----------------------------------------------------------------------------
capture program drop f_prepareData
program define f_prepareData
// Cleaning steps: Express all variables as percentages, add labels, etc.
qui foreach v of varlist _all {
replace `v' = `v' * 100
label variable `v' %
}
replace lagev = lagev/100
label variable lagev "Age"
end
//}}}1
// [5] Plot counted relative frequencies by age group {{{1
//-----------------------------------------------------------------------------
use "$DatDir/MEPS_HRS_1992-2017_TransitionCounts_Age.dta", clear
// Call our cleaning step
f_prepareData
// Start plot
local h_from = 1
foreach from_status in "Excellent" "Very Good" "Good" "Fair" "Poor" {
local h_to = 1
foreach to_status in "Excellent" "Very Good" "Good" "Fair" "Poor" "Dead" {
if "`to_status'" != "Dead" {
graph twoway (connected p_1_`h_from'_`h_to'v1 lagev1, $line_meps) ///
(connected p_0_`h_from'_`h_to'v1 lagev1, $line_hrs), ///
xlabel(20(10)95) title("P(`to_status' | `from_status')") ///
legend(off) name(fig`h_to', replace)
}
else {
graph twoway (connected p_1_`h_from'_`h_to'v1 lagev1, $line_meps) ///
(connected p_0_`h_from'_`h_to'v1 lagev1, $line_hrs), ///
xlabel(20(10)95) title("P(`to_status' | `from_status')") ///
legend(ring(0) position(10) col(1) order(1 "MEPS" 2 "HRS")) ///
name(fig`h_to', replace)
}
local h_to = `h_to' + 1
}
// Make an empty plot, just to get legend out!!
//graph twoway (connected p_1_1_1v1 lagev1, $line_meps) ///
// (connected p_0_1_1v1 lagev1, $line_hrs), ///
// yscale(off) xscale(off) ///
// legend(ring(0) position(0) col(2) order(1 "MEPS" 2 "HRS")) ///
// name(jleg, replace)
//gr_edit .plotregion1.draw_view.setstyle, style(no)
// -----------------------------------------------
//graph combine fig1 fig2 fig3 fig4 fig5 fig6 jleg, ///
graph combine fig1 fig2 fig3 fig4 fig5 fig6, ///
xcommon col(2) imargin(1 1 1 1) graphregion(margin(l=1 r=1)) ///
iscale(0.8) ysize(20.0) xsize(16.0) ///
name(ffig,replace)
//
graph export "$TexDir/MEPSvsHRS_Count_TransGraph`h_from'_Dead.svg", replace
//
local h_from = `h_from' + 1
}
//}}}1