This is an R Markdown Notebook. When you execute code within the notebook, the results appear beneath the code.

Try executing this chunk by clicking the Run button within the chunk or by placing your cursor inside it and pressing Cmd+Shift+Enter.

1.Read the cleaned data

protest <- read.csv("/Users/huyuhan/Desktop/protest.csv")

Robustness Test3: run analysis with protest events confirmed by additional news sources

#Step 1: Subset data set for confirmed protest events 
confimed_source <- subset(protest, protest$confirmed_source==1)

#Step 2: Run Poisson Regression
library(MASS)
modelPoisson_confimed_source <- glm(toleration_duration ~  livelihood + viodis_tactic_not_after + central_target+ logsize + peasant + ethnic + urban  + organizational_linkage+ Log_public_expense + factor(province) + factor(year), family = poisson, data = confimed_source)
summary(modelPoisson_confimed_source)

Call:
glm(formula = toleration_duration ~ livelihood + viodis_tactic_not_after + 
    central_target + logsize + peasant + ethnic + urban + organizational_linkage + 
    Log_public_expense + factor(province) + factor(year), family = poisson, 
    data = confimed_source)

Coefficients:
                                Estimate Std. Error z value Pr(>|z|)    
(Intercept)                    -21.75446    3.39521  -6.407 1.48e-10 ***
livelihood                       1.35574    0.06927  19.573  < 2e-16 ***
viodis_tactic_not_after         -0.65203    0.05063 -12.877  < 2e-16 ***
central_target                  -0.46557    0.21413  -2.174 0.029683 *  
logsize                          0.08183    0.03575   2.289 0.022090 *  
peasant                          0.52050    0.06334   8.217  < 2e-16 ***
ethnic                          -1.75978    0.40579  -4.337 1.45e-05 ***
urban                           -0.13142    0.07040  -1.867 0.061915 .  
organizational_linkage          -0.40139    0.08640  -4.645 3.39e-06 ***
Log_public_expense               3.83663    0.61944   6.194 5.88e-10 ***
factor(province)Beijing         -5.60966    1.00272  -5.594 2.21e-08 ***
factor(province)Chongqing       -2.45561    0.51424  -4.775 1.79e-06 ***
factor(province)Fujian          -2.02802    0.43592  -4.652 3.28e-06 ***
factor(province)Gansu           -0.86626    0.42239  -2.051 0.040281 *  
factor(province)Guangdong       -2.14779    0.54605  -3.933 8.38e-05 ***
factor(province)Guangxi         -0.96535    0.34858  -2.769 0.005617 ** 
factor(province)Guizhou         -1.92027    0.49725  -3.862 0.000113 ***
factor(province)Hainan          -3.30978    0.66638  -4.967 6.81e-07 ***
factor(province)Hebei            0.02696    0.30182   0.089 0.928815    
factor(province)Heilongjiang    -2.11114    0.45115  -4.679 2.88e-06 ***
factor(province)Henan            1.04217    0.27612   3.774 0.000160 ***
factor(province)Hubei           -1.00115    0.36524  -2.741 0.006123 ** 
factor(province)Hunan           -0.50015    0.30979  -1.614 0.106423    
factor(province)Inner Mongolia  -3.73296    0.62972  -5.928 3.07e-09 ***
factor(province)Jiangsu         -2.40345    0.49460  -4.859 1.18e-06 ***
factor(province)Jiangxi         -0.64480    0.35136  -1.835 0.066483 .  
factor(province)Jilin           -2.49522    0.62304  -4.005 6.20e-05 ***
factor(province)Liaoning        -2.48622    0.57656  -4.312 1.62e-05 ***
factor(province)Ningxia        -16.63218  284.65972  -0.058 0.953407    
factor(province)Qinghai         -3.64825    0.84295  -4.328 1.51e-05 ***
factor(province)Shaanxi         -0.91488    0.36640  -2.497 0.012528 *  
factor(province)Shandong         0.29246    0.31738   0.921 0.356790    
factor(province)Shanghai        -4.22950    0.83342  -5.075 3.88e-07 ***
factor(province)Shanxi          -1.34362    0.43784  -3.069 0.002149 ** 
factor(province)Sichuan         -0.75958    0.33164  -2.290 0.022000 *  
factor(province)Tianjin         -2.64845    0.78870  -3.358 0.000785 ***
factor(province)Tibet           -7.72300    1.43652  -5.376 7.61e-08 ***
factor(province)Xinjiang        -2.65811    0.83072  -3.200 0.001375 ** 
factor(province)Yunnan          -1.42251    0.42140  -3.376 0.000736 ***
factor(province)Zhejiang        -2.94761    0.56347  -5.231 1.68e-07 ***
factor(year)2012                -0.75639    0.09434  -8.018 1.08e-15 ***
factor(year)2013                -0.86822    0.12788  -6.789 1.13e-11 ***
factor(year)2014                -1.34626    0.15202  -8.856  < 2e-16 ***
factor(year)2015                -1.72660    0.22271  -7.753 9.00e-15 ***
factor(year)2016                -1.32017    0.33904  -3.894 9.87e-05 ***
factor(year)2017                -1.69708    0.40795  -4.160 3.18e-05 ***
factor(year)2018                -3.34854    0.50135  -6.679 2.41e-11 ***
factor(year)2019                -3.93430    0.55752  -7.057 1.70e-12 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 5695.9  on 1331  degrees of freedom
Residual deviance: 3859.3  on 1284  degrees of freedom
  (89 observations deleted due to missingness)
