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)