/* Replication of conditional logit and predicted probabilities from Glasgow (2005) PRQ. Note this won't replicate exactly, as imputed data was used in the published article. */ #delimit; set mem 5000k; set more off; log using clogit.log, replace; use PRQ2005; generate id = _n; /* created a variable for ID# */ generate choice = 1; /* to keep track of which canidate this sub-dataset is for */ generate votec=0; replace votec=1 if vote==1; /* =1 if vote for Bush */ generate discand = disbush; egen mdisb = mean(disbush); egen mdisc = mean(disclin); egen mdisp = mean(dispero); keep id choice votec discand unionh joblossh joblossa joblossp unionjlh unionjla unionjlp wage1992 wagejlh manuf manufjlh hisp_aff im_aff ill_im_aff perfin natecon globecon japan_unfair limimp pid yrseduc income minority female age mdisb mdisc mdisp; save vbush, replace; /* We need to do this so we can use the "append" command later */ clear; use PRQ2005; generate id = _n; generate choice = 2; generate votec=0; replace votec=1 if vote==2; /* =1 if vote for Clinton */ generate discand = disclin; egen mdisb = mean(disbush); egen mdisc = mean(disclin); egen mdisp = mean(dispero); keep id choice votec discand unionh joblossh joblossa joblossp unionjlh unionjla unionjlp wage1992 wagejlh manuf manufjlh hisp_aff im_aff ill_im_aff perfin natecon globecon japan_unfair limimp pid yrseduc income minority female age mdisb mdisc mdisp; save vclin, replace; clear; use PRQ2005; generate id = _n; generate choice = 3; generate votec=0; replace votec=1 if vote==3; /* =1 if vote for Perot */ generate discand = dispero; egen mdisb = mean(disbush); egen mdisc = mean(disclin); egen mdisp = mean(dispero); keep id choice votec discand unionh joblossh joblossa joblossp unionjlh unionjla unionjlp wage1992 wagejlh manuf manufjlh hisp_aff im_aff ill_im_aff perfin natecon globecon japan_unfair limimp pid yrseduc income minority female age mdisb mdisc mdisp; save vpero, replace; clear; use vbush; append using vclin; append using vpero; /* this stacks all of our sub-datasets into 1 dataset */ sort id; generate cbush = 0; replace cbush = 1 if choice==1; generate cclin = 0; replace cclin = 1 if choice==2; /* creating data matrix, normalized wrt Perot */ generate bunion = unionh*cbush; generate cunion = unionh*cclin; generate bjoblh = joblossh*cbush; generate cjoblh = joblossh*cclin; generate bjobla = joblossa*cbush; generate cjobla = joblossa*cclin; generate bjoblp = joblossp*cbush; generate cjoblp = joblossp*cclin; generate bujlh = unionjlh * cbush; generate cujlh = unionjlh * cclin; generate bujla = unionjla * cbush; generate cujla = unionjla * cclin; generate bujlp = unionjlp * cbush; generate cujlp = unionjlp * cclin; generate bwage1992 = wage1992 * cbush; generate cwage1992 = wage1992 *cclin; generate bwagejlh = wagejlh * cbush; generate cwagejlh = wagejlh * cclin; generate bmanuf = manuf * cbush; generate cmanuf = manuf * cclin; generate bmanufjlh = manufjlh * cbush; generate cmanufjlh = manufjlh * cclin; generate bhisp_af = hisp_aff * cbush; generate chisp_aff = hisp_aff * cclin; generate bim_aff = im_aff * cbush; generate cim_aff = im_aff * cclin; generate bill_im_aff = ill_im_aff * cbush; generate cill_im_aff = ill_im_aff * cclin; generate bperfin = perfin * cbush; generate cperfin = perfin * cclin; generate bnatecon = natecon * cbush; generate cnatecon = natecon * cclin; generate bglobecon = globecon * cbush; generate cglobecon = globecon * cclin; generate bjapan = japan_unfair * cbush; generate cjapan = japan_unfair * cclin; generate blimimp = limimp * cbush; generate climimp = limimp * cclin; generate bpid = pid * cbush; generate cpid = pid * cclin; generate beduc = yrseduc * cbush; generate ceduc = yrseduc * cclin; generate bincome = income * cbush; generate cincome = income * cclin; generate bminority = minority * cbush; generate cminority = minority * cclin; generate bfemale = female * cbush; generate cfemale = female * cclin; generate bage = age * cbush; generate cage = age * cclin; clogit votec discand bunion bjoblh bjobla bjoblp bujlh bujla bujlp bwage1992 bwagejlh bmanuf bmanufjlh bhisp_af bim_aff bill_im_aff bperfin bnatecon bglobecon bjapan blimimp bpid beduc bincome bminority bfemale bage cbush cunion cjoblh cjobla cjoblp cujlh cujla cujlp cwage1992 cwagejlh cmanuf cmanufjlh chisp_af cim_aff cill_im_aff cperfin cnatecon cglobecon cjapan climimp cpid ceduc cincome cminority cfemale cage cclin, group(id); matrix coeffs = e(b); matrix covmat = e(V); drawnorm b1-b53, means(coeffs) cov(covmat) double; egen minc = mean(income); egen meduc = mean(yrseduc); egen mwage = mean(wage1992); egen mhisp = mean(hisp_aff); egen mim = mean(im_aff); egen mill = mean(ill_im_aff); generate bjl0u0 = .; generate cjl0u0 = .; generate pjl0u0 = .; generate bjl3u0 = .; generate cjl3u0 = .; generate pjl3u0 = .; generate bjl0u1 = .; generate cjl0u1 = .; generate pjl0u1 = .; generate bjl3u1 = .; generate cjl3u1 = .; generate pjl3u1 = .; local a=1; while `a'<101{; qui generate ebjl0u0 = exp(mdisb*b1[`a'] + 0*b2[`a'] + 0*b3[`a'] + 1*b4[`a'] + 0*b5[`a'] + 0*b6[`a'] + 0*b7[`a'] + 0*b8[`a'] + mwage*b9[`a'] + 0*b10[`a'] + 0*b11[`a'] + 0*b12[`a'] + mhisp*b13[`a'] + mim*b14[`a'] + mill*b15[`a'] + (-1*b16[`a']) + (-1*b17[`a']) + (-1*b18[`a']) + 1*b19[`a'] + 1*b20[`a'] + 2*b21[`a'] + meduc*b22[`a'] + minc*b23[`a'] + 0*b24[`a'] + 0*b25[`a'] + 46*b26[`a'] + b27[`a']); qui generate ecjl0u0 = exp(mdisc*b1[`a'] + 0*b28[`a'] + 0*b29[`a'] + 1*b30[`a'] + 0*b31[`a'] + 0*b32[`a'] + 0*b33[`a'] + 0*b34[`a'] + mwage*b35[`a'] + 0*b36[`a'] + 0*b37[`a'] + 0*b38[`a'] + mhisp*b39[`a'] + mim*b40[`a'] + mill*b41[`a'] + (-1*b42[`a']) + (-1*b43[`a']) + (-1*b44[`a']) + 1*b45[`a'] + 1*b46[`a'] + 2*b47[`a'] + meduc*b48[`a'] + minc*b49[`a'] + 0*b50[`a'] + 0*b51[`a'] + 46*b52[`a'] + b53[`a']); qui generate epjl0u0 = exp(mdisp*b1[`a']); qui generate sumjl0u0 = ebjl0u0 + ecjl0u0 + epjl0u0; qui replace bjl0u0 = (ebjl0u0/sumjl0u0)*100 if _n==`a'; qui replace cjl0u0 = (ecjl0u0/sumjl0u0)*100 if _n==`a'; qui replace pjl0u0 = (epjl0u0/sumjl0u0)*100 if _n==`a'; drop ebjl0u0 ecjl0u0 epjl0u0 sumjl0u0; qui generate ebjl3u0 = exp(mdisb*b1[`a'] + 0*b2[`a'] + 3*b3[`a'] + 1*b4[`a'] + 0*b5[`a'] + 0*b6[`a'] + 0*b7[`a'] + 0*b8[`a'] + mwage*b9[`a'] + (mwage*3*b10[`a']) + 0*b11[`a'] + 0*b12[`a'] + mhisp*b13[`a'] + mim*b14[`a'] + mill*b15[`a'] + (-1*b16[`a']) + (-1*b17[`a']) + (-1*b18[`a']) + 1*b19[`a'] + 1*b20[`a'] + 2*b21[`a'] + meduc*b22[`a'] + minc*b23[`a'] + 0*b24[`a'] + 0*b25[`a'] + 46*b26[`a'] + b27[`a']); qui generate ecjl3u0 = exp(mdisc*b1[`a'] + 0*b28[`a'] + 3*b29[`a'] + 1*b30[`a'] + 0*b31[`a'] + 0*b32[`a'] + 0*b33[`a'] + 0*b34[`a'] + mwage*b35[`a'] + (mwage*3*b36[`a']) + 0*b37[`a'] + 0*b38[`a'] + mhisp*b39[`a'] + mim*b40[`a'] + mill*b41[`a'] + (-1*b42[`a']) + (-1*b43[`a']) + (-1*b44[`a']) + 1*b45[`a'] + 1*b46[`a'] + 2*b47[`a'] + meduc*b48[`a'] + minc*b49[`a'] + 0*b50[`a'] + 0*b51[`a'] + 46*b52[`a'] + b53[`a']); qui generate epjl3u0 = exp(mdisp*b1[`a']); qui generate sumjl3u0 = ebjl3u0 + ecjl3u0 + epjl3u0; qui replace bjl3u0 = (ebjl3u0/sumjl3u0)*100 if _n==`a'; qui replace cjl3u0 = (ecjl3u0/sumjl3u0)*100 if _n==`a'; qui replace pjl3u0 = (epjl3u0/sumjl3u0)*100 if _n==`a'; drop ebjl3u0 ecjl3u0 epjl3u0 sumjl3u0; qui generate ebjl0u1 = exp(mdisb*b1[`a'] + 1*b2[`a'] + 0*b3[`a'] + 1*b4[`a'] + 0*b5[`a'] + 0*b6[`a'] + 0*b7[`a'] + 0*b8[`a'] + mwage*b9[`a'] + 0*b10[`a'] + 0*b11[`a'] + 0*b12[`a'] + mhisp*b13[`a'] + mim*b14[`a'] + mill*b15[`a'] + (-1*b16[`a']) + (-1*b17[`a']) + (-1*b18[`a']) + 1*b19[`a'] + 1*b20[`a'] + 2*b21[`a'] + meduc*b22[`a'] + minc*b23[`a'] + 0*b24[`a'] + 0*b25[`a'] + 46*b26[`a'] + b27[`a']); qui generate ecjl0u1 = exp(mdisc*b1[`a'] + 1*b28[`a'] + 0*b29[`a'] + 1*b30[`a'] + 0*b31[`a'] + 0*b32[`a'] + 0*b33[`a'] + 0*b34[`a'] + mwage*b35[`a'] + 0*b36[`a'] + 0*b37[`a'] + 0*b38[`a'] + mhisp*b39[`a'] + mim*b40[`a'] + mill*b41[`a'] + (-1*b42[`a']) + (-1*b43[`a']) + (-1*b44[`a']) + 1*b45[`a'] + 1*b46[`a'] + 2*b47[`a'] + meduc*b48[`a'] + minc*b49[`a'] + 0*b50[`a'] + 0*b51[`a'] + 46*b52[`a'] + b53[`a']); qui generate epjl0u1 = exp(mdisp*b1[`a']); qui generate sumjl0u1 = ebjl0u1 + ecjl0u1 + epjl0u1; qui replace bjl0u1 = (ebjl0u1/sumjl0u1)*100 if _n==`a'; qui replace cjl0u1 = (ecjl0u1/sumjl0u1)*100 if _n==`a'; qui replace pjl0u1 = (epjl0u1/sumjl0u1)*100 if _n==`a'; drop ebjl0u1 ecjl0u1 epjl0u1 sumjl0u1; qui generate ebjl3u1 = exp(mdisb*b1[`a'] + 1*b2[`a'] + 3*b3[`a'] + 1*b4[`a'] + 0*b5[`a'] + 3*b6[`a'] + 0*b7[`a'] + 0*b8[`a'] + mwage*b9[`a'] + (mwage*3*b10[`a']) + 0*b11[`a'] + 0*b12[`a'] + mhisp*b13[`a'] + mim*b14[`a'] + mill*b15[`a'] + (-1*b16[`a']) + (-1*b17[`a']) + (-1*b18[`a']) + 1*b19[`a'] + 1*b20[`a'] + 2*b21[`a'] + meduc*b22[`a'] + minc*b23[`a'] + 0*b24[`a'] + 0*b25[`a'] + 46*b26[`a'] + b27[`a']); qui generate ecjl3u1 = exp(mdisc*b1[`a'] + 1*b28[`a'] + 3*b29[`a'] + 1*b30[`a'] + 0*b31[`a'] + 3*b32[`a'] + 0*b33[`a'] + 0*b34[`a'] + mwage*b35[`a'] + (mwage*3*b36[`a']) + 0*b37[`a'] + 0*b38[`a'] + mhisp*b39[`a'] + mim*b40[`a'] + mill*b41[`a'] + (-1*b42[`a']) + (-1*b43[`a']) + (-1*b44[`a']) + 1*b45[`a'] + 1*b46[`a'] + 2*b47[`a'] + meduc*b48[`a'] + minc*b49[`a'] + 0*b50[`a'] + 0*b51[`a'] + 46*b52[`a'] + b53[`a']); qui generate epjl3u1 = exp(mdisp*b1[`a']); qui generate sumjl3u1 = ebjl3u1 + ecjl3u1 + epjl3u1; qui replace bjl3u1 = (ebjl3u1/sumjl3u1)*100 if _n==`a'; qui replace cjl3u1 = (ecjl3u1/sumjl3u1)*100 if _n==`a'; qui replace pjl3u1 = (epjl3u1/sumjl3u1)*100 if _n==`a'; drop ebjl3u1 ecjl3u1 epjl3u1 sumjl3u1; local a = `a'+1; }; generate dbjlu0 = bjl0u0-bjl3u0; generate dcjlu0 = cjl0u0-cjl3u0; generate dpjlu0 = pjl0u0-cjl3u0; generate dbjlu1 = bjl0u1-bjl3u1; generate dcjlu1 = cjl0u1-cjl3u1; generate dpjlu1 = pjl0u1-cjl3u1; generate dbjl0u = bjl0u1-bjl0u0; generate dcjl0u = cjl0u1-cjl0u0; generate dpjl0u = pjl0u1-cjl0u0; generate dbjl3u = bjl3u1-bjl3u0; generate dcjl3u = cjl3u1-cjl3u0; generate dpjl3u = pjl3u1-cjl3u0; generate diffb = dbjl0u-dbjl3u; generate diffc = dcjl0u-dcjl3u; generate diffp = dpjl0u-dpjl3u; summarize bjl0u0 cjl0u0 pjl0u0 bjl3u0 cjl3u0 pjl3u0 bjl0u1 cjl0u1 pjl0u1 bjl3u1 cjl3u1 pjl3u1 dbjlu0 dcjlu0 dpjlu0 dbjlu1 dcjlu1 dpjlu1 dbjl0u dcjl0u dpjl0u dbjl3u dcjl3u dpjl3u diffb diffc diffp; log close;