Summary: Consistent with our previous studies, police violence significantly decreases trust in the police. This effect persists even in the presence of protester violence, although the effect is smaller. This indicates that protester violence diminishes the negative impact of police violence on trust in the police. Similar to our previous findings, we do not observe any moderation by ideology. We find similar albeit weaker patterns for trust in the government and policy support.

Bar plot for the main outcomes

S5_long <- S5 %>%
  pivot_longer(cols = c(HarmfulPolice_sc, MoralPolice_sc, LegitimacyPolice_sc, TrustPolice_sc, TrustGov_sc, PolicySupport), 
               names_to = "DV", values_to = "value")

S5_long$DV <- factor(S5_long$DV, levels = c("HarmfulPolice_sc", "MoralPolice_sc", "LegitimacyPolice_sc", "TrustPolice_sc", "TrustGov_sc", "PolicySupport"), labels = c(c("Harmful", "Moral", "Legitimacy", "TrustPolice", "TrustGov", "PolicySupport")))


# Plotting
p_trustpol <- ggplot(S5_long, aes(x = DV, y = value, fill = condition)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("#ffffb3","#80b1d3", "#8dd3c7", "#fb8072")) +
  labs(x = "Condition", 
       y = "Score", 
       title = "Effects on dependent variables") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

# Print the plot
print(p_trustpol)

Means

S5 %>%
  group_by(condition) %>%
  summarise_at(.vars = c("ViolentPolice_sc", "ViolentProtester_sc"), .funs = mean)
## # A tibble: 4 × 3
##   condition          ViolentPolice_sc ViolentProtester_sc
##   <fct>                         <dbl>               <dbl>
## 1 control                        8.01                8.44
## 2 police_violence               84.4                18.3 
## 3 protester_violence            13.5                89.2 
## 4 mutual_violence               64.8                73.9
S5 %>%
  group_by(condition) %>%
  summarise_at(.vars = c("MoralPolice_sc", "MoralProtester_sc"), .funs = mean)
## # A tibble: 4 × 3
##   condition          MoralPolice_sc MoralProtester_sc
##   <fct>                       <dbl>             <dbl>
## 1 control                      88.8              83.0
## 2 police_violence              15.4              71.3
## 3 protester_violence           75.2              10.9
## 4 mutual_violence              34.7              24.4
S5 %>%
  group_by(condition) %>%
  summarise_at(.vars = c("HarmfulPolice_sc", "HarmfulProtester_sc"), .funs = mean)
## # A tibble: 4 × 3
##   condition          HarmfulPolice_sc HarmfulProtester_sc
##   <fct>                         <dbl>               <dbl>
## 1 control                        8.06                9.97
## 2 police_violence               84.5                20.8 
## 3 protester_violence            15.0                89.5 
## 4 mutual_violence               67.5                75.9
S5 %>%
  group_by(condition) %>%
  summarise_at(.vars = c("TrustPolice_sc", "TrustGov_sc"), .funs = mean)
## # A tibble: 4 × 3
##   condition          TrustPolice_sc TrustGov_sc
##   <fct>                       <dbl>       <dbl>
## 1 control                      71.4        58.3
## 2 police_violence              24.4        40.1
## 3 protester_violence           67.6        49.9
## 4 mutual_violence              43.4        45.8

Effects on trust in the police

summary(model <- lm(TrustPolice_sc ~ condD1*condD2*condD3, S5, na.action=na.omit))#control as the reference group
## 
## Call:
## lm(formula = TrustPolice_sc ~ condD1 * condD2 * condD3, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -71.401 -21.401   1.629  22.642  65.635 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            71.401      3.079  23.191  < 2e-16 ***
## condD1                -47.036      4.367 -10.771  < 2e-16 ***
## condD2                 -3.794      4.450  -0.853    0.395    
## condD3                -28.030      4.317  -6.493 3.04e-10 ***
## condD1:condD2              NA         NA      NA       NA    
## condD1:condD3              NA         NA      NA       NA    
## condD2:condD3              NA         NA      NA       NA    
## condD1:condD2:condD3       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 28.55 on 335 degrees of freedom
## Multiple R-squared:  0.3106, Adjusted R-squared:  0.3044 
## F-statistic:  50.3 on 3 and 335 DF,  p-value: < 2.2e-16
summary(model <- lm(TrustPolice_sc ~ condD0*condD1*condD2, S5, na.action=na.omit))#mutual violence as the reference group. Mutual violence is significantly different from police violence and protester violence conditions
## 
## Call:
## lm(formula = TrustPolice_sc ~ condD0 * condD1 * condD2, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -71.401 -21.401   1.629  22.642  65.635 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            43.371      3.026  14.330  < 2e-16 ***
## condD0                 28.030      4.317   6.493 3.04e-10 ***
## condD1                -19.006      4.330  -4.389 1.53e-05 ***
## condD2                 24.237      4.413   5.492 7.89e-08 ***
## condD0:condD1              NA         NA      NA       NA    
## condD0:condD2              NA         NA      NA       NA    
## condD1:condD2              NA         NA      NA       NA    
## condD0:condD1:condD2       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 28.55 on 335 degrees of freedom
## Multiple R-squared:  0.3106, Adjusted R-squared:  0.3044 
## F-statistic:  50.3 on 3 and 335 DF,  p-value: < 2.2e-16
#anova 
summary(model <- aov(TrustPolice_sc ~ condition, S5, na.action=na.omit))
##              Df Sum Sq Mean Sq F value Pr(>F)    
## condition     3 123021   41007    50.3 <2e-16 ***
## Residuals   335 273096     815                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(model, type="III")
## Anova Table (Type III tests)
## 
## Response: TrustPolice_sc
##             Sum Sq  Df F value    Pr(>F)    
## (Intercept) 438439   1 537.822 < 2.2e-16 ***
## condition   123021   3  50.302 < 2.2e-16 ***
## Residuals   273096 335                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(glht(model, linfct = mcp(condition= "Tukey")))
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = TrustPolice_sc ~ condition, data = S5, na.action = na.omit)
## 
## Linear Hypotheses:
##                                           Estimate Std. Error t value Pr(>|t|)
## police_violence - control == 0             -47.036      4.367 -10.771  < 1e-05
## protester_violence - control == 0           -3.794      4.450  -0.853    0.829
## mutual_violence - control == 0             -28.030      4.317  -6.493  < 1e-05
## protester_violence - police_violence == 0   43.243      4.462   9.691  < 1e-05
## mutual_violence - police_violence == 0      19.006      4.330   4.389 7.25e-05
## mutual_violence - protester_violence == 0  -24.237      4.413  -5.492  < 1e-05
##                                              
## police_violence - control == 0            ***
## protester_violence - control == 0            
## mutual_violence - control == 0            ***
## protester_violence - police_violence == 0 ***
## mutual_violence - police_violence == 0    ***
## mutual_violence - protester_violence == 0 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
#regression model with police violence and protester violence as predictors.
summary(model <- lm(TrustPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = TrustPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum + 
##     incomeN + Race4 + age + educationN + gender_dum, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -73.220 -18.757  -0.933  19.719  60.952 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                               55.6780     9.2791   6.000 5.22e-09
## PoliceViolence.dum                       -46.4196     4.3619 -10.642  < 2e-16
## ProtesterViolence.dum                     -2.4882     4.4644  -0.557 0.577677
## incomeN                                    1.0708     0.4432   2.416 0.016234
## Race4Black                                 0.5662     5.0407   0.112 0.910637
## Race4Hispanic                             -2.4244     5.6774  -0.427 0.669636
## Race4Asian                                -3.6087     7.5723  -0.477 0.633984
## Race4Other                                18.9388    14.2897   1.325 0.185979
## age                                        0.3630     0.1124   3.230 0.001361
## educationN                                -3.2862     1.7969  -1.829 0.068340
## gender_dum                                 3.9132     3.1084   1.259 0.208959
## PoliceViolence.dum:ProtesterViolence.dum  21.4903     6.1741   3.481 0.000568
##                                             
## (Intercept)                              ***
## PoliceViolence.dum                       ***
## ProtesterViolence.dum                       
## incomeN                                  *  
## Race4Black                                  
## Race4Hispanic                               
## Race4Asian                                  
## Race4Other                                  
## age                                      ** 
## educationN                               .  
## gender_dum                                  
## PoliceViolence.dum:ProtesterViolence.dum ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 27.83 on 327 degrees of freedom
## Multiple R-squared:  0.3608, Adjusted R-squared:  0.3393 
## F-statistic: 16.78 on 11 and 327 DF,  p-value: < 2.2e-16
sim_slopes(model, pred = PoliceViolence.dum, modx = ProtesterViolence.dum)
## JOHNSON-NEYMAN INTERVAL 
## 
## When ProtesterViolence.dum is OUTSIDE the interval [1.52, 4.36], the slope
## of PoliceViolence.dum is p < .05.
## 
## Note: The range of observed values of ProtesterViolence.dum is [0.00, 1.00]
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 0.00 (0): 
## 
##     Est.   S.E.   t val.      p
## -------- ------ -------- ------
##   -46.42   4.36   -10.64   0.00
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 1.00 (1): 
## 
##     Est.   S.E.   t val.      p
## -------- ------ -------- ------
##   -24.93   4.34    -5.74   0.00
summary(model <- lm(TrustPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum*ideology+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = TrustPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum * 
##     ideology + incomeN + Race4 + age + educationN + gender_dum, 
##     data = S5, na.action = na.omit)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -82.72 -16.96   1.56  15.46  75.89 
## 
## Coefficients:
##                                                   Estimate Std. Error t value
## (Intercept)                                        32.1905    10.2276   3.147
## PoliceViolence.dum                                -49.2927     8.8576  -5.565
## ProtesterViolence.dum                              -9.4385     9.6500  -0.978
## ideology                                            5.4482     1.4719   3.702
## incomeN                                             0.3718     0.4217   0.882
## Race4Black                                          2.5504     4.7221   0.540
## Race4Hispanic                                       1.9845     5.3041   0.374
## Race4Asian                                          1.4908     7.0717   0.211
## Race4Other                                         26.7328    13.3142   2.008
## age                                                 0.3566     0.1044   3.417
## educationN                                         -1.0787     1.6932  -0.637
## gender_dum                                          4.6284     2.8865   1.603
## PoliceViolence.dum:ProtesterViolence.dum           29.8546    12.9094   2.313
## PoliceViolence.dum:ideology                         0.6683     2.1177   0.316
## ProtesterViolence.dum:ideology                      1.1465     2.2289   0.514
## PoliceViolence.dum:ProtesterViolence.dum:ideology  -1.6247     3.0301  -0.536
##                                                   Pr(>|t|)    
## (Intercept)                                       0.001801 ** 
## PoliceViolence.dum                                5.51e-08 ***
## ProtesterViolence.dum                             0.328763    
## ideology                                          0.000252 ***
## incomeN                                           0.378603    
## Race4Black                                        0.589504    
## Race4Hispanic                                     0.708545    
## Race4Asian                                        0.833168    
## Race4Other                                        0.045493 *  
## age                                               0.000715 ***
## educationN                                        0.524534    
## gender_dum                                        0.109812    
## PoliceViolence.dum:ProtesterViolence.dum          0.021372 *  
## PoliceViolence.dum:ideology                       0.752530    
## ProtesterViolence.dum:ideology                    0.607347    
## PoliceViolence.dum:ProtesterViolence.dum:ideology 0.592200    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.79 on 323 degrees of freedom
## Multiple R-squared:  0.4575, Adjusted R-squared:  0.4323 
## F-statistic: 18.16 on 15 and 323 DF,  p-value: < 2.2e-16
#plot
ggplot(S5, aes(x = ProtesterViolence, y = TrustPolice_sc, fill = PoliceViolence, group = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("grey","#80b1d3")) +
  labs(x = "", 
       y = "Score", 
       title = "Effects on trust in the police") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

ggplot(subset(S5, ideology.cat %in% c('Liberal', 'Conservative')), aes(x = ProtesterViolence, y = TrustPolice_sc, fill = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", position = position_dodge(width = 0.8), width = 0.2) +
  facet_wrap(vars(ideology.cat)) +
  theme_bw() +
  scale_fill_manual(values = c("grey", "#80b1d3")) +
  scale_y_continuous(limits = c(0, 100)) +
  labs(x = "", y = "Score", title = "Effects on trust in the police by ideology") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Effects on perceptions of harm

summary(model <- lm(HarmfulPolice_sc ~ condD1*condD2*condD3, S5, na.action=na.omit))#control as the reference group
## 
## Call:
## lm(formula = HarmfulPolice_sc ~ condD1 * condD2 * condD3, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -84.524 -12.029  -3.524  14.969  91.942 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)             8.058      2.618   3.078  0.00226 ** 
## condD1                 76.465      3.714  20.590  < 2e-16 ***
## condD2                  6.961      3.784   1.840  0.06672 .  
## condD3                 59.481      3.672  16.201  < 2e-16 ***
## condD1:condD2              NA         NA      NA       NA    
## condD1:condD3              NA         NA      NA       NA    
## condD2:condD3              NA         NA      NA       NA    
## condD1:condD2:condD3       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24.28 on 335 degrees of freedom
## Multiple R-squared:  0.6497, Adjusted R-squared:  0.6465 
## F-statistic: 207.1 on 3 and 335 DF,  p-value: < 2.2e-16
summary(model <- lm(HarmfulPolice_sc ~ condD0*condD1*condD2, S5, na.action=na.omit))#mutual violence as the reference group. 
## 
## Call:
## lm(formula = HarmfulPolice_sc ~ condD0 * condD1 * condD2, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -84.524 -12.029  -3.524  14.969  91.942 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            67.539      2.574  26.241  < 2e-16 ***
## condD0                -59.481      3.672 -16.201  < 2e-16 ***
## condD1                 16.984      3.682   4.612 5.68e-06 ***
## condD2                -52.520      3.753 -13.993  < 2e-16 ***
## condD0:condD1              NA         NA      NA       NA    
## condD0:condD2              NA         NA      NA       NA    
## condD1:condD2              NA         NA      NA       NA    
## condD0:condD1:condD2       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24.28 on 335 degrees of freedom
## Multiple R-squared:  0.6497, Adjusted R-squared:  0.6465 
## F-statistic: 207.1 on 3 and 335 DF,  p-value: < 2.2e-16
#anova 
summary(model <- aov(HarmfulPolice_sc ~ condition, S5, na.action=na.omit))
##              Df Sum Sq Mean Sq F value Pr(>F)    
## condition     3 366272  122091   207.1 <2e-16 ***
## Residuals   335 197510     590                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(model, type="III")
## Anova Table (Type III tests)
## 
## Response: HarmfulPolice_sc
##             Sum Sq  Df  F value    Pr(>F)    
## (Intercept)   5584   1   9.4716  0.002259 ** 
## condition   366272   3 207.0800 < 2.2e-16 ***
## Residuals   197510 335                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(glht(model, linfct = mcp(condition= "Tukey")))
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = HarmfulPolice_sc ~ condition, data = S5, na.action = na.omit)
## 
## Linear Hypotheses:
##                                           Estimate Std. Error t value Pr(>|t|)
## police_violence - control == 0              76.465      3.714  20.590   <1e-04
## protester_violence - control == 0            6.961      3.784   1.840    0.257
## mutual_violence - control == 0              59.481      3.672  16.201   <1e-04
## protester_violence - police_violence == 0  -69.505      3.795 -18.316   <1e-04
## mutual_violence - police_violence == 0     -16.984      3.682  -4.612   <1e-04
## mutual_violence - protester_violence == 0   52.520      3.753  13.993   <1e-04
##                                              
## police_violence - control == 0            ***
## protester_violence - control == 0            
## mutual_violence - control == 0            ***
## protester_violence - police_violence == 0 ***
## mutual_violence - police_violence == 0    ***
## mutual_violence - protester_violence == 0 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
#regression model with police violence and protester violence as predictors.
summary(model <- lm(HarmfulPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = HarmfulPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum + 
##     incomeN + Race4 + age + educationN + gender_dum, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -92.82 -10.80  -2.24  14.25  91.65 
## 
## Coefficients:
##                                            Estimate Std. Error t value Pr(>|t|)
## (Intercept)                               11.377423   8.093345   1.406   0.1607
## PoliceViolence.dum                        75.547568   3.804537  19.857  < 2e-16
## ProtesterViolence.dum                      5.667009   3.893936   1.455   0.1465
## incomeN                                   -0.593620   0.386554  -1.536   0.1256
## Race4Black                                 1.250238   4.396529   0.284   0.7763
## Race4Hispanic                              6.114578   4.951895   1.235   0.2178
## Race4Asian                                13.075819   6.604638   1.980   0.0486
## Race4Other                                -1.369047  12.463619  -0.110   0.9126
## age                                       -0.007956   0.098015  -0.081   0.9354
## educationN                                 0.311420   1.567286   0.199   0.8426
## gender_dum                                -0.029173   2.711147  -0.011   0.9914
## PoliceViolence.dum:ProtesterViolence.dum -22.988731   5.385129  -4.269 2.58e-05
##                                             
## (Intercept)                                 
## PoliceViolence.dum                       ***
## ProtesterViolence.dum                       
## incomeN                                     
## Race4Black                                  
## Race4Hispanic                               
## Race4Asian                               *  
## Race4Other                                  
## age                                         
## educationN                                  
## gender_dum                                  
## PoliceViolence.dum:ProtesterViolence.dum ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24.27 on 327 degrees of freedom
## Multiple R-squared:  0.6583, Adjusted R-squared:  0.6469 
## F-statistic: 57.28 on 11 and 327 DF,  p-value: < 2.2e-16
sim_slopes(model, pred = PoliceViolence.dum, modx = ProtesterViolence.dum)
## JOHNSON-NEYMAN INTERVAL 
## 
## When ProtesterViolence.dum is OUTSIDE the interval [2.39, 5.69], the slope
## of PoliceViolence.dum is p < .05.
## 
## Note: The range of observed values of ProtesterViolence.dum is [0.00, 1.00]
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 0.00 (0): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   75.55   3.80    19.86   0.00
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 1.00 (1): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   52.56   3.79    13.89   0.00
summary(model <- lm(HarmfulPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum*ideology+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = HarmfulPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum * 
##     ideology + incomeN + Race4 + age + educationN + gender_dum, 
##     data = S5, na.action = na.omit)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -102.661  -11.254   -1.751   12.118   85.001 
## 
## Coefficients:
##                                                     Estimate Std. Error t value
## (Intercept)                                        22.557414   9.207903   2.450
## PoliceViolence.dum                                 83.363322   7.974502  10.454
## ProtesterViolence.dum                               4.641886   8.687844   0.534
## ideology                                           -2.433807   1.325111  -1.837
## incomeN                                            -0.149099   0.379649  -0.393
## Race4Black                                          0.873966   4.251256   0.206
## Race4Hispanic                                       3.674261   4.775279   0.769
## Race4Asian                                          9.384492   6.366657   1.474
## Race4Other                                         -5.885814  11.986742  -0.491
## age                                                 0.004928   0.093964   0.052
## educationN                                         -1.246012   1.524372  -0.817
## gender_dum                                         -0.723822   2.598708  -0.279
## PoliceViolence.dum:ProtesterViolence.dum          -17.066444  11.622274  -1.468
## PoliceViolence.dum:ideology                        -2.012203   1.906559  -1.055
## ProtesterViolence.dum:ideology                      0.548762   2.006658   0.273
## PoliceViolence.dum:ProtesterViolence.dum:ideology  -1.782334   2.727958  -0.653
##                                                   Pr(>|t|)    
## (Intercept)                                         0.0148 *  
## PoliceViolence.dum                                  <2e-16 ***
## ProtesterViolence.dum                               0.5935    
## ideology                                            0.0672 .  
## incomeN                                             0.6948    
## Race4Black                                          0.8372    
## Race4Hispanic                                       0.4422    
## Race4Asian                                          0.1415    
## Race4Other                                          0.6237    
## age                                                 0.9582    
## educationN                                          0.4143    
## gender_dum                                          0.7808    
## PoliceViolence.dum:ProtesterViolence.dum            0.1430    
## PoliceViolence.dum:ideology                         0.2920    
## ProtesterViolence.dum:ideology                      0.7847    
## PoliceViolence.dum:ProtesterViolence.dum:ideology   0.5140    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 23.22 on 323 degrees of freedom
## Multiple R-squared:  0.691,  Adjusted R-squared:  0.6767 
## F-statistic: 48.16 on 15 and 323 DF,  p-value: < 2.2e-16
#plot
ggplot(S5, aes(x = ProtesterViolence, y = HarmfulPolice_sc, fill = PoliceViolence, group = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("grey","#80b1d3")) +
  labs(x = "", 
       y = "Score", 
       title = "Effects on perceptions of harm") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

ggplot(subset(S5, ideology.cat %in% c('Liberal', 'Conservative')), aes(x = ProtesterViolence, y = HarmfulPolice_sc, fill = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", position = position_dodge(width = 0.8), width = 0.2) +
  facet_wrap(vars(ideology.cat)) +
  theme_bw() +
  scale_fill_manual(values = c("grey", "#80b1d3")) +
  scale_y_continuous(limits = c(0, 100)) +
  labs(x = "", y = "Score", title = "Effects on perceptions of harm by ideology") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Effects on morality

summary(model <- lm(MoralPolice_sc ~ condD1*condD2*condD3, S5, na.action=na.omit))#control as the reference group
## 
## Call:
## lm(formula = MoralPolice_sc ~ condD1 * condD2 * condD3, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -75.152 -15.353   1.151  14.598  83.647 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            88.849      2.810  31.621  < 2e-16 ***
## condD1                -73.496      3.985 -18.442  < 2e-16 ***
## condD2                -13.697      4.061  -3.373 0.000831 ***
## condD3                -54.107      3.940 -13.733  < 2e-16 ***
## condD1:condD2              NA         NA      NA       NA    
## condD1:condD3              NA         NA      NA       NA    
## condD2:condD3              NA         NA      NA       NA    
## condD1:condD2:condD3       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26.06 on 335 degrees of freedom
## Multiple R-squared:  0.5683, Adjusted R-squared:  0.5644 
## F-statistic:   147 on 3 and 335 DF,  p-value: < 2.2e-16
summary(model <- lm(MoralPolice_sc ~ condD0*condD1*condD2, S5, na.action=na.omit))#mutual violence as the reference group. 
## 
## Call:
## lm(formula = MoralPolice_sc ~ condD0 * condD1 * condD2, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -75.152 -15.353   1.151  14.598  83.647 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            34.742      2.762  12.578  < 2e-16 ***
## condD0                 54.107      3.940  13.733  < 2e-16 ***
## condD1                -19.389      3.952  -4.906 1.45e-06 ***
## condD2                 40.410      4.028  10.033  < 2e-16 ***
## condD0:condD1              NA         NA      NA       NA    
## condD0:condD2              NA         NA      NA       NA    
## condD1:condD2              NA         NA      NA       NA    
## condD0:condD1:condD2       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 26.06 on 335 degrees of freedom
## Multiple R-squared:  0.5683, Adjusted R-squared:  0.5644 
## F-statistic:   147 on 3 and 335 DF,  p-value: < 2.2e-16
#anova 
summary(model <- aov(MoralPolice_sc ~ condition, S5, na.action=na.omit))
##              Df Sum Sq Mean Sq F value Pr(>F)    
## condition     3 299428   99809     147 <2e-16 ***
## Residuals   335 227455     679                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(model, type="III")
## Anova Table (Type III tests)
## 
## Response: MoralPolice_sc
##             Sum Sq  Df F value    Pr(>F)    
## (Intercept) 678894   1  999.89 < 2.2e-16 ***
## condition   299428   3  147.00 < 2.2e-16 ***
## Residuals   227455 335                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(glht(model, linfct = mcp(condition= "Tukey")))
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = MoralPolice_sc ~ condition, data = S5, na.action = na.omit)
## 
## Linear Hypotheses:
##                                           Estimate Std. Error t value Pr(>|t|)
## police_violence - control == 0             -73.496      3.985 -18.442  < 0.001
## protester_violence - control == 0          -13.697      4.061  -3.373  0.00463
## mutual_violence - control == 0             -54.107      3.940 -13.733  < 0.001
## protester_violence - police_violence == 0   59.799      4.072  14.685  < 0.001
## mutual_violence - police_violence == 0      19.389      3.952   4.906  < 0.001
## mutual_violence - protester_violence == 0  -40.410      4.028 -10.033  < 0.001
##                                              
## police_violence - control == 0            ***
## protester_violence - control == 0         ** 
## mutual_violence - control == 0            ***
## protester_violence - police_violence == 0 ***
## mutual_violence - police_violence == 0    ***
## mutual_violence - protester_violence == 0 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
#regression model with police violence and protester violence as predictors.
summary(model <- lm(MoralPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = MoralPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum + 
##     incomeN + Race4 + age + educationN + gender_dum, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -77.285 -16.900   2.144  15.518  83.297 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                               87.7516     8.6497  10.145  < 2e-16
## PoliceViolence.dum                       -73.3667     4.0661 -18.044  < 2e-16
## ProtesterViolence.dum                    -13.4897     4.1616  -3.241  0.00131
## incomeN                                    0.7354     0.4131   1.780  0.07600
## Race4Black                                -3.3916     4.6988  -0.722  0.47093
## Race4Hispanic                             -8.2594     5.2923  -1.561  0.11958
## Race4Asian                                -6.8034     7.0587  -0.964  0.33585
## Race4Other                                 4.5585    13.3205   0.342  0.73241
## age                                        0.1108     0.1048   1.058  0.29099
## educationN                                -1.8596     1.6750  -1.110  0.26774
## gender_dum                                -3.4290     2.8975  -1.183  0.23751
## PoliceViolence.dum:ProtesterViolence.dum  33.3836     5.7553   5.800 1.56e-08
##                                             
## (Intercept)                              ***
## PoliceViolence.dum                       ***
## ProtesterViolence.dum                    ** 
## incomeN                                  .  
## Race4Black                                  
## Race4Hispanic                               
## Race4Asian                                  
## Race4Other                                  
## age                                         
## educationN                                  
## gender_dum                                  
## PoliceViolence.dum:ProtesterViolence.dum ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.94 on 327 degrees of freedom
## Multiple R-squared:  0.5824, Adjusted R-squared:  0.5684 
## F-statistic: 41.46 on 11 and 327 DF,  p-value: < 2.2e-16
sim_slopes(model, pred = PoliceViolence.dum, modx = ProtesterViolence.dum)
## JOHNSON-NEYMAN INTERVAL 
## 
## When ProtesterViolence.dum is OUTSIDE the interval [1.74, 3.09], the slope
## of PoliceViolence.dum is p < .05.
## 
## Note: The range of observed values of ProtesterViolence.dum is [0.00, 1.00]
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 0.00 (0): 
## 
##     Est.   S.E.   t val.      p
## -------- ------ -------- ------
##   -73.37   4.07   -18.04   0.00
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 1.00 (1): 
## 
##     Est.   S.E.   t val.      p
## -------- ------ -------- ------
##   -39.98   4.05    -9.88   0.00
summary(model <- lm(MoralPolice_sc ~ PoliceViolence.dum*ProtesterViolence.dum*ideology+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = MoralPolice_sc ~ PoliceViolence.dum * ProtesterViolence.dum * 
##     ideology + incomeN + Race4 + age + educationN + gender_dum, 
##     data = S5, na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -76.294 -15.635   2.069  15.610  83.449 
## 
## Coefficients:
##                                                   Estimate Std. Error t value
## (Intercept)                                        78.6650     9.9234   7.927
## PoliceViolence.dum                                -84.5899     8.5942  -9.843
## ProtesterViolence.dum                             -20.9358     9.3630  -2.236
## ideology                                            1.8326     1.4281   1.283
## incomeN                                             0.2853     0.4092   0.697
## Race4Black                                         -2.7017     4.5816  -0.590
## Race4Hispanic                                      -5.5552     5.1464  -1.079
## Race4Asian                                         -3.1073     6.8614  -0.453
## Race4Other                                          9.1037    12.9182   0.705
## age                                                 0.1046     0.1013   1.033
## educationN                                         -0.3475     1.6428  -0.212
## gender_dum                                         -2.7794     2.8006  -0.992
## PoliceViolence.dum:ProtesterViolence.dum           39.7709    12.5254   3.175
## PoliceViolence.dum:ideology                         2.9347     2.0547   1.428
## ProtesterViolence.dum:ideology                      1.5952     2.1626   0.738
## PoliceViolence.dum:ProtesterViolence.dum:ideology  -1.3946     2.9399  -0.474
##                                                   Pr(>|t|)    
## (Intercept)                                       3.68e-14 ***
## PoliceViolence.dum                                 < 2e-16 ***
## ProtesterViolence.dum                              0.02603 *  
## ideology                                           0.20033    
## incomeN                                            0.48618    
## Race4Black                                         0.55582    
## Race4Hispanic                                      0.28119    
## Race4Asian                                         0.65094    
## Race4Other                                         0.48149    
## age                                                0.30244    
## educationN                                         0.83261    
## gender_dum                                         0.32175    
## PoliceViolence.dum:ProtesterViolence.dum           0.00164 ** 
## PoliceViolence.dum:ideology                        0.15417    
## ProtesterViolence.dum:ideology                     0.46129    
## PoliceViolence.dum:ProtesterViolence.dum:ideology  0.63556    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.03 on 323 degrees of freedom
## Multiple R-squared:  0.616,  Adjusted R-squared:  0.5982 
## F-statistic: 34.55 on 15 and 323 DF,  p-value: < 2.2e-16
#plot
ggplot(S5, aes(x = ProtesterViolence, y = MoralPolice_sc, fill = PoliceViolence, group = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("grey","#80b1d3")) +
  labs(x = "", 
       y = "Score", 
       title = "Effects on perceptions of morality") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

ggplot(subset(S5, ideology.cat %in% c('Liberal', 'Conservative')), aes(x = ProtesterViolence, y = MoralPolice_sc, fill = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", position = position_dodge(width = 0.8), width = 0.2) +
  facet_wrap(vars(ideology.cat)) +
  theme_bw() +
  scale_fill_manual(values = c("grey", "#80b1d3")) +
  scale_y_continuous(limits = c(0, 100)) +
  labs(x = "", y = "Score", title = "Effects on perceptions of morality by ideology") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Effects on trust in the government

summary(model <- lm(TrustGov_sc ~ condD1*condD2*condD3, S5, na.action=na.omit)) #control as the reference group
## 
## Call:
## lm(formula = TrustGov_sc ~ condD1 * condD2 * condD3, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -56.785 -18.445   2.394  18.924  58.394 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            58.285      2.771  21.031  < 2e-16 ***
## condD1                -18.179      3.931  -4.625 5.36e-06 ***
## condD2                 -8.418      4.005  -2.102  0.03632 *  
## condD3                -12.493      3.886  -3.215  0.00143 ** 
## condD1:condD2              NA         NA      NA       NA    
## condD1:condD3              NA         NA      NA       NA    
## condD2:condD3              NA         NA      NA       NA    
## condD1:condD2:condD3       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.7 on 335 degrees of freedom
## Multiple R-squared:  0.06358,    Adjusted R-squared:  0.05519 
## F-statistic: 7.582 on 3 and 335 DF,  p-value: 6.404e-05
summary(model <- lm(TrustGov_sc ~ condD0*condD1*condD2, S5, na.action=na.omit)) #mutual violence as the reference group. It is not significantly different from police violence and protester violence conditions
## 
## Call:
## lm(formula = TrustGov_sc ~ condD0 * condD1 * condD2, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -56.785 -18.445   2.394  18.924  58.394 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            45.792      2.724  16.809  < 2e-16 ***
## condD0                 12.493      3.886   3.215  0.00143 ** 
## condD1                 -5.686      3.898  -1.459  0.14554    
## condD2                  4.075      3.973   1.026  0.30576    
## condD0:condD1              NA         NA      NA       NA    
## condD0:condD2              NA         NA      NA       NA    
## condD1:condD2              NA         NA      NA       NA    
## condD0:condD1:condD2       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.7 on 335 degrees of freedom
## Multiple R-squared:  0.06358,    Adjusted R-squared:  0.05519 
## F-statistic: 7.582 on 3 and 335 DF,  p-value: 6.404e-05
summary(model <- aov(TrustGov_sc ~ condition, S5, na.action=na.omit))
##              Df Sum Sq Mean Sq F value  Pr(>F)    
## condition     3  15023    5008   7.582 6.4e-05 ***
## Residuals   335 221274     661                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(model, type="III")
## Anova Table (Type III tests)
## 
## Response: TrustGov_sc
##             Sum Sq  Df  F value    Pr(>F)    
## (Intercept) 292153   1 442.3078 < 2.2e-16 ***
## condition    15023   3   7.5816 6.404e-05 ***
## Residuals   221274 335                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(glht(model, linfct = mcp(condition= "Tukey")))
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = TrustGov_sc ~ condition, data = S5, na.action = na.omit)
## 
## Linear Hypotheses:
##                                           Estimate Std. Error t value Pr(>|t|)
## police_violence - control == 0             -18.179      3.931  -4.625  < 0.001
## protester_violence - control == 0           -8.418      4.005  -2.102  0.15477
## mutual_violence - control == 0             -12.493      3.886  -3.215  0.00777
## protester_violence - police_violence == 0    9.761      4.016   2.430  0.07314
## mutual_violence - police_violence == 0       5.686      3.898   1.459  0.46361
## mutual_violence - protester_violence == 0   -4.075      3.973  -1.026  0.73444
##                                              
## police_violence - control == 0            ***
## protester_violence - control == 0            
## mutual_violence - control == 0            ** 
## protester_violence - police_violence == 0 .  
## mutual_violence - police_violence == 0       
## mutual_violence - protester_violence == 0    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
summary(model <- lm(TrustGov_sc ~ PoliceViolence.dum*ProtesterViolence.dum+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = TrustGov_sc ~ PoliceViolence.dum * ProtesterViolence.dum + 
##     incomeN + Race4 + age + educationN + gender_dum, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -60.365 -17.528   1.437  18.307  61.163 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                               38.7398     8.4915   4.562 7.17e-06
## PoliceViolence.dum                       -18.5136     3.9917  -4.638 5.09e-06
## ProtesterViolence.dum                     -8.6119     4.0855  -2.108  0.03580
## incomeN                                    0.7017     0.4056   1.730  0.08456
## Race4Black                                 3.7636     4.6128   0.816  0.41515
## Race4Hispanic                              0.3456     5.1955   0.067  0.94700
## Race4Asian                                -1.2193     6.9296  -0.176  0.86043
## Race4Other                                 4.6494    13.0768   0.356  0.72241
## age                                        0.3166     0.1028   3.078  0.00226
## educationN                                -0.3031     1.6444  -0.184  0.85386
## gender_dum                                 0.2069     2.8445   0.073  0.94205
## PoliceViolence.dum:ProtesterViolence.dum  14.6345     5.6501   2.590  0.01002
##                                             
## (Intercept)                              ***
## PoliceViolence.dum                       ***
## ProtesterViolence.dum                    *  
## incomeN                                  .  
## Race4Black                                  
## Race4Hispanic                               
## Race4Asian                                  
## Race4Other                                  
## age                                      ** 
## educationN                                  
## gender_dum                                  
## PoliceViolence.dum:ProtesterViolence.dum *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.46 on 327 degrees of freedom
## Multiple R-squared:  0.1027, Adjusted R-squared:  0.07249 
## F-statistic: 3.401 on 11 and 327 DF,  p-value: 0.0001754
sim_slopes(model, pred = PoliceViolence.dum, modx = ProtesterViolence.dum)
## JOHNSON-NEYMAN INTERVAL 
## 
## When ProtesterViolence.dum is OUTSIDE the interval [0.82, 3.79], the slope
## of PoliceViolence.dum is p < .05.
## 
## Note: The range of observed values of ProtesterViolence.dum is [0.00, 1.00]
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 0.00 (0): 
## 
##     Est.   S.E.   t val.      p
## -------- ------ -------- ------
##   -18.51   3.99    -4.64   0.00
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 1.00 (1): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -3.88   3.97    -0.98   0.33
summary(model <- lm(TrustGov_sc ~ PoliceViolence.dum*ProtesterViolence.dum*ideology + incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = TrustGov_sc ~ PoliceViolence.dum * ProtesterViolence.dum * 
##     ideology + incomeN + Race4 + age + educationN + gender_dum, 
##     data = S5, na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -57.508 -18.567   2.239  18.290  56.133 
## 
## Coefficients:
##                                                   Estimate Std. Error t value
## (Intercept)                                        29.3946    10.0866   2.914
## PoliceViolence.dum                                -15.3293     8.7355  -1.755
## ProtesterViolence.dum                               5.3301     9.5169   0.560
## ideology                                            2.5430     1.4516   1.752
## incomeN                                             0.5746     0.4159   1.382
## Race4Black                                          3.3916     4.6569   0.728
## Race4Hispanic                                       1.1056     5.2310   0.211
## Race4Asian                                         -1.2980     6.9742  -0.186
## Race4Other                                          7.0558    13.1306   0.537
## age                                                 0.3062     0.1029   2.975
## educationN                                          0.0769     1.6698   0.046
## gender_dum                                          0.1541     2.8467   0.054
## PoliceViolence.dum:ProtesterViolence.dum            6.6962    12.7313   0.526
## PoliceViolence.dum:ideology                        -0.8608     2.0885  -0.412
## ProtesterViolence.dum:ideology                     -3.6701     2.1982  -1.670
## PoliceViolence.dum:ProtesterViolence.dum:ideology   2.0471     2.9883   0.685
##                                                   Pr(>|t|)   
## (Intercept)                                        0.00381 **
## PoliceViolence.dum                                 0.08024 . 
## ProtesterViolence.dum                              0.57582   
## ideology                                           0.08074 . 
## incomeN                                            0.16804   
## Race4Black                                         0.46696   
## Race4Hispanic                                      0.83274   
## Race4Asian                                         0.85247   
## Race4Other                                         0.59139   
## age                                                0.00315 **
## educationN                                         0.96330   
## gender_dum                                         0.95687   
## PoliceViolence.dum:ProtesterViolence.dum           0.59928   
## PoliceViolence.dum:ideology                        0.68051   
## ProtesterViolence.dum:ideology                     0.09596 . 
## PoliceViolence.dum:ProtesterViolence.dum:ideology  0.49380   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 25.44 on 323 degrees of freedom
## Multiple R-squared:  0.1155, Adjusted R-squared:  0.07439 
## F-statistic: 2.811 on 15 and 323 DF,  p-value: 0.0003924
sim_slopes(model, pred = ProtesterViolence.dum, modx = ideology)
## JOHNSON-NEYMAN INTERVAL 
## 
## The Johnson-Neyman interval could not be found. Is the p value for your
## interaction term below the specified alpha?
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of ProtesterViolence.dum when ideology = 1.906236 (- 1 SD): 
## 
##   Est.   S.E.   t val.      p
## ------ ------ -------- ------
##   3.77   4.02     0.94   0.35
## 
## Slope of ProtesterViolence.dum when ideology = 3.790560 (Mean): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -1.16   2.82    -0.41   0.68
## 
## Slope of ProtesterViolence.dum when ideology = 5.674885 (+ 1 SD): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   -6.10   3.97    -1.53   0.13
ggplot(S5, aes(x = ProtesterViolence, y = TrustGov_sc, fill = PoliceViolence, group = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("grey","#80b1d3")) +
  labs(x = "", 
       y = "Score", 
       title = "Effects on trust in the government") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

ggplot(subset(S5, ideology.cat %in% c('Liberal', 'Conservative')), aes(x = ProtesterViolence, y = TrustGov_sc, fill = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", position = position_dodge(width = 0.8), width = 0.2) +
  facet_wrap(vars(ideology.cat)) +
  theme_bw() +
  scale_fill_manual(values = c("grey", "#80b1d3")) +
  scale_y_continuous(limits = c(0, 100)) +
  labs(x = "", y = "Score", title = "Effects on trust in the government by ideology") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

Effects on support for police reforms

summary(model <- lm(PolicySupport ~ condD1*condD2*condD3, S5, na.action=na.omit))#control as the reference group
## 
## Call:
## lm(formula = PolicySupport ~ condD1 * condD2 * condD3, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -54.471 -13.211  -0.747  14.029  47.657 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            46.093      2.298  20.055  < 2e-16 ***
## condD1                 14.878      3.260   4.564 7.06e-06 ***
## condD2                  2.581      3.322   0.777   0.4377    
## condD3                  7.404      3.223   2.297   0.0222 *  
## condD1:condD2              NA         NA      NA       NA    
## condD1:condD3              NA         NA      NA       NA    
## condD2:condD3              NA         NA      NA       NA    
## condD1:condD2:condD3       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.31 on 335 degrees of freedom
## Multiple R-squared:  0.06665,    Adjusted R-squared:  0.0583 
## F-statistic: 7.975 on 3 and 335 DF,  p-value: 3.772e-05
summary(model <- lm(PolicySupport ~ condD0*condD1*condD2, S5, na.action=na.omit)) #mutual violence as the reference group. It is significantly different from the police violence condition
## 
## Call:
## lm(formula = PolicySupport ~ condD0 * condD1 * condD2, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -54.471 -13.211  -0.747  14.029  47.657 
## 
## Coefficients: (4 not defined because of singularities)
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            53.497      2.259  23.679   <2e-16 ***
## condD0                 -7.404      3.223  -2.297   0.0222 *  
## condD1                  7.473      3.232   2.312   0.0214 *  
## condD2                 -4.823      3.295  -1.464   0.1442    
## condD0:condD1              NA         NA      NA       NA    
## condD0:condD2              NA         NA      NA       NA    
## condD1:condD2              NA         NA      NA       NA    
## condD0:condD1:condD2       NA         NA      NA       NA    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21.31 on 335 degrees of freedom
## Multiple R-squared:  0.06665,    Adjusted R-squared:  0.0583 
## F-statistic: 7.975 on 3 and 335 DF,  p-value: 3.772e-05
summary(model <- aov(PolicySupport ~ condition, S5, na.action=na.omit))
##              Df Sum Sq Mean Sq F value   Pr(>F)    
## condition     3  10868    3623   7.975 3.77e-05 ***
## Residuals   335 152185     454                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
car::Anova(model, type="III")
## Anova Table (Type III tests)
## 
## Response: PolicySupport
##             Sum Sq  Df  F value    Pr(>F)    
## (Intercept) 182713   1 402.2000 < 2.2e-16 ***
## condition    10868   3   7.9746 3.772e-05 ***
## Residuals   152185 335                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(glht(model, linfct = mcp(condition= "Tukey")))
## 
##   Simultaneous Tests for General Linear Hypotheses
## 
## Multiple Comparisons of Means: Tukey Contrasts
## 
## 
## Fit: aov(formula = PolicySupport ~ condition, data = S5, na.action = na.omit)
## 
## Linear Hypotheses:
##                                           Estimate Std. Error t value Pr(>|t|)
## police_violence - control == 0              14.878      3.260   4.564  < 0.001
## protester_violence - control == 0            2.581      3.322   0.777  0.86479
## mutual_violence - control == 0               7.404      3.223   2.297  0.10071
## protester_violence - police_violence == 0  -12.297      3.331  -3.692  0.00137
## mutual_violence - police_violence == 0      -7.473      3.232  -2.312  0.09725
## mutual_violence - protester_violence == 0    4.823      3.295   1.464  0.46051
##                                              
## police_violence - control == 0            ***
## protester_violence - control == 0            
## mutual_violence - control == 0               
## protester_violence - police_violence == 0 ** 
## mutual_violence - police_violence == 0    .  
## mutual_violence - protester_violence == 0    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## (Adjusted p values reported -- single-step method)
summary(model <- lm(PolicySupport ~ PoliceViolence.dum*ProtesterViolence.dum+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = PolicySupport ~ PoliceViolence.dum * ProtesterViolence.dum + 
##     incomeN + Race4 + age + educationN + gender_dum, data = S5, 
##     na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -60.871 -12.033  -1.008  13.777  52.619 
## 
## Coefficients:
##                                          Estimate Std. Error t value Pr(>|t|)
## (Intercept)                              52.73144    6.95385   7.583 3.53e-13
## PoliceViolence.dum                       14.75555    3.26888   4.514 8.89e-06
## ProtesterViolence.dum                     2.31621    3.34569   0.692  0.48924
## incomeN                                  -1.01775    0.33213  -3.064  0.00236
## Race4Black                                1.33943    3.77753   0.355  0.72313
## Race4Hispanic                             5.48397    4.25470   1.289  0.19834
## Race4Asian                                1.05003    5.67475   0.185  0.85332
## Race4Other                               -0.60256   10.70882  -0.056  0.95516
## age                                      -0.22014    0.08421  -2.614  0.00936
## educationN                                2.92898    1.34662   2.175  0.03034
## gender_dum                                0.48754    2.32943   0.209  0.83435
## PoliceViolence.dum:ProtesterViolence.dum -9.87734    4.62694  -2.135  0.03352
##                                             
## (Intercept)                              ***
## PoliceViolence.dum                       ***
## ProtesterViolence.dum                       
## incomeN                                  ** 
## Race4Black                                  
## Race4Hispanic                               
## Race4Asian                                  
## Race4Other                                  
## age                                      ** 
## educationN                               *  
## gender_dum                                  
## PoliceViolence.dum:ProtesterViolence.dum *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 20.85 on 327 degrees of freedom
## Multiple R-squared:  0.1279, Adjusted R-squared:  0.09858 
## F-statistic:  4.36 on 11 and 327 DF,  p-value: 4.191e-06
sim_slopes(model, pred = PoliceViolence.dum, modx = ProtesterViolence.dum)
## JOHNSON-NEYMAN INTERVAL 
## 
## When ProtesterViolence.dum is OUTSIDE the interval [0.90, 13.25], the slope
## of PoliceViolence.dum is p < .05.
## 
## Note: The range of observed values of ProtesterViolence.dum is [0.00, 1.00]
## 
## SIMPLE SLOPES ANALYSIS 
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 0.00 (0): 
## 
##    Est.   S.E.   t val.      p
## ------- ------ -------- ------
##   14.76   3.27     4.51   0.00
## 
## Slope of PoliceViolence.dum when ProtesterViolence.dum = 1.00 (1): 
## 
##   Est.   S.E.   t val.      p
## ------ ------ -------- ------
##   4.88   3.25     1.50   0.13
summary(model <- lm(PolicySupport ~ PoliceViolence.dum*ProtesterViolence.dum*ideology+ incomeN + Race4 + age + educationN + gender_dum, S5, na.action=na.omit))
## 
## Call:
## lm(formula = PolicySupport ~ PoliceViolence.dum * ProtesterViolence.dum * 
##     ideology + incomeN + Race4 + age + educationN + gender_dum, 
##     data = S5, na.action = na.omit)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -72.721 -11.416   0.356  11.012  51.928 
## 
## Coefficients:
##                                                   Estimate Std. Error t value
## (Intercept)                                        73.7234     7.4179   9.939
## PoliceViolence.dum                                 12.0253     6.4243   1.872
## ProtesterViolence.dum                               6.7507     6.9990   0.965
## ideology                                           -4.8483     1.0675  -4.542
## incomeN                                            -0.4372     0.3059  -1.429
## Race4Black                                         -0.6423     3.4248  -0.188
## Race4Hispanic                                       2.0530     3.8470   0.534
## Race4Asian                                         -3.8201     5.1290  -0.745
## Race4Other                                         -6.5683     9.6566  -0.680
## age                                                -0.2131     0.0757  -2.815
## educationN                                          1.0266     1.2280   0.836
## gender_dum                                         -0.2418     2.0935  -0.116
## PoliceViolence.dum:ProtesterViolence.dum           -6.8517     9.3630  -0.732
## PoliceViolence.dum:ideology                         0.8353     1.5359   0.544
## ProtesterViolence.dum:ideology                     -0.5925     1.6166  -0.367
## PoliceViolence.dum:ProtesterViolence.dum:ideology  -1.3329     2.1977  -0.607
##                                                   Pr(>|t|)    
## (Intercept)                                        < 2e-16 ***
## PoliceViolence.dum                                 0.06213 .  
## ProtesterViolence.dum                              0.33550    
## ideology                                          7.89e-06 ***
## incomeN                                            0.15384    
## Race4Black                                         0.85136    
## Race4Hispanic                                      0.59393    
## Race4Asian                                         0.45693    
## Race4Other                                         0.49687    
## age                                                0.00517 ** 
## educationN                                         0.40379    
## gender_dum                                         0.90811    
## PoliceViolence.dum:ProtesterViolence.dum           0.46483    
## PoliceViolence.dum:ideology                        0.58695    
## ProtesterViolence.dum:ideology                     0.71421    
## PoliceViolence.dum:ProtesterViolence.dum:ideology  0.54460    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 18.71 on 323 degrees of freedom
## Multiple R-squared:  0.3067, Adjusted R-squared:  0.2745 
## F-statistic: 9.526 on 15 and 323 DF,  p-value: < 2.2e-16
ggplot(S5, aes(x = ProtesterViolence, y = PolicySupport, fill = PoliceViolence, group = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", 
               position = position_dodge(width = 0.8), width = 0.2) +
  scale_y_continuous(limits = c(0, 100)) +
  theme_bw() +
  scale_fill_manual(values = c("grey","#80b1d3")) +
  labs(x = "", 
       y = "Score", 
       title = "Effects on support for police reforms") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14), 
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  ) 

ggplot(subset(S5, ideology.cat %in% c('Liberal', 'Conservative')), aes(x = ProtesterViolence, y = PolicySupport, fill = PoliceViolence)) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = 0.8), width = 0.75) +
  stat_summary(fun.data = mean_cl_boot, geom = "errorbar", colour = "grey", position = position_dodge(width = 0.8), width = 0.2) +
  facet_wrap(vars(ideology.cat)) +
  theme_bw() +
  scale_fill_manual(values = c("grey", "#80b1d3")) +
  scale_y_continuous(limits = c(0, 100)) +
  labs(x = "", y = "Score", title = "Effects on support for police reforms by ideology") +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    plot.subtitle = element_text(hjust = 0.5),
    plot.caption = element_text(hjust = 0.5, face = "italic")
  )

#violin plot with ideology

Mediation analysis

library(lavaan)

S5$MoralPolice_std <- scale(S5$MoralPolice_sc)
S5$HarmfulPolice_std <- scale(S5$HarmfulPolice_sc)
S5$TrustPolice_std <- scale(S5$TrustPolice_sc)

#Morality as a mediator
model <- '
    # Direct effects
    MoralPolice_std ~ a1*condD1 + a2*condD2 + a3*condD3
    TrustPolice_std ~ b1*MoralPolice_std + c1*condD1 + c2*condD2 +c3*condD3
    
  # Indirect effects
   Ind_Eff_D1 := b1*a1
   Ind_Eff_D2 := b1*a2
   Ind_Eff_D3 := b1*a3
'
fit <- sem(model, data=S5)
summary(fit, standardized=TRUE, fit.measures = TRUE, rsq = TRUE)
## lavaan 0.6.17 ended normally after 1 iteration
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           339
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Model Test Baseline Model:
## 
##   Test statistic                               565.824
##   Degrees of freedom                                 7
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                       1.000
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)               -678.127
##   Loglikelihood unrestricted model (H1)       -678.127
##                                                       
##   Akaike (AIC)                                1374.254
##   Bayesian (BIC)                              1408.688
##   Sample-size adjusted Bayesian (SABIC)       1380.138
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.000
##   P-value H_0: RMSEA <= 0.050                       NA
##   P-value H_0: RMSEA >= 0.080                       NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                     Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   MoralPolice_std ~                                                      
##     condD1    (a1)    -1.862    0.100  -18.551    0.000   -1.862   -0.808
##     condD2    (a2)    -0.347    0.102   -3.393    0.001   -0.347   -0.147
##     condD3    (a3)    -1.370    0.099  -13.814    0.000   -1.370   -0.604
##   TrustPolice_std ~                                                      
##     MrlPlc_st (b1)     0.766    0.055   14.018    0.000    0.766    0.766
##     condD1    (c1)     0.051    0.143    0.356    0.722    0.051    0.022
##     condD2    (c2)     0.155    0.105    1.480    0.139    0.155    0.066
##     condD3    (c3)     0.230    0.125    1.847    0.065    0.230    0.101
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .MoralPolic_std    0.430    0.033   13.019    0.000    0.430    0.432
##    .TrustPolic_std    0.435    0.033   13.019    0.000    0.435    0.436
## 
## R-Square:
##                    Estimate
##     MoralPolic_std    0.568
##     TrustPolic_std    0.564
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     Ind_Eff_D1       -1.425    0.127  -11.184    0.000   -1.425   -0.619
##     Ind_Eff_D2       -0.266    0.081   -3.298    0.001   -0.266   -0.112
##     Ind_Eff_D3       -1.049    0.107   -9.839    0.000   -1.049   -0.462
#Harm is a mediator
model <- '
    # Direct effects
    HarmfulPolice_std ~ a1*condD1 + a2*condD2 + a3*condD3
    TrustPolice_std ~ b1*HarmfulPolice_std + c1*condD1 + c2*condD2 +c3*condD3
    
    # Indirect effects
   Ind_Eff_D1 := b1*a1
   Ind_Eff_D2 := b1*a2
   Ind_Eff_D3 := b1*a3
'
fit <- sem(model, data=S5)
summary(fit, standardized=TRUE, fit.measures = TRUE, rsq = TRUE)
## lavaan 0.6.17 ended normally after 1 iteration
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         9
## 
##   Number of observations                           339
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Model Test Baseline Model:
## 
##   Test statistic                               577.928
##   Degrees of freedom                                 7
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                       1.000
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)               -672.075
##   Loglikelihood unrestricted model (H1)       -672.075
##                                                       
##   Akaike (AIC)                                1362.150
##   Bayesian (BIC)                              1396.584
##   Sample-size adjusted Bayesian (SABIC)       1368.034
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.000
##   P-value H_0: RMSEA <= 0.050                       NA
##   P-value H_0: RMSEA >= 0.080                       NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   HarmfulPolice_std ~                                                      
##     condD1    (a1)       1.872    0.090   20.712    0.000    1.872    0.813
##     condD2    (a2)       0.170    0.092    1.850    0.064    0.170    0.072
##     condD3    (a3)       1.456    0.089   16.297    0.000    1.456    0.642
##   TrustPolice_std ~                                                        
##     HrmflPlc_ (b1)      -0.698    0.066  -10.553    0.000   -0.698   -0.698
##     condD1    (c1)      -0.068    0.166   -0.410    0.682   -0.068   -0.029
##     condD2    (c2)       0.008    0.113    0.072    0.943    0.008    0.003
##     condD3    (c3)       0.197    0.145    1.357    0.175    0.197    0.087
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .HarmfulPlc_std    0.349    0.027   13.019    0.000    0.349    0.350
##    .TrustPolic_std    0.517    0.040   13.019    0.000    0.517    0.519
## 
## R-Square:
##                    Estimate
##     HarmfulPlc_std    0.650
##     TrustPolic_std    0.481
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     Ind_Eff_D1       -1.306    0.139   -9.403    0.000   -1.306   -0.567
##     Ind_Eff_D2       -0.119    0.065   -1.823    0.068   -0.119   -0.050
##     Ind_Eff_D3       -1.016    0.115   -8.858    0.000   -1.016   -0.448
#Serial mediation
model <- '
    # Direct effects
    HarmfulPolice_std ~ a1*condD1 + a2*condD2 + a3*condD3
    MoralPolice_std ~ b1*HarmfulPolice_std + d1*condD1 + d2*condD2 + d3*condD3
    TrustPolice_std ~ c1*MoralPolice_std + e1*HarmfulPolice_std + f1*condD1 + f2*condD2 + f3*condD3

    # Indirect effects
    Ind_Eff_D1 := b1*a1
    Ind_Eff_D2 := b1*a2
    Ind_Eff_D3 := b1*a3
    Ind_Eff_D1_Serial := c1*b1*a1
    Ind_Eff_D2_Serial := c1*b1*a2
    Ind_Eff_D3_Serial := c1*b1*a3
'

fit <- sem(model, data=S5)
summary(fit, standardized=TRUE, fit.measures=TRUE, rsq=TRUE)
## lavaan 0.6.17 ended normally after 1 iteration
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        15
## 
##   Number of observations                           339
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Model Test Baseline Model:
## 
##   Test statistic                              1098.572
##   Degrees of freedom                                12
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    1.000
##   Tucker-Lewis Index (TLI)                       1.000
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)               -892.272
##   Loglikelihood unrestricted model (H1)       -892.272
##                                                       
##   Akaike (AIC)                                1814.545
##   Bayesian (BIC)                              1871.935
##   Sample-size adjusted Bayesian (SABIC)       1824.352
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.000
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.000
##   P-value H_0: RMSEA <= 0.050                       NA
##   P-value H_0: RMSEA >= 0.080                       NA
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.000
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Regressions:
##                       Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   HarmfulPolice_std ~                                                      
##     condD1    (a1)       1.872    0.090   20.712    0.000    1.872    0.813
##     condD2    (a2)       0.170    0.092    1.850    0.064    0.170    0.072
##     condD3    (a3)       1.456    0.089   16.297    0.000    1.456    0.642
##   MoralPolice_std ~                                                        
##     HrmflPlc_ (b1)      -0.687    0.047  -14.521    0.000   -0.687   -0.687
##     condD1    (d1)      -0.574    0.119   -4.844    0.000   -0.574   -0.249
##     condD2    (d2)      -0.230    0.081   -2.848    0.004   -0.230   -0.097
##     condD3    (d3)      -0.369    0.104   -3.550    0.000   -0.369   -0.163
##   TrustPolice_std ~                                                        
##     MrlPlc_st (c1)       0.610    0.068    8.950    0.000    0.610    0.610
##     HrmflPlc_ (e1)      -0.278    0.076   -3.670    0.000   -0.278   -0.278
##     condD1    (f1)       0.283    0.154    1.836    0.066    0.283    0.123
##     condD2    (f2)       0.148    0.103    1.447    0.148    0.148    0.063
##     condD3    (f3)       0.423    0.133    3.176    0.001    0.423    0.186
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .HarmfulPlc_std    0.349    0.027   13.019    0.000    0.349    0.350
##    .MoralPolic_std    0.265    0.020   13.019    0.000    0.265    0.266
##    .TrustPolic_std    0.419    0.032   13.019    0.000    0.419    0.420
## 
## R-Square:
##                    Estimate
##     HarmfulPlc_std    0.650
##     MoralPolic_std    0.734
##     TrustPolic_std    0.580
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     Ind_Eff_D1       -1.287    0.108  -11.890    0.000   -1.287   -0.559
##     Ind_Eff_D2       -0.117    0.064   -1.836    0.066   -0.117   -0.050
##     Ind_Eff_D3       -1.001    0.092  -10.842    0.000   -1.001   -0.441
##     Ind_Eff_D1_Srl   -0.786    0.110   -7.151    0.000   -0.786   -0.341
##     Ind_Eff_D2_Srl   -0.072    0.040   -1.798    0.072   -0.072   -0.030
##     Ind_Eff_D3_Srl   -0.611    0.089   -6.902    0.000   -0.611   -0.269