Descriptives

Mean Mental Health Days by Race (Unweighted)
Race_Label Mean_Poor_Menthlth_Days Mean_Any_Bad_Menthlth_Days Mean_Frequent_Bad_Menthlth_Days
Latino 3.829876 0.3219597 0.1226691
White 3.381298 0.3147087 0.1042163
Mean Mental Health Days by Race (Weighted)
Race_Label Mean_Poor_Menthlth_Days Mean_Any_Bad_Menthlth_Days Mean_Frequent_Bad_Menthlth_Days
Latino 3.694928 0.3301296 0.1166011
White 3.931572 0.3586166 0.1221424

Lagged Time Series Analysis

In this section, I test three sets models.

Measures:

  1. Rolling average standard deviation. How far from the mean is this month?

Models:

  1. White

  2. Latino

  3. Race interaction

Controls:

  1. age

  2. education

  3. gender

  4. state

  5. month

White Models

Rolling average sd

Regression results examining rolling average standard deviation and mental health - White
term estimate std.error statistic p.value
(Intercept) 4.017 0.098 41.054 0.000
X_age_g -0.636 0.003 -190.302 0.000
X_educag -0.960 0.006 -170.114 0.000
female 1.480 0.011 130.927 0.000
IMONTH2 0.024 0.029 0.814 0.415
IMONTH3 0.103 0.029 3.527 0.000
IMONTH4 0.162 0.030 5.402 0.000
IMONTH5 0.379 0.030 12.843 0.000
IMONTH6 0.271 0.029 9.352 0.000
IMONTH7 0.147 0.029 5.033 0.000
IMONTH8 0.272 0.029 9.289 0.000
IMONTH9 0.331 0.030 11.080 0.000
IMONTH10 0.208 0.030 7.009 0.000
IMONTH11 0.142 0.030 4.767 0.000
IMONTH12 0.216 0.030 7.158 0.000
rolling_sd_HS90 3.095 0.069 44.637 0.000

This model suggests that an increase in one standard deviation of hate speech is associated with 3.095 days increased bad mental health for whites.

Latinx Model

Rolling average sd

Regression results examining rolling average standard deviation and mental health - Latino
term estimate std.error statistic p.value
(Intercept) 1.522 0.316 4.811 0.000
X_age_g -0.162 0.012 -13.567 0.000
X_educag -0.016 0.016 -1.009 0.313
female 0.886 0.036 24.295 0.000
IMONTH2 0.446 0.100 4.470 0.000
IMONTH3 0.313 0.097 3.242 0.001
IMONTH4 0.277 0.099 2.794 0.005
IMONTH5 0.186 0.098 1.901 0.057
IMONTH6 0.164 0.093 1.757 0.079
IMONTH7 0.161 0.096 1.670 0.095
IMONTH8 0.267 0.097 2.762 0.006
IMONTH9 0.450 0.095 4.741 0.000
IMONTH10 0.203 0.094 2.152 0.031
IMONTH11 0.195 0.096 2.035 0.042
IMONTH12 0.275 0.097 2.841 0.004
rolling_sd_HS90 1.463 0.225 6.515 0.000

A one standard deviation increase in hate speech is associated with a 1.5 day increase in bad mental health days for the Latinx population.

Interaction Model

Rolling average standard deviations from the mean

Regression results examining rolling average standard deviation and mental health - Interaction
term estimate std.error statistic p.value
(Intercept) 3.177 0.103 30.839 0
X_age_g -0.562 0.003 -172.855 0
X_educag -0.730 0.005 -140.390 0
female 1.353 0.011 125.250 0
IMONTH2 0.105 0.028 3.716 0
IMONTH3 0.142 0.028 5.084 0
IMONTH4 0.190 0.029 6.617 0
IMONTH5 0.351 0.028 12.394 0
IMONTH6 0.251 0.028 9.075 0
IMONTH7 0.151 0.028 5.410 0
IMONTH8 0.267 0.028 9.481 0
IMONTH9 0.353 0.028 12.432 0
IMONTH10 0.202 0.028 7.159 0
IMONTH11 0.147 0.028 5.169 0
IMONTH12 0.219 0.029 7.621 0
X_race8 0.844 0.220 3.835 0
rolling_sd_HS90 3.055 0.073 41.589 0
X_race8:rolling_sd_HS90 -1.531 0.161 -9.514 0

A one unit increase in the standard deviation is associated with 3.055 increased bad mental health days for Whites and 1.524 for Latinos.

Changepoint Creation and Validation

