I'm an economics PhD student playing around with the new Discrete Choice features in Stata 16. We are learning about nested logit using Hansen's textbook so I was playing around with this CPS09 dataset this evening: https://www.ssc.wisc.edu/~bhansen/ec...s/cps09mar.dta
I wanted to do a basic nested logit on marital status as a function of age for women in the sample.
Code:
/* bring in the cps09 data and create a copy */ use cps09mar;frame copy default q1; /* now we try to estimate the nested logit */ frame change q1; keep if female == 1; keep marital age; /* reshape the data as necessary */ gen id = _n; tabulate marital, generate(m); reshape long m, i(id) j(chosen); cmset id chosen; cmtab, choice(m); /* a baseline logit model with no nesting -> works fine*/ cmclogit m, casevars(age); /* set up two levels here */ nlogitgen middle = marital(together: 1 | 2 | 3, widowed: 4, separated: 5 | 6, single: 7); nlogitgen top = marital(together: 1 | 2 | 3 | 4 | 5 | 6, single: 7); /* we get a warning here what does it mean: variable marital has replicate levels for one or more cases; this is not allowed */ nlogittree marital middle top, case(id); tree structure specified for the nested logit model top N middle N marital N ------------------------------------------------------- together 120050 --- together 89516 --- 1 86730 | |- 2 1015 | +- 3 1771 |- widowed 3815 --- 4 3815 +- separated 26719 --- 5 22253 +- 6 4466 single 31164 --- single 31164 --- 7 31164 ------------------------------------------------------- total 151214 N = number of observations at each level Note: At least one case has replicated alternatives; nlogit will not allow this. Note: At least one case has only one alternative; nlogit will drop these cases. /* run the estimation */ nlogit m || top: || middle: || marital:, case(id); note: branch 2 of level 1 is degenerate and the associated dissimilarity parameter is not defined; see help nlogit for details variable marital has replicate levels for one or more cases; this is not allowed r(459);
Code:
* Example generated by -dataex-. To install: ssc install dataex clear input float id byte chosen double(age marital) byte m int(middle top) 1 1 41 1 1 1 1 1 2 41 1 0 1 1 1 3 41 1 0 1 1 1 4 41 1 0 1 1 1 5 41 1 0 1 1 1 6 41 1 0 1 1 1 7 41 1 0 1 1 2 1 66 5 0 3 1 2 2 66 5 0 3 1 2 3 66 5 0 3 1 2 4 66 5 0 3 1 2 5 66 5 1 3 1 2 6 66 5 0 3 1 2 7 66 5 0 3 1 3 1 49 1 1 1 1 3 2 49 1 0 1 1 3 3 49 1 0 1 1 3 4 49 1 0 1 1 3 5 49 1 0 1 1 3 6 49 1 0 1 1 3 7 49 1 0 1 1 4 1 52 1 1 1 1 4 2 52 1 0 1 1 4 3 52 1 0 1 1 4 4 52 1 0 1 1 4 5 52 1 0 1 1 4 6 52 1 0 1 1 4 7 52 1 0 1 1 end label values middle lb_middle label def lb_middle 1 "together", modify label def lb_middle 3 "separated", modify label values top lb_top label def lb_top 1 "together", modify
Thanks for your help.
Stephen
0 Response to issues with nested logit
Post a Comment