* ====================================================================================== * * A Two-Stage Theory of Discussant Influence on Vote Choice in Multi-Party Systems * * -- TABLE A1: Attrition analysis (FINAL VERSION) -- * * JP, 2014-06-13 * * ====================================================================================== * ** Set working directory cd "$WD/BJPOLS_replication_files" ** Open data file use rcs2009_ipk_dyads, clear set more off * ====================================================================================== * * Probit models * ====================================================================================== * ** Excluding dyads with discussant or ego voting for "other parties" drop if wabs_sonstige_GP==1 drop if wabs_sonstige_EGO == 1 | welle==2 ** Model 1: Agreement within ideological camps eststo bezdif2_camp: /// probit ctr_agree_camp_GP /// b4.ipk_bezGP /// i.GP1 /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// i.pid_accord /// gkoal /// polint3 /// b1.voteGP /// age i.male i.abi, vce(cluster id) fitstat estadd r(r2_mz) eststo bezdif2_camp_mfx: estpost margins, dydx(*) ** Model 2: Agreement on party within camp eststo bezdif2_party: /// probit ctr_agree_party_GP /// b4.ipk_bezGP /// i.GP1 /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// i.pid_accord /// gkoal /// polint3 /// b1.voteGP /// age i.male i.abi, vce(cluster id) fitstat estadd r(r2_mz) eststo bezdif2_party_mfx: estpost margins, dydx(*) esttab bezdif2_camp bezdif2_camp_mfx bezdif2_party bezdif2_party_mfx /// using "TableA1.rtf", /// label b(%9.2f) star(* .05 ** .01 *** .001) /// scalars("r2_mz McKelvey & Zavoina R\super 2" "N N") sfmt("%9.2f %9.0f") replace /// refcat(ipk_bez1_GP "Type of relationship (ref. cat. colleagues):" /// voteGPd2 "Vote intention of discussant (ref. cat. CDU/CSU):") /// mtitles("Estimate" "Marginal effect" "Estimate" "Marginal effect") /// modelwidth(7) nonumbers noobs not nonotes eqlabels(none) margin constant * ====================================================================================== * * Calculate first differences and marginal effects using simulation * ====================================================================================== * * ====================================================================================== * * Model 1: Agreement within ideological camps * ====================================================================================== * ** Open data file use rcs2009_ipk_dyads, clear set more off ** Excluding dyads with discussant or ego voting for "other parties" drop if wabs_sonstige_GP==1 drop if wabs_sonstige_EGO==1 | welle==2 probit ctr_agree_camp_GP /// ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez5_GP ipk_bez6_GP /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// GP1 /// pid_accord /// voteGPd2 voteGPd3 voteGPd4 voteGPd5 /// age male abi polint3 gkoal, vce(cluster id) ** Drop observations not in the model gen keep =1 if e(sample) drop if keep ~=1 ** Save data as a temporary file save temp, replace set seed 99 mat b=e(b) mat V=e(V) drawnorm b_ipk_bez1_GP b_ipk_bez2_GP b_ipk_bez3_GP b_ipk_bez5_GP b_ipk_bez6_GP /// b_ipk_wisGP b_ipk_verGP b_ipk_rl_corrGP b_GP1 b_pid_accord b_voteGPd2 /// b_voteGPd3 b_voteGPd4 b_voteGPd5 b_age b_male b_abi b_polint3 b_gkoal /// b_cons , mean(b) cov(V) n(1000) clear summ b_ipk_bez1_GP-b_cons ** Merge with temp data merge using temp * Calculate predicted probability of success with all variables set to their observed values forvalues i = 1/1000 { gen double sumxtimesb_`i'= b_cons[`i'] foreach var of varlist ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez5_GP ipk_bez6_GP /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// GP1 /// pid_accord /// voteGPd2 voteGPd3 voteGPd4 voteGPd5 /// age male abi polint3 gkoal { replace sumxtimesb_`i' = sumxtimesb_`i' + b_`var'[`i']*`var' } } gen p_mean = . forvalues i = 1/1000 { gen p_`i'= normal(sumxtimesb_`i') summ p_`i ', meanonly replace p_mean = r(mean) in `i' } drop p_1-p_1000 summ p_mean * First differences for categorical variables foreach var of varlist ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez4_GP ipk_bez5_GP ipk_bez6_GP { gen p`var'_mean = . gen fd`var'_mean = . } forvalues i = 1/1000 { gen double pipk_bez4_GP_`i' = normal(sumxtimesb_`i' - b_ipk_bez1_GP[`i']*ipk_bez1_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez5_GP[`i']*ipk_bez5_GP - b_ipk_bez6_GP[`i']*ipk_bez6_GP) summ pipk_bez4_GP_`i', meanonly replace pipk_bez4_GP_mean = r(mean) in `i' foreach j in 1 2 3 5 6 { gen double pipk_bez`j'_GP_`i' = normal(sumxtimesb_`i' - b_ipk_bez1_GP[`i']*ipk_bez1_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez5_GP[`i']*ipk_bez5_GP - b_ipk_bez6_GP[`i']*ipk_bez6_GP + b_ipk_bez`j'_GP[`i']*1) summ pipk_bez`j'_GP_`i', meanonly replace pipk_bez`j'_GP_mean = r(mean) in `i' gen double fdipk_bez`j'_GP_`i' = pipk_bez`j'_GP_`i' - pipk_bez4_GP_`i' summ fdipk_bez`j'_GP_`i', meanonly replace fdipk_bez`j'_GP_mean = r(mean) in `i' drop pipk_bez`j'_GP_`i' fdipk_bez`j'_GP_`i' } drop pipk_bez4_GP_`i' } foreach var of varlist voteGPd1 voteGPd2 voteGPd3 voteGPd4 voteGPd5 { gen p`var'_mean = . gen fd`var'_mean = . } forvalues i = 1/1000 { gen double pvoteGPd1_`i' = normal(sumxtimesb_`i' - b_voteGPd2[`i']*voteGPd2 - b_voteGPd3[`i']*voteGPd3 - b_voteGPd4[`i']*voteGPd4 - b_voteGPd5[`i']*voteGPd5) summ pvoteGPd1_`i', meanonly replace pvoteGPd1_mean = r(mean) in `i' foreach j in 2 3 4 5 { gen double pvoteGPd`j'_`i' = normal(sumxtimesb_`i' - b_voteGPd2[`i']*voteGPd2 - b_voteGPd3[`i']*voteGPd3 - b_voteGPd4[`i']*voteGPd4 - b_voteGPd5[`i']*voteGPd5 + b_voteGPd`j'[`i']*1) summ pvoteGPd`j'_`i', meanonly replace pvoteGPd`j'_mean = r(mean) in `i' gen double fdvoteGPd`j'_`i' = pvoteGPd`j'_`i' - pvoteGPd1_`i' summ fdvoteGPd`j'_`i', meanonly replace fdvoteGPd`j'_mean = r(mean) in `i' drop pvoteGPd`j'_`i' fdvoteGPd`j'_`i' } drop pvoteGPd1_`i' } foreach var of varlist GP1 /// pid_accord /// male abi { gen p`var'_1_mean = . gen p`var'_0_mean = . gen fd`var'_mean = . forvalues i = 1/1000 { gen p`var'_1_`i'= normal(sumxtimesb_`i' - b_`var'[`i']*`var' + b_`var'[`i']*1) summ p`var'_1_`i', meanonly replace p`var'_1_mean = r(mean) in `i' gen p`var'_0_`i'= normal(sumxtimesb_`i' - b_`var'[`i']*`var' + b_`var'[`i']*0) summ p`var'_0_`i', meanonly replace p`var'_0_mean = r(mean) in `i' gen fd`var'_`i'= p`var'_1_`i' - p`var'_0_`i' summ fd`var'_`i', meanonly replace fd`var'_mean = r(mean) in `i' drop p`var'_1_`i' p`var'_0_`i' fd`var'_`i' } } summ fd* * Marginal effect foreach var of varlist ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// age polint3 gkoal { gen ame`var'_mean=. forvalues i = 1/1000 { gen double ame`var'_`i' = normalden(sumxtimesb_`i')* b_`var'[`i'] summ ame`var'_`i', meanonly replace ame`var'_mean = r(mean) in `i' drop ame`var'_`i' } } summ ame* * Summarize quantities of interest summ p_mean fd*_mean ame*_mean centile p_mean fd*_mean ame*_mean, centile(2.5 97.5) foreach var of varlist p_mean fd*_mean ame*_mean { gen camp__`var' = `var' } keep camp__* save camp, replace * ====================================================================================== * * Model 2: Agreement on party within camp * ====================================================================================== * ** Open dataset use rcs2009_ipk_dyads.dta, clear set more off ** Excluding dyads with discussant or ego voting for "other parties" drop if wabs_sonstige_GP==1 drop if wabs_sonstige_EGO==1 | welle==2 probit ctr_agree_party_GP /// ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez5_GP ipk_bez6_GP /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// GP1 /// pid_accord /// voteGPd2 voteGPd3 voteGPd4 voteGPd5 /// age male abi polint3 gkoal, vce(cluster id) * margins, dydx(*) * Drop observations not in the model gen keep =1 if e(sample) drop if keep ~=1 * Save data as a temporary file save temp, replace set seed 99 mat b=e(b) mat V=e(V) drawnorm b_ipk_bez1_GP b_ipk_bez2_GP b_ipk_bez3_GP b_ipk_bez5_GP b_ipk_bez6_GP /// b_ipk_wisGP b_ipk_verGP b_ipk_rl_corrGP b_GP1 b_pid_accord b_voteGPd2 /// b_voteGPd3 b_voteGPd4 b_voteGPd5 b_age b_male b_abi b_polint3 b_gkoal /// b_cons , mean(b) cov(V) n(1000) clear summ b_ipk_bez1_GP-b_cons * Merge with temp data merge using temp * Calculate predicted probability of success with all variables set to their observed values forvalues i = 1/1000 { gen double sumxtimesb_`i'= b_cons[`i'] foreach var of varlist ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez5_GP ipk_bez6_GP /// ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// GP1 /// pid_accord /// voteGPd2 voteGPd3 voteGPd4 voteGPd5 /// age male abi polint3 gkoal { replace sumxtimesb_`i' = sumxtimesb_`i' + b_`var'[`i']*`var' } } gen p_mean = . forvalues i = 1/1000 { gen p_`i'= normal(sumxtimesb_`i') summ p_`i ', meanonly replace p_mean = r(mean) in `i' } drop p_1-p_1000 summ p_mean * First differences foreach var of varlist ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez4_GP ipk_bez5_GP ipk_bez6_GP { gen p`var'_mean = . gen fd`var'_mean = . } forvalues i = 1/1000 { gen double pipk_bez4_GP_`i' = normal(sumxtimesb_`i' - b_ipk_bez1_GP[`i']*ipk_bez1_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez5_GP[`i']*ipk_bez5_GP - b_ipk_bez6_GP[`i']*ipk_bez6_GP) summ pipk_bez4_GP_`i', meanonly replace pipk_bez4_GP_mean = r(mean) in `i' foreach j in 1 2 3 5 6 { gen double pipk_bez`j'_GP_`i' = normal(sumxtimesb_`i' - b_ipk_bez1_GP[`i']*ipk_bez1_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez2_GP[`i']*ipk_bez2_GP - b_ipk_bez5_GP[`i']*ipk_bez5_GP - b_ipk_bez6_GP[`i']*ipk_bez6_GP + b_ipk_bez`j'_GP[`i']*1) summ pipk_bez`j'_GP_`i', meanonly replace pipk_bez`j'_GP_mean = r(mean) in `i' gen double fdipk_bez`j'_GP_`i' = pipk_bez`j'_GP_`i' - pipk_bez4_GP_`i' summ fdipk_bez`j'_GP_`i', meanonly replace fdipk_bez`j'_GP_mean = r(mean) in `i' drop pipk_bez`j'_GP_`i' fdipk_bez`j'_GP_`i' } drop pipk_bez4_GP_`i' } foreach var of varlist voteGPd1 voteGPd2 voteGPd3 voteGPd4 voteGPd5 { gen p`var'_mean = . gen fd`var'_mean = . } forvalues i = 1/1000 { gen double pvoteGPd1_`i' = normal(sumxtimesb_`i' - b_voteGPd2[`i']*voteGPd2 - b_voteGPd3[`i']*voteGPd3 - b_voteGPd4[`i']*voteGPd4 - b_voteGPd5[`i']*voteGPd5) summ pvoteGPd1_`i', meanonly replace pvoteGPd1_mean = r(mean) in `i' foreach j in 2 3 4 5 { gen double pvoteGPd`j'_`i' = normal(sumxtimesb_`i' - b_voteGPd2[`i']*voteGPd2 - b_voteGPd3[`i']*voteGPd3 - b_voteGPd4[`i']*voteGPd4 - b_voteGPd5[`i']*voteGPd5 + b_voteGPd`j'[`i']*1) summ pvoteGPd`j'_`i', meanonly replace pvoteGPd`j'_mean = r(mean) in `i' gen double fdvoteGPd`j'_`i' = pvoteGPd`j'_`i' - pvoteGPd1_`i' summ fdvoteGPd`j'_`i', meanonly replace fdvoteGPd`j'_mean = r(mean) in `i' drop pvoteGPd`j'_`i' fdvoteGPd`j'_`i' } drop pvoteGPd1_`i' } foreach var of varlist GP1 /// pid_accord /// male abi { gen p`var'_1_mean = . gen p`var'_0_mean = . gen fd`var'_mean = . forvalues i = 1/1000 { gen p`var'_1_`i'= normal(sumxtimesb_`i' - b_`var'[`i']*`var' + b_`var'[`i']*1) summ p`var'_1_`i', meanonly replace p`var'_1_mean = r(mean) in `i' gen p`var'_0_`i'= normal(sumxtimesb_`i' - b_`var'[`i']*`var' + b_`var'[`i']*0) summ p`var'_0_`i', meanonly replace p`var'_0_mean = r(mean) in `i' gen fd`var'_`i'= p`var'_1_`i' - p`var'_0_`i' summ fd`var'_`i', meanonly replace fd`var'_mean = r(mean) in `i' drop p`var'_1_`i' p`var'_0_`i' fd`var'_`i' } } summ fd* * Marginal effect foreach var of varlist ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// age polint3 gkoal { gen ame`var'_mean=. forvalues i = 1/1000 { gen double ame`var'_`i' = normalden(sumxtimesb_`i')* b_`var'[`i'] summ ame`var'_`i', meanonly replace ame`var'_mean = r(mean) in `i' drop ame`var'_`i' } } summ ame* * Summarize quantities of interest summ p_mean fd*_mean ame*_mean centile p_mean fd*_mean ame*_mean, centile(2.5 97.5) foreach var of varlist p_mean fd*_mean ame*_mean { gen party__`var' = `var' } keep party__* save party, replace *drop _merge merge using camp * ====================================================================================== * * Compare marginal effects between models * ====================================================================================== * ** Validate calculations of AMEs and FDs foreach var in ipk_bez1_GP ipk_bez2_GP ipk_bez3_GP ipk_bez5_GP ipk_bez6_GP /// GP1 /// voteGPd2 voteGPd3 voteGPd4 voteGPd5 /// male abi { gen dif__fd`var' = camp__fd`var'_mean - party__fd`var'_mean } gen dif__fdpid = camp__fdpid_accord_mean - party__fdpid_accord_mean foreach var in ipk_wisGP /// ipk_verGP /// ipk_rl_corrGP /// age polint3 gkoal { gen dif__ame`var' = camp__ame`var'_mean - party__ame`var'_mean } summ camp__fdipk_bez1_GP-camp__fdipk_bez6_GP camp__ameipk_wisGP-camp__ameipk_rl_corrGP /// camp__fdGP1 camp__fdpid camp__fdvoteGPd2-camp__fdvoteGPd5 camp__ameage camp__fdmale /// camp__fdabi camp__amepolint3 camp__amegkoal summ party__fdipk_bez1_GP-party__fdipk_bez6_GP party__ameipk_wisGP-party__ameipk_rl_corrGP /// party__fdGP1 party__fdpid party__fdvoteGPd2-party__fdvoteGPd5 party__ameage /// party__fdmale party__fdabi party__amepolint3 party__amegkoal ** Differences and confidence intervals (need to be copied manually to Table) summ dif__fdipk_bez1_GP-dif__fdipk_bez6_GP dif__fdGP1 dif__ameipk_wisGP-dif__ameipk_rl_corrGP /// dif__fdpid dif__amegkoal dif__amepolint3 dif__fdvoteGPd2-dif__fdvoteGPd5 /// dif__ameage dif__fdmale dif__fdabi centile dif__fdipk_bez1_GP-dif__fdipk_bez6_GP dif__fdGP1 dif__ameipk_wisGP-dif__ameipk_rl_corrGP /// dif__fdpid dif__amegkoal dif__amepolint3 dif__fdvoteGPd2-dif__fdvoteGPd5 /// dif__ameage dif__fdmale dif__fdabi, centile(2.5) centile dif__fdipk_bez1_GP-dif__fdipk_bez6_GP dif__fdGP1 dif__ameipk_wisGP-dif__ameipk_rl_corrGP /// dif__fdpid dif__amegkoal dif__amepolint3 dif__fdvoteGPd2-dif__fdvoteGPd5 /// dif__ameage dif__fdmale dif__fdabi, centile(97.5) * ====================================================================================== * exit * ====================================================================================== *