-
Notifications
You must be signed in to change notification settings - Fork 0
/
BeamerPresentation_MalteJonas.Rmd
150 lines (108 loc) · 5.26 KB
/
BeamerPresentation_MalteJonas.Rmd
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
---
title: "Political Economy of Public Banks"
author: "Jonas Markgraf & Malte Berneaud-Kötz"
date: |
| Hertie School of Governance
| 02 May 2016
output:
beamer_presentation:
colortheme: dolphin
fonttheme: structuresmallcapsserif
slide_level: 2
theme: Szeged
ioslides_presentation: default
subtitle: Electoral Effects of Savings Banks in German Subnational Elections
---
```{r setting_chunk_options, include=FALSE}
############### NOTE ###############
# In order for the RMarkdown file to render correctly, you need to place the source data sets into the data/ folder in the root directory of this repo.
setwd("~/Git/PresentationAssignment") # Adjust this in your file to match the directory where you cloned the repo.
knitr::opts_chunk$set(fig.height=3, fig.width = 5, fig.align = "center", fig.path='graphs/',
include = FALSE, warning=FALSE, message=FALSE, cache=TRUE)
# Supressed output for any code chunk in the document, so all graphs, tables,
# etc which need to have the outputs shown should use include = TRUE as an option
```
```{r loading_preparing_data}
# Loading of libraries, cleaning and subsetting code is done in the external R-script
source("standalone_R_code.R")
```
# Background
## Motivation
- financial crisis 2007-8: increased interest in bank-politics interface
- politicians' participation in public banks understudied
- public banks are central element of Europe's banking sector
## Institutional Setting
- large number of public savings banks (*Sparkassen*) in Germany
- *Sparkassen* important providers of credit and public goods
- regional outlook of savings banks & close ties to local politics
## Sparkassen business areas
![](SavingsBank_map.png)
# Hypothesis
## Hypothesis
- mayors with board seat in savings bank extract political rents from board membership
> **Hypothesis:**
> *Mayors with a board seat in a Sparkasse are more likely to be re-elected than mayors without a boardseat, holding all other explanatory variables constant.*
## Storyline
How does membership in a *Sparkasse* affect electoral success?
* direct channel: influence on strategic decisions of bank
+ credit volume
+ timing of consolidation and mergers
+ donations & payouts
* indirect channel: competence signal to constituency
# Empirical Strategy & Findings | Model & Controls
## Data & Subset
### Data
1. Data on all Bavarian mayoral elections conducted 1948-2014 were obtained from the Bavarian Statistical Office
2. Hand collected dataset on board members in Bavaria's *Sparkassen* for 2006-2015
Data is matched on names to find mayors who were members of a *Sparkassen* governing board
### Subset
+ 2006 to 2014
+ competitive elections
+ no run-offs
## Statistical Model
Logistic regression to deal with binary dependent variable
+ DV: Re-election of mayor yes / no
+ main IV: *Sparkassen* board membership in year prior to election
+ control IVs:
+ vote share received by the last winning mayor
+ gender
+ municipality size proxy: log(number of eligible voters)
## Regression Results
```{r regression models}
fullmodel <- glm(Reelection~IncumbentSparkassenMember + L.VoteShareWinner + L.Geschlecht1 + log(NumberEligVoter),
data = MayorElection,
family = "binomial")
covarnames <- c("Sparkassen board member", "Previous vote share", "Female", "Number eligible voters")
```
```{r tests, include=TRUE, echo=FALSE, results="asis"}
stargazer(fullmodel, title = "Logistic regression results w/ odds ratios", dep.var.labels = "Re-election of mayor",
covariate.labels = covarnames, header = FALSE, font.size = "scriptsize", single.row = TRUE,
apply.coef = exp, t.auto = F, p.auto = F, report = "vcp*", digits = 2, keep.stat = c("n", "ll", "rsq"))
## Note: coefficients are reported as odds ratios, but t-scores and p-values are calculated using the underlying logit function, coefficients, and standard errors
```
## A closer look at previous vote share
```{r simulation_for_vote_share}
# Creating dummy from lagged sex variable
MayorElection$L.DummySex <- ifelse(MayorElection$L.Geschlecht1 == "m", 0, 1)
# Find range of L.VoteShare1 in data
vs_range <- 20:97
# extract coefficients and variance-covariance matrix from model
fm_coef <- matrix(coef(fullmodel))
fm_vcov <- vcov(fullmodel)
# drawing simulations of the point estimates
drawn <- data.frame(mvrnorm(n = 1000, mu = fm_coef, Sigma = fm_vcov))
# matching simulations to all possible values in L.VoteShare1
draw_sim <- merge(drawn, vs_range)
draw_sim <- dplyr::rename(draw_sim, fitted.vs = y)
# Calculating predicted probabilites with the data at hand
# I am using the averages of all covariates except vote share
draw_sim$pred.prob <- 1 / (1 + exp(-(draw_sim[, 1] + draw_sim[, 2] + draw_sim[, 3] * draw_sim[, 6] + draw_sim[, 4] * mean(MayorElection$L.DummySex) + draw_sim[, 5] * mean(log(MayorElection$NumberEligVoter), na.rm = TRUE))))
```
```{r graphing_simulation, include=TRUE, echo=FALSE}
ggplot(draw_sim, aes(x = fitted.vs, y = pred.prob)) + geom_point(alpha = 0.1) +
stat_smooth(se = FALSE) + theme_bw() + ggtitle("Probability of Re-election across Previous Vote Shares") +
ylab("Probability of Re-election") + xlab("Vote Share in Previous Election")
```
----
Thank you for your attention!
https://github.com/jmarkgraf/PresentationAssignment