## 
## INFO: To supress printing the parameers in beast(),      set print.options = 0 
## INFO: To supress printing the parameers in beast.irreg(),set print.options = 0 
## INFO: To supress printing the parameers in beast123(),   set extra$printOptions = 0  
## INFO: To supress warning messages in beast(),            set quiet = 1 
## INFO: To supress warning messages in beast.irreg(),      set quiet = 1 
## INFO: To supress warning messages in beast123(),         set extra$quiet = 1  
## 
## #--------------------------------------------------#
## #       Brief summary of Input Data                #
## #--------------------------------------------------#
## Data Dimension: One signal of length 75
## IsOrdered     : Yes, ordered in time
## IsRegular     : Yes, evenly spaced at interval of  1 (unknown unit)
## hasSeasonCmpnt: FALSE | no periodic or seasonal component. The model Y=Trend+Error is fitted.
## HasOutlierCmpt: FALSE | If true, Y=Trend+Outlier+Error (experimental) is fitted instead of Y=Trend+Error 
## Detrend       : FALSE | If true, remove a global trend component before running BEAST & add it back after BEAST
## MissingValue  : NaN  flagged as missing values 
## MaxMissingRate: if more than 75% of data is missing, BEAST will skip it.
## 
## 
## #--------------------------------------------------#
## #      OPTIONS used in the MCMC inference          #
## #--------------------------------------------------#
## 
## #......Start of displaying 'MetaData' ......
## metadata                = list()     # metadata is used to interpret the input data Y
## metadata$season         = 'none'     # trend-only data with no periodic variation
## metadata$startTime      = 1          # unknown unit
## metadata$deltaTime      = 1          # unknown unit
## metadata$maxMissingRate = 0.75       # if more than 75% of data is missing, BEAST will skip it.
## metadata$detrend        = FALSE      # if true,remove a global trend  cmpnt before running BEAST & add it back later
## #........End of displaying MetaData ........
## 
## #......Start of displaying 'prior' ......
## prior                   = list()     # prior is the true model parameters of BEAST
## prior$trendMinOrder     = 0          # torder.minmax[1]: min trend polynomial order alllowed
## prior$trendMaxOrder     = 1          # torder.minmax[2]: max trend polynomial order alllowed
## prior$trendMinKnotNum   = 0          # tcp.minmax[1]   : min num of chngpts in trend allowed
## prior$trendMaxKnotNum   = 10         # tcp.minmax[2]   : max num of chngpts in trend allowed
## prior$trendMinSepDist   = 3          # tseg.min        : min trend segment length in terms of datapoints
## prior$trendLeftMargin   = 3          # tseg.leftmargin : no trend chngpts in the first 3 datapoints
## prior$trendRightMargin  = 3          # tseg.rightmargin: no trend chngpts in the last 3 datapoints
## prior$K_MAX             = 22         # max number of terms in general linear model (relevant only at small values)
## prior$precValue         = 1.5        # useful mainly when precPriorType='constant'
## prior$modelPriorType    = 1         
## prior$precPriorType     = 'uniform'
## #......End of displaying prior ......
## 
## #......Start of displaying 'mcmc' ......
## mcmc                           = list()     # mcmc is not BEAST parameters but MCMC sampler options
## mcmc$seed                      = 0          # A nonzero seed to replicate among runs
## mcmc$samples                   = 8000       # Number of samples saved per chain: the larger, the better
## mcmc$thinningFactor            = 5          # Thinning the chain: the larger, the better 
## mcmc$burnin                    = 200        # Number of initial samples discarded: the larger, the better
## mcmc$chainNumber               = 3          # Number of chains: the larger, the better
## mcmc$maxMoveStepSize           = 4          # Max step of jumping from current changepoint: No need to change
## mcmc$trendResamplingOrderProb  = 0.1        # Proposal probability of sampling trend polynominal order 
## mcmc$credIntervalAlphaLevel    = 0.95       # The alphal level for Credible Intervals
## # Total number of models randomly visited in BEAST is (burnin+sampples*thinFactor)*chainNumber=120600
## #......End of displaying mcmc ......
## 
## #......Start of displaying 'extra' ......
## extra                      = list() # extra is used to configure output/computing options
## extra$dumpInputData        = TRUE  # if true, dump a copy of the input data as o$data 
## extra$whichOutputDimIsTime = 1     # 1,2 or 3; which dim of the result is time; used for a 2D/3D input Y
## extra$computeCredible      = FALSE # if true, compute  credibiel interval of estimated Y (e.g., o$trend$CI)
## extra$fastCIComputation    = TRUE  # if true, do not sort but approximiate CI 
## extra$computeTrendOrder    = TRUE  # if true, dump the estimated trend polynomial order 
## extra$computeTrendChngpt   = TRUE  # if true, dump the trend changepoints (tcp) in the output 
## extra$computeTrendSlope    = TRUE  # if true, dump the time-varying slope in trend
## extra$tallyPosNegTrendJump = TRUE  # differentiate postive/negative jumps at tcp
## extra$tallyIncDecTrendJump = TRUE  # differentiate increased/decreased slopes at tcp
## extra$printProgressBar     = TRUE  # if true, show an ascii progressbar
## extra$printOptions         = TRUE  # if true, print the option of the BEAST run
## extra$consoleWidth         = 80    # an integer specifying the console width for printing
## extra$numThreadsPerCPU     = 2     # each cpu core spawns 2 concurrent threads (for beast123())
## extra$numParThreads        = 0     # total number of threads (for beast123() only)
## #......End of displaying extra ......
## 
## -Progress:  0.0% done[>********************************************************]\Progress:  4.2% done[==>******************************************************]|Progress:  8.3% done[=====>***************************************************]/Progress: 12.5% done[=======>*************************************************]-Progress: 16.7% done[==========>**********************************************]\Progress: 20.8% done[============>********************************************]|Progress: 25.0% done[==============>******************************************]/Progress: 29.2% done[=================>***************************************]-Progress: 33.3% done[===================>*************************************]\Progress: 37.5% done[=====================>***********************************]|Progress: 41.7% done[========================>********************************]/Progress: 45.8% done[==========================>******************************]-Progress: 50.0% done[=============================>***************************]\Progress: 54.2% done[===============================>*************************]|Progress: 58.3% done[=================================>***********************]/Progress: 62.5% done[====================================>********************]-Progress: 66.7% done[======================================>******************]\Progress: 70.8% done[========================================>****************]|Progress: 75.0% done[===========================================>*************]/Progress: 79.2% done[=============================================>***********]-Progress: 83.3% done[================================================>********]\Progress: 87.5% done[==================================================>******]|Progress: 91.7% done[====================================================>****]/Progress: 95.8% done[=======================================================>*]-Progress:100.0% done[=========================================================]