AIC: 5908.4

Number of Fisher Scoring iterations: 10
#Step 3: Cluster Standard Errors by province and year 
#However the coefficient and standard error for organizational_linkage vairable is NA
library(multiwayvcov)
library(lmtest)
#m1.vcovCL_confimed_source <- cluster.vcov(model = modelPossion_confimed_source, cluster = confimed_source[c("year", "province")])
m1.vcovCL_confimed_source <- cluster.vcov(model = modelPoisson_confimed_source, cluster = confimed_source[c("province", "year")])
coeftest(modelPoisson_confimed_source, m1.vcovCL_confimed_source)
Warning: NaNs produced

z test of coefficients:

                                 Estimate Std. Error z value  Pr(>|z|)    
(Intercept)                    -21.754458  13.077346 -1.6635 0.0962079 .  
livelihood                       1.355743   0.167966  8.0715 6.941e-16 ***
viodis_tactic_not_after         -0.652031   0.069757 -9.3472 < 2.2e-16 ***
central_target                  -0.465574   0.447322 -1.0408 0.2979670    
logsize                          0.081827   0.144895  0.5647 0.5722531    
peasant                          0.520500   0.256360  2.0303 0.0423210 *  
ethnic                          -1.759780   0.511090 -3.4432 0.0005749 ***
urban                           -0.131422   0.323947 -0.4057 0.6849700    
organizational_linkage          -0.401386        NaN     NaN       NaN    
Log_public_expense               3.836626   2.382131  1.6106 0.1072701    
factor(province)Beijing         -5.609655   3.812301 -1.4715 0.1411663    
factor(province)Chongqing       -2.455612   1.578024 -1.5561 0.1196770    
factor(province)Fujian          -2.028017   1.147188 -1.7678 0.0770917 .  
factor(province)Gansu           -0.866256   0.801583 -1.0807 0.2798390    
factor(province)Guangdong       -2.147792   1.700538 -1.2630 0.2065865    
factor(province)Guangxi         -0.965354   0.794636 -1.2148 0.2244280    
factor(province)Guizhou         -1.920274   1.219772 -1.5743 0.1154205    
factor(province)Hainan          -3.309778   2.103790 -1.5732 0.1156619    
factor(province)Hebei            0.026964   0.405073  0.0666 0.9469282    
factor(province)Heilongjiang    -2.111145   1.018136 -2.0735 0.0381222 *  
factor(province)Henan            1.042169   0.356566  2.9228 0.0034690 ** 
factor(province)Hubei           -1.001154   0.797598 -1.2552 0.2094021    
factor(province)Hunan           -0.500149   0.599893 -0.8337 0.4044328    
factor(province)Inner Mongolia  -3.732957   2.183931 -1.7093 0.0873985 .  
factor(province)Jiangsu         -2.403455   1.543125 -1.5575 0.1193461    
factor(province)Jiangxi         -0.644804   0.592520 -1.0882 0.2764892    
factor(province)Jilin           -2.495221   1.603138 -1.5565 0.1195987    
factor(province)Liaoning        -2.486216   1.355360 -1.8344 0.0666008 .  
factor(province)Ningxia        -16.632178   2.568938 -6.4743 9.523e-11 ***
factor(province)Qinghai         -3.648250   2.650220 -1.3766 0.1686409    
factor(province)Shaanxi         -0.914879   0.848217 -1.0786 0.2807706    
factor(province)Shandong         0.292464   0.370318  0.7898 0.4296656    
factor(province)Shanghai        -4.229499   2.997985 -1.4108 0.1583093    
factor(province)Shanxi          -1.343624   0.916409 -1.4662 0.1425981    
factor(province)Sichuan         -0.759577   0.641108 -1.1848 0.2361008    
factor(province)Tianjin         -2.648446   2.741844 -0.9659 0.3340763    
factor(province)Tibet           -7.722995   4.900325 -1.5760 0.1150219    
factor(province)Xinjiang        -2.658114   2.737749 -0.9709 0.3315921    
factor(province)Yunnan          -1.422514   0.998028 -1.4253 0.1540636    
factor(province)Zhejiang        -2.947607   1.819737 -1.6198 0.1052756    
factor(year)2012                -0.756393   0.374829 -2.0180 0.0435945 *  
factor(year)2013                -0.868222   0.357487 -2.4287 0.0151537 *  
factor(year)2014                -1.346264   0.507666 -2.6519 0.0080048 ** 
factor(year)2015                -1.726601   0.798362 -2.1627 0.0305660 *  
factor(year)2016                -1.320175   1.169154 -1.1292 0.2588259    
factor(year)2017                -1.697079   1.291891 -1.3136 0.1889676    
factor(year)2018                -3.348536   1.948943 -1.7181 0.0857731 .  
factor(year)2019                -3.934303   2.058134 -1.9116 0.0559291 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
#Step 4: I suspect that there is a lack of variation for "organizational_linkage" variable. So I filter for rows where organizational_linkage is 1, then count occurrences by province and year

