Распределение зависимой переменной

## # A tibble: 3 × 3
##   transfer number percent
##   <chr>     <int>   <dbl>
## 1 0            48    60.8
## 2 1            30    38  
## 3 <NA>          1     1.3

Модель 0

НЗП: UR_share_total (общая доля голосов ЕР по результатам выборов в городской совет)

names(grad)
##  [1] "oktmo"             "city"              "transfer"         
##  [4] "year_of_transfer"  "term_of_transfer"  "CPRF"             
##  [7] "Yabloko"           "LDPR"              "UR"               
## [10] "JR"                "Self"              "Others"           
## [13] "CPRF_sum"          "UR_sum"            "LDPR_sum"         
## [16] "JR_sum"            "Year.of.elections" "UR_list_share"    
## [19] "UR_mandate_share"  "UR_share_total"    "budget_all"       
## [22] "ind"               "grat"              "population"       
## [25] "bud_ratio"         "grat_ratio"        "bud_pc_ratio"     
## [28] "dot"               "subv"              "subs"             
## [31] "n_12_16"           "num_part_12_16"    "mean_part_12_16"  
## [34] "momentum"
mod <- glm(factor(transfer) ~ UR_share_total, family = "binomial", data = grad)
tab_model(mod, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 0.18 0.27 0.254
UR share total 5.80 12.07 0.398
Observations 75
R2 Tjur 0.009
plot(ggpredict(mod, terms=c("UR_share_total")))

Модель 1

НЗП: UR_share_total, bud_ratio (бюджетная самостоятельность по Росстату), bud_pc_ratio (бюджет на одного жителя), n_12_16 (среднее количество протестов по град.вопросам в 2012 - 2016 гг.), momentum (средняя интенсивность протестов)

mod1 <- glm(factor(transfer) ~ UR_share_total + bud_ratio + log(bud_pc_ratio) + n_12_16 + momentum, family = "binomial", data = grad)
tab_model(mod1, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 0.04 0.11 0.293
UR share total 6.35 15.80 0.457
bud ratio 29.55 100.66 0.320
bud pc ratio [log] 0.67 0.35 0.451
n 12 16 1.08 0.06 0.116
momentum 0.99 0.00 0.154
Observations 67
R2 Tjur 0.082
plot(ggpredict(mod1, terms=c("UR_share_total")))

plot(ggpredict(mod1, terms=c("bud_ratio")))

plot(ggpredict(mod1, terms=c("bud_pc_ratio")))

plot(ggpredict(mod1, terms=c("n_12_16")))

plot(ggpredict(mod1, terms=c("momentum")))

Модель 2

НЗП: UR_sum (доля мест, полученных ЕР в городском совете)

mod2 <- glm(factor(transfer) ~ UR_sum, family = "binomial", data = grad)
tab_model(mod2, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 0.34 0.49 0.455
UR sum 1.01 0.02 0.661
Observations 77
R2 Tjur 0.002
plot(ggpredict(mod2, terms=c("UR_sum")))

Модель 3

НЗП: UR_sum, bud_ratio (бюджетная самостоятельность по Росстату), bud_pc_ratio (бюджет на одного жителя), n_12_16 (среднее количество протестов по град.вопросам в 2012 - 2016 гг.), momentum (средняя интенсивность протестов)

mod3 <- glm(factor(transfer) ~ UR_sum + bud_ratio + log(bud_pc_ratio) + n_12_16 + momentum, family = "binomial", data = grad)
tab_model(mod3, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 0.10 0.34 0.486
UR sum 1.02 0.02 0.500
bud ratio 13.46 43.07 0.416
bud pc ratio [log] 0.63 0.33 0.373
n 12 16 1.07 0.05 0.165
momentum 0.99 0.00 0.160
Observations 69
R2 Tjur 0.063
plot(ggpredict(mod3, terms=c("UR_sum")))

plot(ggpredict(mod3, terms=c("bud_ratio")))

plot(ggpredict(mod3, terms=c("bud_pc_ratio")))

plot(ggpredict(mod3, terms=c("n_12_16")))

plot(ggpredict(mod3, terms=c("momentum")))

Модель 4

НЗП: UR_share_total, grat_share (доля всех трансфертов с других уровней в бюджете муниципалитета) и bud_pc_ratio

grat_share значим, но в странную сторону: чем выше зависимость города от трансфертов, тем ниже вероятность изъятия полномочий

grad <- grad %>% 
  mutate(grat_share = grat / budget_all)

mod4 <- glm(factor(transfer) ~ UR_share_total + grat_share + log(bud_pc_ratio), family = "binomial", data = grad)
tab_model(mod4, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 3.24 7.17 0.596
UR share total 2.86 7.03 0.669
grat share 0.00 0.00 0.021
bud pc ratio [log] 1.69 1.00 0.376
Observations 70
R2 Tjur 0.099
# Альтернативная визуализация предсказанных вероятностей https://cran.r-project.org/web/packages/jtools/vignettes/effect_plot.html

# .libPaths()

# install.packages("jtools", lib = "C:/Program Files/R/R-4.2.0/library")
library(jtools)

effect_plot(mod4, pred = grat_share, interval = TRUE, plot.points = TRUE)

Модель 5

Значимость grat_share (больше не!) пропадает при добавлении среднего числа протестов и моментума

mod5 <- glm(factor(transfer) ~ UR_share_total + grat_share + log(bud_pc_ratio) + n_12_16 + momentum, family = "binomial", data = grad)
tab_model(mod5, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 3.75 9.68 0.609
UR share total 2.98 7.61 0.668
grat share 0.00 0.00 0.040
bud pc ratio [log] 1.53 0.95 0.492
n 12 16 1.05 0.05 0.301
momentum 1.00 0.00 0.193
Observations 69
R2 Tjur 0.118

Модель 6

заменила долю всех трансфертов в бюджете МО на долю собственных доходов - связь положительная, но незначимая (причем без остальных ковариатов тоже)

grad <- grad %>% 
  mutate(ind_share = ind / budget_all)

mod6 <- glm(factor(transfer) ~ UR_share_total + ind_share + log(bud_pc_ratio) + n_12_16 + momentum, family = "binomial", data = grad)
tab_model(mod6, show.se = TRUE, show.ci = FALSE)
  factor(transfer)
Predictors Odds Ratios std. Error p
(Intercept) 0.06 0.18 0.359
UR share total 6.16 15.18 0.461
ind share 13.02 42.19 0.428
bud pc ratio [log] 0.70 0.36 0.495
n 12 16 1.08 0.06 0.111
momentum 0.99 0.00 0.153
Observations 67
R2 Tjur 0.077
effect_plot(mod6, pred = ind_share, interval = TRUE, plot.points = TRUE)