## #####################################################################
## #                      Seasonal  Changepoints                       #
## #####################################################################
##  No seasonal/periodic component present (i.e., season='none')
## 
## 
## #####################################################################
## #                      Trend  Changepoints                          #
## #####################################################################
## .-------------------------------------------------------------------.
## | Ascii plot of probability distribution for number of chgpts (ncp) |
## .-------------------------------------------------------------------.
## |Pr(ncp = 0 )=0.000|*                                               |
## |Pr(ncp = 1 )=0.000|*                                               |
## |Pr(ncp = 2 )=0.095|***************                                 |
## |Pr(ncp = 3 )=0.252|****************************************        |
## |Pr(ncp = 4 )=0.301|*********************************************** |
## |Pr(ncp = 5 )=0.211|*********************************               |
## |Pr(ncp = 6 )=0.096|***************                                 |
## |Pr(ncp = 7 )=0.032|*****                                           |
## |Pr(ncp = 8 )=0.009|**                                              |
## |Pr(ncp = 9 )=0.002|*                                               |
## |Pr(ncp = 10)=0.000|*                                               |
## .-------------------------------------------------------------------.
## |    Summary for number of Trend ChangePoints (tcp)                 |
## .-------------------------------------------------------------------.
## |ncp_max    = 10   | MaxTrendKnotNum: A parameter you set           |
## |ncp_mode   = 4    | Pr(ncp= 4)=0.30: There is a 30.1% probability  |
## |                  | that the trend component has  4 changepoint(s).|
## |ncp_mean   = 4.11 | Sum{ncp*Pr(ncp)} for ncp = 0,...,10            |
## |ncp_pct10  = 3.00 | 10% percentile for number of changepoints      |
## |ncp_median = 4.00 | 50% percentile: Median number of changepoints  |
## |ncp_pct90  = 6.00 | 90% percentile for number of changepoints      |
## .-------------------------------------------------------------------.
## | List of probable trend changepoints ranked by probability of      |
## | occurrence: Please combine the ncp reported above to determine    |
## | which changepoints below are  practically meaningful              |
## '-------------------------------------------------------------------'
## |tcp#              |time (cp)                  |prob(cpPr)          |
## |------------------|---------------------------|--------------------|
## |1                 |50.000000                  |0.99692             |
## |2                 |71.000000                  |0.94792             |
## |3                 |60.000000                  |0.88804             |
## |4                 |65.000000                  |0.45213             |
## |5                 |41.000000                  |0.18483             |
## |6                 |56.000000                  |0.15646             |
## |7                 |7.000000                   |0.09446             |
## |8                 |13.000000                  |0.03933             |
## |9                 |29.000000                  |0.03196             |
## |10                |22.000000                  |0.02767             |
## .-------------------------------------------------------------------.
## 
## 
## 
## NOTE: the beast output object 'o' is a LIST. Type 'str(o)' to see all 
## the elements in it. Or use 'plot(o)' or 'plot(o,interactive=TRUE)' to 
## plot the model output.