library(dplyr)
count_organizational_linkage <- confimed_source %>%
  filter(organizational_linkage == 1) %>%
  group_by(province, year) %>%
  summarise(count = n(), .groups = 'drop')

# View the results
print(count_organizational_linkage)
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVGhpcyBpcyBhbiBbUiBNYXJrZG93bl0oaHR0cDovL3JtYXJrZG93bi5yc3R1ZGlvLmNvbSkgTm90ZWJvb2suIFdoZW4geW91IGV4ZWN1dGUgY29kZSB3aXRoaW4gdGhlIG5vdGVib29rLCB0aGUgcmVzdWx0cyBhcHBlYXIgYmVuZWF0aCB0aGUgY29kZS4gCgpUcnkgZXhlY3V0aW5nIHRoaXMgY2h1bmsgYnkgY2xpY2tpbmcgdGhlICpSdW4qIGJ1dHRvbiB3aXRoaW4gdGhlIGNodW5rIG9yIGJ5IHBsYWNpbmcgeW91ciBjdXJzb3IgaW5zaWRlIGl0IGFuZCBwcmVzc2luZyAqQ21kK1NoaWZ0K0VudGVyKi4gCgoqKjEuUmVhZCB0aGUgY2xlYW5lZCBkYXRhKiogCmBgYHtyfQpwcm90ZXN0IDwtIHJlYWQuY3N2KCIvVXNlcnMvaHV5dWhhbi9EZXNrdG9wL3Byb3Rlc3QuY3N2IikKYGBgCgoqKlJvYnVzdG5lc3MgVGVzdDM6IHJ1biBhbmFseXNpcyB3aXRoIHByb3Rlc3QgZXZlbnRzIGNvbmZpcm1lZCBieSBhZGRpdGlvbmFsIG5ld3Mgc291cmNlcyoqIApgYGB7cn0KI1N0ZXAgMTogU3Vic2V0IGRhdGEgc2V0IGZvciBjb25maXJtZWQgcHJvdGVzdCBldmVudHMgCmNvbmZpbWVkX3NvdXJjZSA8LSBzdWJzZXQocHJvdGVzdCwgcHJvdGVzdCRjb25maXJtZWRfc291cmNlPT0xKQoKI1N0ZXAgMjogUnVuIFBvaXNzb24gUmVncmVzc2lvbgpsaWJyYXJ5KE1BU1MpCm1vZGVsUG9pc3Nvbl9jb25maW1lZF9zb3VyY2UgPC0gZ2xtKHRvbGVyYXRpb25fZHVyYXRpb24gfiAgbGl2ZWxpaG9vZCArIHZpb2Rpc190YWN0aWNfbm90X2FmdGVyICsgY2VudHJhbF90YXJnZXQrIGxvZ3NpemUgKyBwZWFzYW50ICsgZXRobmljICsgdXJiYW4gICsgb3JnYW5pemF0aW9uYWxfbGlua2FnZSsgTG9nX3B1YmxpY19leHBlbnNlICsgZmFjdG9yKHByb3ZpbmNlKSArIGZhY3Rvcih5ZWFyKSwgZmFtaWx5ID0gcG9pc3NvbiwgZGF0YSA9IGNvbmZpbWVkX3NvdXJjZSkKc3VtbWFyeShtb2RlbFBvaXNzb25fY29uZmltZWRfc291cmNlKQoKCiNTdGVwIDM6IENsdXN0ZXIgU3RhbmRhcmQgRXJyb3JzIGJ5IHByb3ZpbmNlIGFuZCB5ZWFyIAojSG93ZXZlciB0aGUgY29lZmZpY2llbnQgYW5kIHN0YW5kYXJkIGVycm9yIGZvciBvcmdhbml6YXRpb25hbF9saW5rYWdlIHZhaXJhYmxlIGlzIE5BCmxpYnJhcnkobXVsdGl3YXl2Y292KQpsaWJyYXJ5KGxtdGVzdCkKI20xLnZjb3ZDTF9jb25maW1lZF9zb3VyY2UgPC0gY2x1c3Rlci52Y292KG1vZGVsID0gbW9kZWxQb3NzaW9uX2NvbmZpbWVkX3NvdXJjZSwgY2x1c3RlciA9IGNvbmZpbWVkX3NvdXJjZVtjKCJ5ZWFyIiwgInByb3ZpbmNlIildKQptMS52Y292Q0xfY29uZmltZWRfc291cmNlIDwtIGNsdXN0ZXIudmNvdihtb2RlbCA9IG1vZGVsUG9pc3Nvbl9jb25maW1lZF9zb3VyY2UsIGNsdXN0ZXIgPSBjb25maW1lZF9zb3VyY2VbYygicHJvdmluY2UiLCAieWVhciIpXSkKY29lZnRlc3QobW9kZWxQb2lzc29uX2NvbmZpbWVkX3NvdXJjZSwgbTEudmNvdkNMX2NvbmZpbWVkX3NvdXJjZSkKCgoKI1N0ZXAgNDogSSBzdXNwZWN0IHRoYXQgdGhlcmUgaXMgYSBsYWNrIG9mIHZhcmlhdGlvbiBmb3IgIm9yZ2FuaXphdGlvbmFsX2xpbmthZ2UiIHZhcmlhYmxlLiBTbyBJIGZpbHRlciBmb3Igcm93cyB3aGVyZSBvcmdhbml6YXRpb25hbF9saW5rYWdlIGlzIDEsIHRoZW4gY291bnQgb2NjdXJyZW5jZXMgYnkgcHJvdmluY2UgYW5kIHllYXIKCmxpYnJhcnkoZHBseXIpCmNvdW50X29yZ2FuaXphdGlvbmFsX2xpbmthZ2UgPC0gY29uZmltZWRfc291cmNlICU+JQogIGZpbHRlcihvcmdhbml6YXRpb25hbF9saW5rYWdlID09IDEpICU+JQogIGdyb3VwX2J5KHByb3ZpbmNlLCB5ZWFyKSAlPiUKICBzdW1tYXJpc2UoY291bnQgPSBuKCksIC5ncm91cHMgPSAnZHJvcCcpCgojIFZpZXcgdGhlIHJlc3VsdHMKcHJpbnQoY291bnRfb3JnYW5pemF0aW9uYWxfbGlua2FnZSkKYGBgCg==