7 3/13 Lab VI | Experiments
7.1 Preparation
library(knitr)
library(haven)
library(tidyverse)
library(car)
library(memisc)
load("~/GOVT702/Data/EgyptProtests.RData")
Williamson and Malik (2020) used a survey experiment to examine the public response to how Egyptians responded to different framings regarding a protest in which protesters were killed by police.
All respondents were given the following statement: “Last year, police raided an apartment in 6 October City. During the raid, they killed 9 members of the Muslim Brotherhood.”
Respondents were assigned with equal probability to a control group that got no more information or one of three treatment groups that received additional information.
Respondents in the first treatment group were provided a paragraph that justified the killings from the security forces perspective.
Respondents in the second treatment group were provided a paragraph that criticized the killings from a human rights perspective.
Respondents in the third treatment group were provided both the security forces and human rights perspectives.
Two outcomes were measured:
if respondents thought the police tactics were justified, and
if the police should the police be held accountable for killing the nine men. So that both variables are coded in same direction, this variable is coded as 1 if the respondent gave a pro-police answer (saying the police did not need to be held accountable).
Data description
Variable | Description |
---|---|
just_binary_main | 1 if the respondent said the police tactics were justified; 0 otherwise. |
not_acc_binary_main | 1 if the respondent said the police should definitely or probably not be held accountable; 0 otherwise. We call this variable no-accountability |
treat_b1 | 1 if respondent was given the pro-police paragraph |
treat_b2 | 1 if respondent was given the human rights paragraph |
treat_b3 | 1 if respondent was given both the pro-police and human rights paragraphs |
sisi_vote | 1 if the respondent voted for Sisi |
not_voteboycott | 1 if the respondent did not vote for some other reason than boycotting the election |
opposition_vote_boycott | 1 if the respondent either voted for the opposition candidate or boycotted the election |
education | from 1 (no formal education) to 8 (graduate degree). Values from 6 to 8 went to college. |
income | 1 = Less than 500 pounds per month, 2 = 500 to 1000 pounds per month, 3 = 1000 to 4000 pounds per month, 4 = 4000 to 10000 pounds per month, 5 = More than 10000 pounds per month |
male | 1 for men, 0 otherwise |
age_cat | age categories: 1 is less than 35, 2 is 35 to 50 and 3 is over 50. |
Published paper (paywalled)
7.2 Why is an experiment useful in this context?
Simply asking respondents if they agree or disagree with the police does not answer if and how different messages work. If respondents were simply asked if they agree with the either the pro-police or human rights messages it may be difficult to separate out whether the message was persuasive or whether the respondent was predisposed to approve of the argument.
7.3 Is there evidence of balance in the treatment? Why is this relevant? Check for balance of each treatment with respect to age category, gender, education, income, voting for Sisi and not voting for non-boycott reasons. Use two different procedures to conduct your balance tests. You do not need to use TOST!
## Removing NAs
<- dta[is.na(dta$just_binary_main)==0 & is.na(dta$not_acc_binary_main)==0,]
dta
<- dta %>%
dep_vars ::select(age_cat, male, education, sisi_vote, not_voteboycott, income)
dplyr
<- lapply(dep_vars, function(bal) {
b_test lm(bal ~ dta$treat_b1 + dta$treat_b2 + dta$treat_b3)})
## Extracting Slopes and P Values
<- round(sapply(b_test, function(x) x$coefficients), 2)
slopes <- round(sapply(b_test, function(x) {
p summary(x)$coefficients[,4]}), 2)
## Showing Results
= data.frame(b1= slopes[2,], b1.p = p[2,],
balance_results b2= slopes[3,], b2.p = p[3,],
b3= slopes[4,], b3.p = p[4,])
balance_results
## b1 b1.p b2 b2.p b3 b3.p
## age_cat 0.05 0.60 0.01 0.89 -0.01 0.89
## male 0.01 0.77 0.00 0.90 0.05 0.18
## education 0.45 0.01 0.27 0.12 0.04 0.82
## sisi_vote 0.02 0.74 0.05 0.36 0.09 0.12
## not_voteboycott -0.02 0.71 -0.02 0.76 -0.05 0.37
## income 0.18 0.10 0.06 0.55 0.24 0.03
We can do the same with a loop.
## DV Creation
<- c("dta$age_cat", "dta$male", "dta$education", "dta$income",
dvs "dta$sisi_vote", "dta$not_voteboycott")
## Loop for Treatments
for(i in 1:length(dvs)){
<- paste("model",i, sep="")
model <- lm(as.formula(paste(dvs[i],"~treat_b1 + treat_b2 + treat_b3")),
m data=dta)
assign(model,m)}
mtable(model1, model2, model3, model4, model5, model6)
There is some evidence of imbalance.
7.4 What is the effect of the treatments on whether respondents viewed the police tactics as justified? Run one model with only the treatment variables and another that includes controls for age category, gender, education, income, voting for Sisi and not voting for non-boycott reasons.
## Without Controls
%>%
dta lm(just_binary_main~treat_b1 + treat_b2 + treat_b3, data=.) %>%
summary()
##
## Call:
## lm(formula = just_binary_main ~ treat_b1 + treat_b2 + treat_b3,
## data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.4589 -0.3453 -0.3154 0.5411 0.6846
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.31544 0.03923 8.042 5.02e-15 ***
## treat_b1 0.14347 0.05576 2.573 0.0103 *
## treat_b2 0.01342 0.05547 0.242 0.8089
## treat_b3 0.02989 0.05646 0.529 0.5968
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4788 on 579 degrees of freedom
## Multiple R-squared: 0.01409, Adjusted R-squared: 0.008977
## F-statistic: 2.757 on 3 and 579 DF, p-value: 0.04167
## With Controls
%>%
dta lm(just_binary_main~treat_b1 + treat_b2 + treat_b3 + factor(age_cat) +
+ education + income + sisi_vote + not_voteboycott, data=.) %>%
male summary()
##
## Call:
## lm(formula = just_binary_main ~ treat_b1 + treat_b2 + treat_b3 +
## factor(age_cat) + male + education + income + sisi_vote +
## not_voteboycott, data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.7901 -0.1992 -0.1011 0.3328 0.9448
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.0771076 0.1015603 0.759 0.4481
## treat_b1 0.1189739 0.0499768 2.381 0.0176 *
## treat_b2 -0.0249841 0.0496725 -0.503 0.6152
## treat_b3 -0.0169674 0.0506942 -0.335 0.7380
## factor(age_cat)2 -0.0362495 0.0425449 -0.852 0.3946
## factor(age_cat)3 0.0005895 0.0471999 0.012 0.9900
## male 0.0494751 0.0534350 0.926 0.3549
## education -0.0007622 0.0125688 -0.061 0.9517
## income -0.0010071 0.0209086 -0.048 0.9616
## sisi_voteTRUE 0.5494024 0.0414417 13.257 <2e-16 ***
## not_voteboycottTRUE 0.0806941 0.0453807 1.778 0.0760 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4036 on 516 degrees of freedom
## (56 observations deleted due to missingness)
## Multiple R-squared: 0.2926, Adjusted R-squared: 0.2789
## F-statistic: 21.34 on 10 and 516 DF, p-value: < 2.2e-16
7.5 Test whether the effects of treatment 1 (police-favorable message) are the same as treatment 3 (both sides) for each dependent variable. Feel free to use the linearHypothesis function in the car package.
.1 <- lm(just_binary_main~treat_b1 + treat_b2 + treat_b3 +
regfactor(age_cat) + male + education + income +
+ not_voteboycott, data=dta)
sisi_vote
linearHypothesis(reg.1, "treat_b1=treat_b3")
## Linear hypothesis test
##
## Hypothesis:
## treat_b1 - treat_b3 = 0
##
## Model 1: restricted model
## Model 2: just_binary_main ~ treat_b1 + treat_b2 + treat_b3 + factor(age_cat) +
## male + education + income + sisi_vote + not_voteboycott
##
## Res.Df RSS Df Sum of Sq F Pr(>F)
## 1 517 85.236
## 2 516 84.062 1 1.1742 7.2075 0.007494 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
7.6 In some political contexts, messages have a different effect on people with less engagement in politics. Are there heterogeneous treatment effects by those who did not vote for reasons other than to boycott the election and those who did not? Feel free to explore multiple other ways there could be heterogeneous effects (e.g., perhaps there are different effects on Sisi supporters), but you only need to report on possible differential effects of the treatments on the “not-accountable” dependent variable.
%>%
dta lm(not_acc_binary_main ~ not_voteboycott*treat_b1 + not_voteboycott*treat_b2 +
*treat_b3 +factor(age_cat) + male +
not_voteboycott+ income + sisi_vote, data = .) %>%
education summary()
##
## Call:
## lm(formula = not_acc_binary_main ~ not_voteboycott * treat_b1 +
## not_voteboycott * treat_b2 + not_voteboycott * treat_b3 +
## factor(age_cat) + male + education + income + sisi_vote,
## data = .)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.58236 -0.22916 -0.05162 0.03384 0.99812
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.022268 0.095838 0.232 0.81636
## not_voteboycottTRUE 0.250014 0.075859 3.296 0.00105 **
## treat_b1 0.105574 0.053546 1.972 0.04919 *
## treat_b2 0.038517 0.053542 0.719 0.47223
## treat_b3 0.144074 0.054048 2.666 0.00793 **
## factor(age_cat)2 0.009428 0.039361 0.240 0.81078
## factor(age_cat)3 0.015627 0.043724 0.357 0.72094
## male -0.017692 0.049679 -0.356 0.72189
## education -0.007508 0.011635 -0.645 0.51902
## income 0.006283 0.019388 0.324 0.74602
## sisi_voteTRUE 0.434241 0.038357 11.321 < 2e-16 ***
## not_voteboycottTRUE:treat_b1 -0.091467 0.105260 -0.869 0.38527
## not_voteboycottTRUE:treat_b2 -0.212318 0.104539 -2.031 0.04277 *
## not_voteboycottTRUE:treat_b3 -0.337778 0.108394 -3.116 0.00193 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3733 on 513 degrees of freedom
## (56 observations deleted due to missingness)
## Multiple R-squared: 0.2461, Adjusted R-squared: 0.2269
## F-statistic: 12.88 on 13 and 513 DF, p-value: < 2.2e-16