Monthly changepoints are all post Trump presidency and related to political events. Final decrease of hate speech takes place after impeachment inquiry begins for Trump.

[1] “2018-01-01” - Federal government shut down threatened if border wall is not funded. https://en.wikipedia.org/wiki/Category:January_2018_events_in_the_United_States

[2] “2018-11-01” - Midterm election. https://en.wikipedia.org/wiki/Category:November_2018_events_in_the_United_States

[3] “2019-03-01” - Trump speech at 2019 Conservative Political Action Conference. https://en.wikipedia.org/wiki/Timeline_of_the_Donald_Trump_presidency_(2019_Q1)

[4] “2019-09-01” - Impeachment inquiry into Donald Trump. https://en.wikipedia.org/wiki/Category:September_2019_events_in_the_United_States

Difference-in-Differences Tests - one changepoint

90 Days Pre- and Post-

Difference-in-differences for days bad mental health - 90 days pre and post changepoint
term estimate std.error statistic p.value
(Intercept) 7.807 0.080 97.838 0.000
X_age_g -0.585 0.012 -50.800 0.000
X_educag -0.766 0.019 -40.281 0.000
female 1.479 0.038 38.786 0.000
treatment -1.580 0.067 -23.630 0.000
post -0.189 0.043 -4.431 0.000
interaction 0.276 0.096 2.890 0.004

Treatment (-1.57953): This indicates that Latinos (the “treatment group”) report 1.58 fewer poor mental health days compared to Whites (the “control group”) before January 1, 2018, holding other variables constant.

Post (-0.18872): Individuals in the post-intervention period (after January 1, 2018) report about 0.19 fewer poor mental health days compared to those in the pre-intervention period, holding other variables constant.

Interaction (0.27611): This interaction term captures the additional effect of being both Latino and in the post-intervention period. Specifically, Latinos in the post-intervention period report 0.087 more poor mental health days than what would be expected from the separate effects of being Latino and being in the post-intervention period alone. This suggests that, while Latinos generally report fewer poor mental health days (as seen from the treatment coefficient), their mental health worsens slightly after January 1, 2018, relative to Whites, when considering the interaction. Although it seems like a small effect, the Lancet paper found that police killings of black americans led to an excess of 0.14 bad mental health days aka a relative increase of 3.3%. .087 days increase for Latinos is a 2.36% increase relative to weighted average bad days mental health.

Difference-in-differences for frequent days bad mental health - 90 days pre and post changepoint
term estimate std.error statistic p.value
(Intercept) 0.259 0.003 80.319 0.000
X_age_g -0.018 0.000 -38.422 0.000
female 0.049 0.002 32.041 0.000
X_educag -0.031 0.001 -40.098 0.000
treatment -0.053 0.003 -19.778 0.000
post -0.006 0.002 -3.416 0.001
interaction 0.011 0.004 2.973 0.003

Treatment (-0.0534540): Latinos (the treatment group) report 5.35 percentage points fewer frequent bad mental health days compared to Whites (the control group), before January 1, 2018. This suggests that Latinos tend to have better mental health outcomes than Whites in terms of frequent bad mental health days.

Post (-0.0058823): In the post-intervention period (after January 1, 2018), there is a decrease of 0.59 percentage points in frequent bad mental health days, holding other factors constant. This suggests a small overall improvement in mental health during the post-intervention period.

Interaction (0.0114819): The interaction term indicates that Latinos in the post-intervention period experience an increase of 0.5 (0.11-0.06) percentage points in frequent bad mental health days compared to what would be expected from the additive effects of being Latino and being in the post-intervention period alone. This suggests that although Latinos generally report fewer frequent bad mental health days, this advantage decreases slightly in the post-intervention period compared to Whites.

Difference-in-differences for any days bad mental health - 90 days pre and post changepoint
term estimate std.error statistic p.value
(Intercept) 0.576 0.005 123.670 0.000
X_age_g -0.062 0.001 -92.374 0.000
female 0.115 0.002 51.514 0.000
X_educag -0.008 0.001 -7.108 0.000
treatment -0.091 0.004 -23.335 0.000
post -0.016 0.002 -6.472 0.000
interaction -0.004 0.006 -0.802 0.422

