Friday, August 19, 2016

Trump and Breitbart Alliance: A Match Made on Emotion?

For the Trump campaign, this week has been fairly crazy, highlighted by naming the CEO for conservative news organization (Steven Bannon) as the CEO of his campaign. There has been quite a bit of punditry on this subject, but that's not really the place of this blog. I'm focusing on a follow-up to our prior post on Trump's use of disgust to drive engagement, emotional reaction and (ultimately) political support.  First, a summary of earlier findings:

  • Trump not only receives engagement boosts from using disgust based language, but also from using anger, fear, sadness, and trust. He doesn't see boosts from joy, anticipation, or surprise.
  • Neither Hillary Clinton nor Bernie Sanders get a statistically significant boost from using emotional language on Twitter like Trump. Both of these candidates see flat relationships with emotion and engagement. (Full disclosure, the author of this blog sees a positive and significant boost in retweets from using disgust language.)
  • Breitbart news sees a similar boost in engagement (from emotional speech) as Trump. This may go to explain the Trump/Breitbart alliance, they use similar tactics to engage users, AND they use their user bases respond to similar types of language.


(non-nerds can skip)

For this project, I used the same effective code and methodology as my prior post on Trump's use of disgust in tweets.  I made a few improvements (some code at the end of this post).
  • I downloaded the twitter feeds for four internet news sites (Foxnews, CNN, Breitbart, MSNBC), and scored those feeds in the same way I scored candidates in my prior post.  I also followed the same normalization strategy, controlling for incident rate of emotion in the data set, and tendency towards emotional language for each candidate.
  • I created linear models for each candidate/newsagency (entity) by emotion pair (8 entities * 8 emotions = 64 models) with an observation level of "tweet", dependent variable of retweets, and predictor variable of emotion.  This model shows at what rates emotions drive engagement for each entity.
  • I created an output matrix of the emotions, reporting only statistically significant results, for easy comparison of engagement by emotion and entity.


For commentary on the meaning of the charts, please reference the prior post on Trump's use of disgust. The basics are this: we use a sentiment mining algorithm to measure the overall emotion of tweets, and then aggregate the results to each user (candidates and news agencies) and relate that to engagement to determine which emotions drive social engagement results for which groups.

First our emotional term index, which shows that Breitbart is actually the least emotional-sounding news agency, comparing to Foxnews which is most emotional.

Next we summarize the normalized emotional tendencies of each news agency.  Breitbart (of special interest) wins on use of "disgust," MSNBC wins hugely on "surprise", and CNN wins on "trust" emotions.  

That last chart demonstrated an important component related to our prior post: Trump's strategic ally Breitbart news also tends to use a lot of disgust emotional language and signaling in their tweets. But are they as successful in driving engagement by use of disgust as Trump is? Time for a statistical test.

My prior post received quite a bit of traffic, but was a bit intellectually lacking in my opinion. I had demonstrated Trump's relationship with disgust, and his followers reaction to it, but I hadn't looked at two other dimensions:  
  1. Do other candidates get engagement boosts from disgust or other emotions? 
  2. Does Trump get boosts from other emotions outside of disgust?
To test this hypothesis I created 64 linear models which serve as statistical tests to determine the effect of emotional language on engagement measured by retweets (side note: I threw in my own tweets as a comparison). The code for those models are found at the bottom of this post, and the results are in the heatmap directly below.  

The red results above are statistically insignificant, with green results showing statistically significant coefficients (emotions that give candidates a significant boost). The numbers in the chart represent the actual coefficients:
  1. News agencies (except for Breitbart) see very little engagement response to emotions. The relationships we do see for Fox and CNN are related to emotions we may see with breaking news (anticipation, joy, surprise).
  2. Breitbart news sees a stronger relationship with emotional tweets. The strongest engagement-generating emotions for Breitbart are anger, disgust, and sadness.
  3. Sanders and Clinton do not see increases in engagement when they use emotional language.
  4. Trump sees the largest positive relationship with engagement and emotional language, which is strongest on the emotions similar to Breitbart.
  5. Full disclosure: the author of this blog sees positive engagement from disgust tweets too.

An easier visualization of the disgust measure, looking first at candidates, then at news agencies (x axis is a disgust rating, y axis is a retweet count)


A few bullet points in closing:
  • The Breitbart/Trump alignment makes sense both from the way they speak AND from the way their followers engage with their tweets.
  • Other candidates and news agencies see much less engagement from openly emotional tweeting.
  • Trump and Breitbart both get more engagement in their tweets by using anger, fear, disgust, sadness, and trust.

 #Model dimensions  
 o <- c("CNN","BREITBART","FoxNews","MSNBC")  
 e <- c("anger", "anticipation", "disgust","fear", "joy","sadness" ,"surprise" ,"trust")  
 jj <- matrix(nrow = length(o), ncol = length(e))  
 rownames(jj) <- o  
 colnames(jj) <- e  
 rsq <- matrix(nrow = length(o), ncol = length(e))  
 rownames(rsq) <- o  
 colnames(rsq) <- e  
 initial <- ("lm(retweetCount~")  
 for(j in e){  
 for(i in o) {  
 dd <- subset(mydata, user ==i)  
 model <- paste(initial, j,",data=dd)" )   
 temp <- summary(eval(parse(text=model)))  
 jj[[i,j]] <- temp$coefficients[2,1]  
 rsq[[i,j]] <- temp$coefficients[2,4]  
 rsq <- ifelse(rsq <=.050, 1,0)  
 out <- rsq * jj  

1 comment: