The assignment is worth 100 points. You should have the following packages installed:
devtools::install_github("kupietz/kableExtra")
packages <- c("tidyverse",
"patchwork",
"kableExtra",
"margins",
"sandwich")
for (i in 1:length(packages)) {
if (!packages[i] %in% rownames(installed.packages())) {
install.packages(packages[i]
, repos = "http://cran.rstudio.com/"
, dependencies = TRUE
)
}
library(packages[i], character.only = TRUE)
}
library(tidyverse)
library(patchwork)
library(kableExtra)
library(margins)
library(sandwich)In this problem set you will summarize the paper “Imperfect Public Monitoring with Costly Punishment: An Experimental Study” (Ambrus and Greiner, AER 2012) and recreate some of its findings.
[Q1] What is the main question asked in this paper?
This paper seeks to explore the relationship between punishment and cooperation in a public goods game. The paper sets out to answer the question “will punishment increase cooperation in a social game? If so, how does the severity of the punishment as well as the introduction of noise affect the relationship between punishment and cooperation?”
[Q2] Summarize the experiment design.
Subjects participate in a 50-round repeated public goods game. Participants are randomly assigned to a group of three, which remains constant throughout multiple iterations of the game. Each member is given 20 tokens and then given the choice to allocate any amount of those 0-20 tokens in a group account. Participants get points for each token they have and each token in the group account. Keeping a token for yourself is equal to one point, while any tokens in the group collection are worth 0.5 points.
Subsequent treatments were formed including “noise”and “no noise” as well as punishment and no punishment conditions. In the “no noise” condition, participants were informed about the choices of group members. In the “noise” condition, participants were shown a public log of all group members choices. The noise here comes from the fact that, even if a group member contributed, there was a 10% chance that their record showed “no contribution”. If a group member really did not contribute, it would always show “no contribution”.
In the no punishment condition, the round ends after subjects are given information about the contribution of others. In the punishment condition, subjects enter a second stage of each round where they are given the opportunity to assign up to 5 deduction points to other members in the group. In the regular punishment treatment, the cost of assigning deduction points was one deduction point from the punisher to take away three points from the punished. In the strong punishmnet treatment the cost was one point to punish in order to take away 6 points from the punished.
[Q3] Summarize the main results of the experiment.
The experiment shows that the introduction of punishment increases cooperation among players in a public goods game when perfect monitoring is in place. Moreover, making punishments more severe increase net-payoffs or cooperation in a perfectly monitored environment. Across all punishment conditions (no punishment, regular punishment, and strong punishment), the introduction of noise decreases the average contribution and average net profits/cooperation. However, this experiment also shows that in an imperfect monitoring environment, the relationship between punishment and net-payoffs does not always hold.
[Q4] Why are these results valuable? What have we learned? Motivate your discussion with a real-world example. In particular discuss the tradeoffs to transparency in groups and how these tradeoffs might be navigated in a firm, or more broadly, a society.
First, this paper establishes a positive relationship between punishment and cooperation in a perfectly monitored environment. Which means, in theory, the threat of punishment in a transparent environment will increase group cooperation and leave all group members better-off. However, the finding that this relationship does not hold in a “noisy” environment proves that, when clear and accurate information about each player is not known, it is much harder for this principle of punishment/cooperation correlation to hold.
These findings are very meaningful for a multitude of reasons. First, these findings establish that implementing consequences can drive cooperation in group settings. However, this finding that noise disrupts the punishment/cooperation relationship establishes the fact that we must strive for openness, transparency, and clear-communication when we discuss the reputation, character, or decision making of members in a group.
In the real world, we can consider many group settings in which these findings are valuable. Consider working on a team project in a business where the team must produce a product for a client within a certain deadline. Every team member is incentivized to do the least amount of work possible. Otherwise stated, everyone wants to be the free rider if possible. Implementing a transparent “punishment” system would improve group cooperation on the project. In a system where everyones’ contribution is known and, those who don’t contribute are publicly outed or punished, the findings of this paper suggest that cooperation would increase. However, it is very hard to create a perfectly monitored system in the real world. Imagine that employee A on the team project is the free rider and employee B wants to “punish” him (perhaps with reputational damage, filing a complaint with the boss, informing co-workers etc.). It is very difficult for employee B to punish employee A without incurring some cost to himself and, moreover, it is very hard for him to create an open and transparent form of punishment that will be accepted by all group members. Imagine that employee B complains to a group of co-workers, some of whom are very fond of employee A and do not accept this claim that he is a non-contributor. Or, employee B complains to the boss but, unbeknownst to him, the boss has a long-lasting relationship with employee A and is unwilling to hear that he is a free-rider.
Ultimately, the findings of this paper suggest that we should strive for clearly defined and communicated outlines for punishment and, when we do, implementing those punishments can drive cooperation. However, as this real-world scenario between employees A and B highlights, it becomes very challenging to create that perfectly monitored environment needed for punishment to be effective when we enter a real-world scenario.
[Q5] If punishment is ineffective under imperfect monitoring, what else can you lean on to ensure people cooperate (at least a little) in a public goods problem?
Other concepts that can encourage cooperation include positive incentives, in group pro-social behavior, and reciprocity/reputation building. All of these tactics do not directly require punishment but can still encourage individuals to change their actions in group settings based on the rewards, judgement, or considerations of others in a group.
Payoffs to agent \(i\) are
\[ \pi_i = (e_i - x_i) + \alpha \sum_{i=1}^n x_i \]
where \(e_i\) is the agent’s endowment, \(x_i\) is her contribution to the public good, \(\alpha\) is the marginal per capita return, and \(n\) is the group size.
[Q6] Explain \(\alpha\) and why in public goods game requires \(\frac{1}{n} < \alpha < 1\).
The conditions 1/n<α<1 to capture the tension between group and self interest. Any α value lower than 1/n would result in participants contributing too little while any α value greater than 1 would result in an inefficient allocation of resources due to excessive contribution. This is why the condition 1/n<α<1 is the balance between group and self interest.
[Q7] Suppose \(e_i = e = 20\) (i.e. everyone has 20), \(\alpha = 0.4\) and \(n=4\). Show that \(x_i = 0\) is a symmetric Nash equilibrium, but \(x_i=20\) is the social optimum. (Recall that in a Nash equilibrium \(i\) cannot increase her payoff by changing her contribution.) Hint: you can use code to answer this problem by calcuting payoffs to a representative agent and plotting them. You might the
curve()function useful.
```{block} q7}
A symmetric equilibrium is the point in game theory where no one is better off by changing his/her strategy. Xi=0, the condition where no one contributes any money, is a symmetric equilibrium because, given that every other player is contributing 0, no one player can be made better off by changing his strategy (i.e. if everyone has a contribution of zero, the only game theoretically sound strategy is to also contribute zero). However, Xi=20 is the social optimum because it is the strategy that leaves every player best off. If everyone cooperates, Xi=20 will yield the best outcome for everyone involved.
# Replication
```r
punnoise = read_csv("punnoise_data.csv")
Use theme_classic() for all plots.
[Q8] Recreate Table 1 and use
kable()to make a publication-quality table (in HTML).
table1.df <- data.frame(
treat = punnoise$treat,
contribution = punnoise$contribution,
received_punishment = punnoise$received_punishment,
income = punnoise$income
)
colnames(table1.df) <- c("Treat", "Contribution", "Punishment", "Income")
table1 <- table1.df %>%
group_by(Treat) %>%
summarise(
"N participants" = n(),
"Average_Contribution" = mean(Contribution),
"Average_Punishment" = mean(Punishment),
"Average_Net_Profits" = mean(Income)
) %>%
mutate_if(is.numeric, round, digits = 2)
table1_grouped <- table1 %>%
group_by(Treat) %>%
arrange(desc(Treat))
table1_final <- table1_grouped %>%
kbl(caption = "Table 1 - Average Contributions, Punishment, and Net Profits") %>%
kable_classic(full_width = F, html_font = "Cambria")
table1_final| Treat | N participants | Average_Contribution | Average_Punishment | Average_Net_Profits |
|---|---|---|---|---|
| strongpun_nonoise | 2700 | 17.61 | 0.48 | 25.45 |
| strongpun_noise | 2700 | 16.04 | 0.65 | 23.48 |
| pun_nonoise | 2850 | 12.40 | 0.64 | 23.66 |
| pun_noise | 3000 | 9.60 | 1.45 | 19.10 |
| nopun_nonoise | 2850 | 5.59 | NA | 22.80 |
| nopun_noise | 2850 | 4.04 | NA | 22.02 |
Consider the linear model
\[ y = \alpha + \beta_1 x_1 + \beta_2 x_2 + \varepsilon \]
[Q9] Write down the marginal effect of \(x_1\) (in math).
The marginal effect of x1 is the partial derivative of y with respect to x1. The partial derivative of y with respect fo x1 measures how much y changes with respect to x, holding all other variables constant. So, in this equation, the marginal effect of x1 means that a one unit increase in x1 will result in a B1 increase of y.
Now suppose you have a non-linear model
\[ y = F(\alpha + \beta_1 x_1 + \beta_2 x_2 + \varepsilon) \]
where \(F(\cdot)\) is a “link function” that compresses the inputs so that the output \(\hat{y} \in [0,1]\).
[Q10] Write down the marginal effect of \(x_1\). How does this compare to the marginal effect in the linear model?
In a regular linear regression, the marginal effect of X1 would be constant and equal to the value of B1. As discussed in question 9, the marginal effect of x1 in a linear model is just the partial derivative of y with respect to x1. However, in a non-linear model with a “link function”, this is not the case. In a non-linear model with a link function, non-linear transformation is introduced to the model and the marginal effect of X1 can vary contingent upon the link selected and, ultimately, can then vary based on different values of X1 and X2.
[Q11] A probit model uses the Normal CDF \(\Phi\) as the link function, where \(\Phi' = \phi\) is the Normal PDF. Use
glm()to estimate Model 1 in Table 2. Assign the model to the objectm1. Cluster the standard errors at the group level.
m1 <- glm(contr_dummy ~ round + p_reg + p_strong + noise + noise__p_reg + noise__p_strong, data = punnoise, family = binomial(link = "probit"))
summary(m1, cluster = "group")##
## Call:
## glm(formula = contr_dummy ~ round + p_reg + p_strong + noise +
## noise__p_reg + noise__p_strong, family = binomial(link = "probit"),
## data = punnoise)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -0.5660869 0.0311397 -18.179 < 2e-16 ***
## round -0.0007022 0.0007303 -0.961 0.3363
## p_reg 0.8894465 0.0345661 25.732 < 2e-16 ***
## p_strong 1.7600634 0.0400362 43.962 < 2e-16 ***
## noise -0.2518140 0.0365821 -6.884 5.84e-12 ***
## noise__p_reg -0.1038117 0.0493212 -2.105 0.0353 *
## noise__p_strong -0.0761898 0.0554592 -1.374 0.1695
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 23399 on 16949 degrees of freedom
## Residual deviance: 18848 on 16943 degrees of freedom
## AIC: 18862
##
## Number of Fisher Scoring iterations: 4
[Q12] Interpret the coefficients. (For more on the probit model, see the appendix.)
The probit model allows us to determine how a one unit increase in the independent variable will affect the predicted probability of a specified outcome occurring. In these results from m1, we can use coefficients to determine the increase or decrease in likelihood of the probability of contribution increasing or decreasing. If the sign before the coefficient is positive, an increase in the independent variable will result in an increase in the probability of contribution. Here we can see that an increase in p_reg and p_strong will result in an increase in the predicted probability of contribution. An increase in round, noise, noise_p_reg, and noise_p_strong all result in a decrease in probability of contribution.
[Q13] Table 2 reports the average marginal effects (AMEs) of the variables on \(P(\text{contribute})\). Calculate the AME to the variable
roundas follows:
predict()to
create an object predictions that contains the predicted
z-scores. (i.e. \(\hat{\mathbf{X}\beta}\). Hint: use the
option type="link" in predict().)dnorm()
to calculate the probabilities of the predicted z-scores and store the
output in an object called index.round and
store the output in dydxround.mean() to calculate the AME.## [1] -0.0002208822
[Q14] Verify your calculations with
margins(), the plot the AMEs. (Note: these will not be exactly the same as those in the paper, since the paper uses an outdated method in Stata.
## round p_reg p_strong noise noise__p_reg noise__p_strong
## -0.0002209 0.2798 0.5537 -0.07921 -0.03266 -0.02397
[Q15] Interpret the AMEs.
The AMEs allow us to understand how a change in one variable will affect the average change in the probability of a specified event occurring. A one unit increase in round will decrease the probability of contribution by -0.0002208822 (0.02%), a one unit increase in p_reg will increase the probability of contribution by 0.2797986 (28%), an increase in p_strong increases probability of contribution by 0.5536738 (55.37%), an increase in noise decreases probability of contribution by 0.07921466 (7.92%), a one unit increase in noise__p_reg decreases the probability of contribution by 0.03265667 (3.27%), and a one unit increase in noise__p_strong decreases the probability of contribution by 0.02396748 (2.4%).