**************************************************************************************************************** * Do doctors contribute to socioeconomic inequalities in health care provision? An audit experiment in Tunisia * * Last updated 12/09/2025 by RG * **************************************************************************************************************** use "/Users/rg/Desktop/PUBLISHING/PUBLISH_Paper3/PUBLISH_PAPER3_JHE RESPONSE/2nd Submission to JHE/sp-ses.dta", clear *** Table 2: Doctor Characteristics *** *** column "public" *** * To have the N of public GPs, we keep in the sample all the public GPs (or doctors) without duplicates i.e. we drop half of the visits to public facilities where the GP saw the 2 (middle class & poor) profiles drop if poor_sp==1 & private==0 & gp_saw_two_sps==1 tab female if private==0 tab gp_age if private==0 tab correct_mgt_cv if private==0 tab gp_training if private==0 *** column "private" *** * Since each private GP saw the 2 (middle class & poor) profiles, we use the visits of one scenario only to have the N of private GPs (i.e. we drop the poor profile) use "/Users/rg/Desktop/PUBLISHING/PUBLISH_Paper3/PUBLISH_PAPER3_JHE RESPONSE/2nd Submission to JHE/sp-ses.dta", clear drop if poor_sp==1 & private==1 tab female if private==1 tab gp_age if private==1 tab correct_mgt_cv if private==1 tab gp_training if private==1 *** column p value of difference between (1) and (2) *** use "/Users/rg/Desktop/PUBLISHING/PUBLISH_Paper3/PUBLISH_PAPER3_JHE RESPONSE/2nd Submission to JHE/sp-ses.dta", clear tab female private if scenario_sp==1, chi2 V tab gp_age private if scenario_sp==1, chi2 V tab correct_mgt_cv private if scenario_sp==1, chi2 V tab gp_training private if scenario_sp==1, chi2 V ***************************************************************************************************************************** * ANALYSIS ***************************************************************************************************************************** use "/Users/rg/Desktop/PUBLISHING/PUBLISH_Paper3/PUBLISH_PAPER3_JHE RESPONSE/2nd Submission to JHE/sp-ses.dta", clear ******** Then, Set data as panel data by real_id (provider fixed effects) *********************************************** xtset real_id ************************************** global ylist_clinical_care correct_mgt_sp unnecessary_prescANDgiven_sp numb_drug_pANDg_sp global ylist_doctor_effort duration_sp history_index_sp exam_index_sp global ylist_cost consultation_fee_sp cost_drug_presc any_drug_given_GP_sp unncessary_given_GP_sp global ylist_communication gp_diagnosis_told_sp gp_explain_illness_sp gp_explain_whydrug_sp gp_explain_trt_sp gp_advice_comeback_sp sicknote_sp commun_index_sp global xlist poor_sp ***************************************************************************************************************************** * public vs private - interaction terms ***************************************************************************************************************************** gen public =private replace public=0 if private==1 replace public=1 if private==0 gen poor_spXpublic =poor_sp*public gen poor_spXprivate =poor_sp*private global xlist_bysector poor_spXpublic poor_spXprivate public ** xtsum real_id $ylist_clinical_care $ylist_doctor_effort $ylist_cost $ylist_communication $xlist ********************************************************* *** Baseline regression * Fixed effects * ********************************************************* ssc install outreg2 ********************************************************* *********** * Table 3 * *********** ********************** * Table 3 * Panel A * ********************** foreach var in $ylist_clinical_care { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table 3 Panel A Clinical care fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on clinical care") ctitle("`var'") } * Compute the control mean of all the variables in the table * foreach var in $ylist_clinical_care { mean `var' if middle_class_sp==1 } foreach var in $ylist_doctor_effort { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table 3 Panel A Doctor effort fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort") ctitle("`var'") } * Compute the control mean of all the variables in the table * foreach var in $ylist_doctor_effort { mean `var' if middle_class_sp==1 } ********************* * Table 3 * Panel B * ********************* foreach var in $ylist_clinical_care { xtreg `var' $xlist_bysector i.fw_sp, fe outreg2 using "Table 3 Panel B Clinical care fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on clinical care by sector") ctitle("`var'") } * For each variable, compute the values in the "P value public=private" row * test poor_spXpublic = poor_spXprivate foreach var in $ylist_doctor_effort { xtreg `var' $xlist_bysector i.fw_sp, fe outreg2 using "Table 3 Panel B Doctor effort fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort by sector") ctitle("`var'") } * For each variable, compute the values in the "P value public=private" row * test poor_spXpublic = poor_spXprivate *********** * Table 4 * *********** ********************* * Table 4 * Panel A * ********************* foreach var in $ylist_cost { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table 4 Panel A Cost fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care") ctitle("`var'") } * Compute the control mean of all the variables in the table * foreach var in $ylist_cost { mean `var' if middle_class_sp==1 } ********************* * Table 4 * Panel B * ********************* foreach var in $ylist_cost { xtreg `var' $xlist_bysector i.fw_sp, fe outreg2 using "Table 4 Panel B Cost fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care by sector") ctitle("`var'") } * For each variable, compute the values in the "P value public=private" row * test poor_spXpublic = poor_spXprivate *********** * Table 5 * *********** ********************* * Table 5 * Panel A * ********************* foreach var in $ylist_communication { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table 5 Panel A Communication fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on communication") ctitle("`var'") } * Compute the control mean of all the variables in the table * foreach var in $ylist_communication { mean `var' if middle_class_sp==1 } ********************* * Table 5 * Panel B * ********************* foreach var in $ylist_communication { xtreg `var' $xlist_bysector i.fw_sp, fe outreg2 using "Table 5 Panel B Communication fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on communication by sector") ctitle("`var'") } * For each variable, compute the values in the "P value public=private" row * test poor_spXpublic = poor_spXprivate ********************************************************************************************* * Figure 1 Distribution of the consultation fees (top) and cost of prescribed drugs (bottom)* ********************************************************************************************* /// install ado file to plot cumulative distribution function: ssc install cdfplot ** Figure 1 (Top) cdfplot consultation_fee_sp, by(scenario_sp) graphregion(fcolor(white)) xtitle("Consultation fee (in Tunisian Dinar)") legend(col(1) lab(1 "Middle-class patients") lab(2 "Poor patients")) * test dominance ksmirnov consultation_fee_sp, by(scenario_sp) ** Figure 1 (Bottom) cdfplot cost_drug_presc, by(scenario_sp) graphregion(fcolor(white)) xtitle("Cost of prescribed drugs (in Tunisian Dinar)") legend(col(1) lab(1 "Middle-class patients") lab(2 "Poor patients")) * test dominance ksmirnov cost_drug_presc, by(scenario_sp) ***************************************************************************************************************************** ***************************************************************************************************************************** ***************************************************************************************************************************** ***************************************************************************************************************************** *** Appendix tables *** ******************************************** * Table A2 : public doctor characteristics * ******************************************** *** column (1) "public doctors received both middle-class and poor SPs"*** tab female if scenario_sp==1 & private==0 & gp_saw_two_sps==1 tab gp_age if scenario_sp==1 & private==0 & gp_saw_two_sps==1 tab correct_mgt_cv if scenario_sp==1 & private==0 & gp_saw_two_sps==1 tab gp_training if scenario_sp==1 & private==0 & gp_saw_two_sps==1 *** column (2) "public doctors received middle-class SPs ONLY"*** tab female if middle_class_sp==1 & private==0 & gp_saw_two_sps==0 tab gp_age if middle_class_sp==1 & private==0 & gp_saw_two_sps==0 tab correct_mgt_cv if middle_class_sp==1 & private==0 & gp_saw_two_sps==0 tab gp_training if middle_class_sp==1 & private==0 & gp_saw_two_sps==0 *** column p value of difference between (1) and (2) ""public doctors received both middle-class and poor SPs & public doctors received MIDDLE-CLASS SPs ONLY"*** tab female gp_saw_two_sps if scenario_sp==1 & private==0, chi2 V tab gp_age gp_saw_two_sps if scenario_sp==1 & private==0, chi2 V tab correct_mgt_cv gp_saw_two_sps if scenario_sp==1 & private==0, chi2 V tab gp_training gp_saw_two_sps if scenario_sp==1 & private==0, chi2 V *** column (3) "public doctors received poor SPs ONLY"*** tab female if poor_sp==1 & private==0 & gp_saw_two_sps==0 tab gp_age if poor_sp==1 & private==0 & gp_saw_two_sps==0 tab correct_mgt_cv if poor_sp==1 & private==0 & gp_saw_two_sps==0 tab gp_training if poor_sp==1 & private==0 & gp_saw_two_sps==0 *** column p value of difference between (2) and (3) "public doctors received MIDDLE-CLASS SPs ONLY & those received POOR SPs ONLY"*** tab female scenario_sp if private==0 & gp_saw_two_sps==0, chi2 V tab gp_age scenario_sp if private==0 & gp_saw_two_sps==0, chi2 V tab correct_mgt_cv scenario_sp if private==0 & gp_saw_two_sps==0, chi2 V tab gp_training scenario_sp if private==0 & gp_saw_two_sps==0, chi2 V ******************************************************** * Table A7 : Robustness checks * ******************************************************** * Column (1) includes the main results (from table 3, 4 and 5), included in this table to better visualise the overall results* *************************************************************************************************** * Column (4) No SP fieldworker fixed effects Regressions * ********************************************************** foreach var in $ylist_clinical_care { reg `var' $xlist i.fw_sp, vce(cluster real_id) outreg2 using "Table A 7 (4) Clinical care No sp fe", st(coef se) dec(3) nocons title("Effect of SES on clinical care No sp fe") ctitle("`var'") } foreach var in $ylist_doctor_effort { reg `var' $xlist i.fw_sp, vce(cluster real_id) outreg2 using "Table A 7 (4) Doctor effort No sp fe", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort No sp fe") ctitle("`var'") } foreach var in $ylist_cost { reg `var' $xlist i.fw_sp, vce(cluster real_id) outreg2 using "Table A 7 (4) Cost No sp fe", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care No sp fe") ctitle("`var'") } foreach var in $ylist_communication { reg `var' $xlist i.fw_sp, vce(cluster real_id) outreg2 using "Table A 7 (4) Communication No sp fe", st(coef se ci) dec(3) nocons title("Effect of SES on communication No sp fe") ctitle("`var'") } * Column (5) Multi-level mixed effects models * *********************************************** foreach var in $ylist_clinical_care { mixed `var' $xlist i.fw_sp || real_id: outreg2 using "Table A 7 (5) Clinical care mixed effects", st(coef se) dec(3) nocons title("Effect of SES on clinical care mixed effects") ctitle("`var'") } foreach var in $ylist_doctor_effort { mixed `var' $xlist i.fw_sp || real_id: outreg2 using "Table A 7 (5) Doctor effort mixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort mixed effects") ctitle("`var'") } foreach var in $ylist_cost { mixed `var' $xlist i.fw_sp || real_id: outreg2 using "Table A 7 (5) Cost mixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care mixed effects") ctitle("`var'") } foreach var in $ylist_communication { mixed `var' $xlist i.fw_sp || real_id: outreg2 using "Table A 7 (5) Communication mixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on communication mixed effects") ctitle("`var'") } * Column (2) Regressions with the sample of doctors who saw both SPs * ********************************************************************** drop if private==0 & gp_saw_two_sps==0 foreach var in $ylist_clinical_care { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (2) Clinical care fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on clinical care sample both sp") ctitle("`var'") } foreach var in $ylist_doctor_effort { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (2) Doctor effort fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort sample both sp") ctitle("`var'") } foreach var in $ylist_cost { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (2) Cost fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care sample both sp") ctitle("`var'") } foreach var in $ylist_communication { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (2) Communication fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on communication sample both sp") ctitle("`var'") } * Column (3) Regressions with the sample of doctors who only saw SPs portraying both poor and middle-class * ***************************************************************************************************************** use "/Users/rg/Desktop/PUBLISHING/PUBLISH_Paper3/PUBLISH_PAPER3_JHE RESPONSE/2nd Submission to JHE/sp-ses.dta", clear br fw_sp if poor_sp==1 tab fw_sp if poor_sp==1 tab fw_sp if poor_sp==0 * To have this sample of doctors who only saw SPs portraying both poor and middle-class, we have to : * (1) remove from the sample the visits with SPs who portrayed the middle-class (only) but not the poor profile visits * drop if fw_sp!=1 & fw_sp!=3 & fw_sp!=4 & fw_sp!=12 & fw_sp!=13 * (2) remove from the sample the visits of the poor scenario sample for which the SPs who portrayed both scenarios did not do the equivalent middle-class visits * drop if real_id==19 | real_id==22 | real_id==26 | real_id==37 | real_id==38 | real_id==40 | real_id==42| real_id==44| real_id==47| real_id==57| real_id==60| real_id==61| real_id==64| real_id==65| real_id==67| real_id==7| real_id==71| real_id==76| real_id==80| real_id==81| real_id==83| real_id==87| real_id==88| real_id==92| real_id==105| real_id==108| real_id==118| real_id==123| real_id==127| real_id==135| real_id==151| real_id==157| real_id==160| real_id==187| real_id==203| real_id==1023| real_id==1031| real_id==1041| real_id==1042| real_id==1043| real_id==1053| real_id==1062| real_id==1063| real_id==1064| real_id==1065| real_id==1071| real_id==1132| real_id==2122| real_id==2124| real_id==2212| real_id==2222| real_id==2223| real_id==2312| real_id==2321| real_id==3121| real_id==3211| real_id==3212| real_id==3221| real_id==3312| real_id==3321| real_id==3322| real_id==3414| real_id==3415| real_id==3514| real_id==3612| real_id==3622| real_id==3623| real_id==4034| real_id==4042| real_id==4056| real_id==4065 foreach var in $ylist_clinical_care { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (3) Clinical care fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on clinical care sample of visits with both SPs") ctitle("`var'") } foreach var in $ylist_doctor_effort { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (3) Doctor effort fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on Doctor effort sample of visits with both SPs") ctitle("`var'") } foreach var in $ylist_cost { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (3) Cost fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on cost of care sample of visits with both SPs") ctitle("`var'") } foreach var in $ylist_communication { xtreg `var' $xlist i.fw_sp, fe outreg2 using "Table A 7 (3) Communication fixed effects", st(coef se ci) dec(3) nocons title("Effect of SES on communication sample of visits with both SPs") ctitle("`var'") } ************************************************************************************************************* ****** TABLES A 8 and A 9: CALCULATION OF ADJUSTED (or CRITICAL) P VALUES [VALUES IN "CRITICAL P VALUE" ROWS] ************************************************************************************************************* ** PASTE the (original) P VALUES (result) TABLE BY TABLE IN 1 COLUMN in the STATA data editor ** ssc install smileplot rename var1 pvalue multproc ,method(simes) pvalue(pvalue) puncor(.05) clear ** then Paste P VALUES in the first column on the data editor * drop pvalue rename var2 pvalue multproc ,method(simes) pvalue(pvalue) puncor(.05) clear ** then Paste P VALUES in the first column on the data editor * rename var1 pvalue multproc, method(simes) pvalue(pvalue) puncor(.05) critical (critical_pvalue) rank(rank) reject(reject) clear ** repeat for each table and panel * ***************************************************************************** ****** Table A 10 : CALCULATION OF MINIMUM DETECTABLE EFFECT OF ALL OUTCOMES *********** ***************************************************************************** *Correct case management * power twoproportions 0.338, n(260) power(0.8) *Received any unnecessary drug * power twoproportions 0.931, n(260) power(0.8) *Number of total drugs received * xtsum numb_drug_pANDg_sp if poor_sp==0 power twomeans 3.892, sd(2.357) n(260) power(0.8) direction(lower) *Time spent (min) * xtsum duration_sp if poor_sp==0 power twomeans 7.715, sd(5.477) n(260) power(0.8) direction(lower) *% of recommended questions asked * power twoproportions 0.394, n(260) power(0.8) direction(lower) *% of recommended examinations performed * power twoproportions 0.408, n(260) power(0.8) direction(lower) *Consultation fees (TND) * xtsum consultation_fee_sp if poor_sp==0 power twomeans 19.669, sd(12.459) n(260) power(0.8) direction(lower) *Cost of prescribed drugs (TND) * xtsum cost_drug_presc if poor_sp==0 power twomeans 28.140, sd(17.570) n(260) power(0.8) direction(lower) *Given any drug free of charge * power twoproportions 0.062, n(260) power(0.8) *Given any unnecessary drug free of charge * power twoproportions 0.054, n(260) power(0.8) *Doctor offered a diagnosis before the patient asked * power twoproportions 0.515, n(260) power(0.8) direction(lower) *Doctor explained what the illness is * power twoproportions 0.393, n(260) power(0.8) direction(lower) *Doctor explained why drugs were prescribed * power twoproportions 0.338, n(260) power(0.8) direction(lower) *Doctor explained treatment plan * power twoproportions 0.431, n(260) power(0.8) direction(lower) *Doctor advised patient to come back if no improvement * power twoproportions 0.300, n(260) power(0.8) direction(lower) *Doctor offered a sicknote * power twoproportions 0.323, n(260) power(0.8) direction(lower) * Effective communication index * xtsum commun_index_sp if poor_sp==0 power twomeans 0.383, sd(0.297) n(260) power(0.8) direction(lower) ******/ END */******************************************************************