Treatment (-0.0910991): Latinos (treatment group) report 9.11 percentage points fewer bad mental health days compared to Whites (control group), before January 1, 2018. This implies that Latinos tend to report better mental health (in terms of fewer bad mental health days) compared to Whites

Post (-0.0160990): Being in the post-intervention period (after January 1, 2018) is associated with a small decrease of 1.61 percentage points in any bad mental health days, suggesting an improvement in mental health after the intervention.

Interaction (-0.0044754): The interaction term between treatment (Latinos) and post (post-intervention period) is not statistically significant (p-value = 0.422). The estimated coefficient is small and negative (-0.0044754), indicating no meaningful change in the mental health of Latinos relative to Whites in the post-intervention period.

Difference-in-Differences Tests - Multiple Changepoints

Difference-in-differences for days bad mental health - multiple changepoints
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 7.370 0.022 339.995 0.000 7.328 7.413
X_age_g -0.561 0.003 -172.657 0.000 -0.567 -0.554
X_educag -0.730 0.005 -140.324 0.000 -0.740 -0.720
female 1.353 0.011 125.236 0.000 1.331 1.374
treatment -1.176 0.017 -68.165 0.000 -1.210 -1.142
post_1 0.283 0.018 15.844 0.000 0.248 0.318
post_2 0.438 0.027 16.106 0.000 0.384 0.491
post_3 0.697 0.022 32.236 0.000 0.655 0.739
post_4 0.800 0.027 29.218 0.000 0.747 0.854
interaction_1 -0.175 0.039 -4.433 0.000 -0.252 -0.098
interaction_2 0.089 0.061 1.457 0.145 -0.031 0.210
interaction_3 -0.298 0.047 -6.377 0.000 -0.389 -0.206
interaction_4 -0.248 0.060 -4.121 0.000 -0.366 -0.130

In this model we see that in periods 1, 3, and 4 both Whites and Latinos have worse mental health post treatment, but that Whites have a bigger effect. In period 2 we see Latinos have a bigger effect than whites, but still a mental health benefit.

Difference-in-differences for frequent days bad mental health - multiple changepoints
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 0.244 0.001 277.610 0.000 0.243 0.246
X_age_g -0.017 0.000 -128.604 0.000 -0.017 -0.017
X_educag -0.029 0.000 -138.389 0.000 -0.030 -0.029
female 0.044 0.000 100.771 0.000 0.043 0.045
treatment -0.039 0.001 -56.310 0.000 -0.041 -0.038
post_1 0.010 0.001 13.155 0.000 0.008 0.011
post_2 0.016 0.001 14.269 0.000 0.014 0.018
post_3 0.024 0.001 27.669 0.000 0.023 0.026
post_4 0.027 0.001 24.629 0.000 0.025 0.030
interaction_1 -0.005 0.002 -3.357 0.001 -0.009 -0.002
interaction_2 0.003 0.002 1.098 0.272 -0.002 0.008
interaction_3 -0.011 0.002 -5.760 0.000 -0.015 -0.007
interaction_4 -0.009 0.002 -3.878 0.000 -0.014 -0.005

In this model we see that in periods 1, 3, and 4 both Whites and Latinos have worse mental health post treatment, but that Whites have a bigger effect. In period 2 we see Latinos have a bigger effect than whites, but still a mental health benefit.

Difference-in-differences for any days bad mental health - multiple changepoints
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 0.553 0.001 436.019 0.000 0.550 0.555
X_age_g -0.060 0.000 -314.712 0.000 -0.060 -0.059
X_educag -0.010 0.000 -32.245 0.000 -0.010 -0.009
female 0.111 0.001 175.830 0.000 0.110 0.112
treatment -0.070 0.001 -69.254 0.000 -0.072 -0.068
post_1 0.019 0.001 17.955 0.000 0.017 0.021
post_2 0.028 0.002 17.382 0.000 0.025 0.031
post_3 0.048 0.001 38.291 0.000 0.046 0.051
post_4 0.060 0.002 37.284 0.000 0.057 0.063
interaction_1 -0.021 0.002 -8.989 0.000 -0.025 -0.016
interaction_2 -0.007 0.004 -2.047 0.041 -0.014 0.000
interaction_3 -0.036 0.003 -13.096 0.000 -0.041 -0.030
interaction_4 -0.034 0.004 -9.683 0.000 -0.041 -0.027

In period one, White mental health worsens but Latino mental health improves. In periods 2, 3, and 4 both white and latino mental health worsen but the effect is larger for Latinos.