1 Introduction

This analysis examines trends in political extremism across different populations (waves) using standardized indices that measure cognitive, behavioral, and social dimensions of extremism. We focus on Task 1: Comparing Populations, which includes several subtasks:

1.1 Analysis of Population Absolute Indices
1.2 Analysis of Population Relative Indices
1.3 Integrated Analysis of Absolute and Relative Indices
1.4 Analysis of Population Trends Consistency
1.5 Comparative Analysis of Populations

Our goal is to identify only significant findings related to how extremism patterns change over time or differ between populations.

# Load the data 
dimensions_order <- c("Overall", "Cognitive", "Behavioral", "Social")

# Read the data from indices_table.txt
df <- as.data.frame(readRDS("Israel Survey/data/il_pe.RDS"))

# Remove "Other" gender category (6 respondents) if it exists to prevent regression convergence issues
df <- df %>%
  filter(gender != "Other") %>%
  mutate(gender = droplevels(gender)) # Remove unused factor level 

indices_df <- af_gauge_indices(df, pop_var1 = "Wave")
population_data <- indices_df$indices_table

af_transpose_gt(population_data, rowname_col = "Wave", title = "Population Indices by Wave")
Population Indices by Wave
First Second Third Fifth Sixth Fourth
cnp_p 3.569135 3.357240 3.233646 3.4260493 3.4036386 3.145137
bnp_p 1.107270 1.148522 1.130083 1.1599432 1.1756532 1.132812
snp_p 3.746843 3.718044 3.813293 3.8307571 3.8038585 3.792362
onp_p 3.055247 2.967267 2.959435 3.0418187 3.0241393 2.918742
cep_p 6.108467 5.634817 5.339095 5.6548376 5.6596380 5.294486
bep_p 1.266307 1.368721 1.322944 1.3970749 1.4159644 1.329719
sep_p 5.523014 5.580246 5.727573 5.7253847 5.6768473 5.633153
oep_p 4.535627 4.333364 4.264858 4.3916931 4.5282093 4.372101
cel_p 21.206468 17.921593 20.654628 16.7322835 22.1723519 23.242468
bel_p 36.504975 31.487243 32.279910 30.6430446 32.3159785 28.981349
sel_p 16.417910 17.423771 14.898420 15.4855643 15.7989228 16.499283
oel_p 14.987562 15.930305 13.995485 14.6325459 12.3877917 13.916786
er1_p 57.151741 51.026758 54.740406 51.1154856 56.8222621 54.088953
er2_p 14.490050 13.316739 11.173815 10.8267717 12.5673250 12.769010
er3_p 2.487562 2.489110 1.918736 0.9186352 0.8976661 1.865136
np 1608.000000 1607.000000 886.000000 1524.0000000 1114.0000000 697.000000
nc 0.000000 0.000000 0.000000 0.0000000 0.0000000 0.000000

2 Population Absolute Indices

This section examines the central tendency and distribution of extremism in populations over time, focusing on Normative Points (NP), Extremism Points (EP), and EP/NP ratios.

# Calculate EP/NP ratios
population_data <- population_data %>%
  mutate(
    c_ratio = cep_p / cnp_p,
    b_ratio = bep_p / bnp_p,
    s_ratio = sep_p / snp_p,
    o_ratio = oep_p / onp_p
  )

# Reshape data for plotting
np_data <- population_data %>%
  select(Wave, cnp_p, bnp_p, snp_p, onp_p) %>%
  pivot_longer(cols = -Wave, names_to = "dimension", values_to = "value") %>%
  mutate(type = "Normative Points")

ep_data <- population_data %>%
  select(Wave, cep_p, bep_p, sep_p, oep_p) %>%
  pivot_longer(cols = -Wave, names_to = "dimension", values_to = "value") %>%
  mutate(type = "Extremism Points")

ratio_data <- population_data %>%
  select(Wave, c_ratio, b_ratio, s_ratio, o_ratio) %>%
  pivot_longer(cols = -Wave, names_to = "dimension", values_to = "value") %>%
  mutate(type = "EP/NP Ratio")

# Clean up measure names for better plotting
np_data$dimension <- recode(np_data$dimension,
                          "cnp_p" = "Cognitive",
                          "bnp_p" = "Behavioral",
                          "snp_p" = "Social",
                          "onp_p" = "Overall")

ep_data$dimension <- recode(ep_data$dimension,
                          "cep_p" = "Cognitive",
                          "bep_p" = "Behavioral",
                          "sep_p" = "Social",
                          "oep_p" = "Overall")

ratio_data$dimension <- recode(ratio_data$dimension,
                             "c_ratio" = "Cognitive",
                             "b_ratio" = "Behavioral",
                             "s_ratio" = "Social",
                             "o_ratio" = "Overall")

np_data <- np_data %>% 
  mutate(dimension = factor(dimension, levels = dimensions_order))

ep_data <- ep_data %>% 
  mutate(dimension = factor(dimension, levels = dimensions_order))

ratio_data <- ratio_data %>% 
  mutate(dimension = factor(dimension, levels = dimensions_order))

The analysis of Normative Points (NP) reveals that the social dimension consistently shows higher levels of extremism compared to the cognitive and behavioral dimensions across all waves. This suggests that intolerance toward outgroups is more pronounced than extremist political positions or support for political violence.

The cognitive dimension (extremism of political positions) shows a distinctive U-shaped pattern over time. There was a substantial decline from the First wave (1.28) to the Fourth wave (1.03), representing a 19.5% decrease and reaching the lowest point in the series. However, this was followed by a significant rebound in the Fifth wave (1.21), an increase of 17.5% from the Fourth wave. The level then slightly decreased to 1.20 in the Sixth wave. Overall, while there is a net decrease of 6.4% from First to Sixth wave, the non-linear pattern suggests a more complex dynamic in extremist political positions over time.

The Overall Extremism Point (oep_p) shows only minor fluctuations across waves, ranging from 3.49 to 3.60 on a 1-7 scale. These variations, representing at most a 3.2% change between consecutive waves, are relatively small in magnitude. When viewed in the context of the full scale, these changes suggest a generally stable pattern in the distribution of extremism over time, rather than meaningful shifts in polarization.

p1 <- af_create_xy_plot(data = np_data, x_var = "Wave", y_var = "value",
                  grouping_variable = "dimension", show_points = TRUE,
                  title = "Normative Points",
                  y_label = "Index Value (1-7)",
                  legend_position = "bottom")  + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)


p2 <- af_create_xy_plot(data = ep_data, x_var = "Wave", y_var = "value",
                  grouping_variable = "dimension", show_points = TRUE,
                  title = "Extremism Points",
                  y_label = "Index Value (1-7)",
                  legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)


p3 <- af_create_xy_plot(data = ratio_data, x_var = "Wave", y_var = "value",
                  grouping_variable = "dimension", show_points = TRUE,
                  title = "Internal Polarization",
                  y_label = "ep / np",
                  legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave)) 
af_event_labels(p3)

3 Population Relative Indices

This section examines the prevalence of extremism within populations using Extremism Levels (EL) and Extremism Ranks (ER).

The analysis reveals a U-shaped pattern in the behavioral extremism level (bel_p) across waves. There was a sharp initial decline from the First wave (36.5%) to the Second wave (31.5%), followed by a small increase in the Third wave (32.4%), then dropping to its lowest point in the Fourth wave (29.0%). Subsequently, there was a clear rebound in the Fifth (30.6%) and Sixth (32.3%) waves. While there is a net decrease of 11.5% from First to Sixth wave, the recent upward trend from the Fourth to Sixth wave (an 11.4% increase) is equally notable, suggesting a recent resurgence in support for political violence after the initial decline.

The percentage of individuals showing extremism in all three dimensions (er3_p) has declined dramatically across waves, from 2.49% in the First wave to 0.90% in the Sixth wave, representing a 64% decrease. This substantial reduction suggests that while single-dimension extremism may persist, fewer individuals are extreme across all cognitive, behavioral, and social dimensions simultaneously.

# Reshape data for plotting EL values
el_data <- population_data %>%
  select(Wave, cel_p, bel_p, sel_p, oel_p) %>%
  pivot_longer(cols = -Wave, names_to = "dimension", values_to = "value") %>%
  mutate(type = "Extremism Levels")

er_data <- population_data %>%
  select(Wave, er1_p, er2_p, er3_p) %>%
  pivot_longer(cols = -Wave, names_to = "ranking", values_to = "value") %>%
  mutate(type = "Extremism Ranks")

# Clean up measure names
el_data$dimension <- recode(el_data$dimension,
                          "cel_p" = "Cognitive",
                          "bel_p" = "Behavioral",
                          "sel_p" = "Social",
                          "oel_p" = "Overall")

er_data$ranking <- recode(er_data$ranking,
                          "er1_p" = "ER1",
                          "er2_p" = "ER2",
                          "er3_p" = "ER3")

el_data <- el_data %>% 
  mutate(dimension = factor(dimension, levels = dimensions_order))

er_data <- er_data %>% 
  mutate(ranking = factor(ranking, levels = c("ER1", "ER2", "ER3")))
p1 <- af_create_xy_plot(data = el_data, x_var = "Wave", y_var = "value",
                  grouping_variable = "dimension", show_points = TRUE,
                  title = "Extremism Levels",
                  y_label = "Index Value %",
                  legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)


p2 <- af_create_xy_plot(data = er_data, x_var = "Wave", y_var = "value",
                  grouping_variable = "ranking", show_points = TRUE,
                  title = "Extremism Ranks",
                  y_label = "Index Value %",
                  legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)

4 Integrated Analysis of Absolute and Relative Indices

This section develops a comprehensive understanding of extremism by examining relationships between absolute and relative measures.

A striking divergence pattern emerges between extremism points (EP) and extremism levels (EL) from the First to Sixth wave. While the overall extremism point (oep_p) increases by 2.6%, the percentage of individuals above this threshold (oel_p) decreases substantially by 16.3% - creating a divergence gap of nearly 19 percentage points. This pattern suggests a significant concentration of extremism among a smaller subset of the population over time.

# Create integrated dataset
integrated_data <- population_data %>%
  select(Wave, oep_p, oel_p) %>%
  pivot_longer(cols = -Wave, names_to = "measure", values_to = "value") %>%
  mutate(measure = recode(measure, 
                          "oep_p" = "Overall Extremism Point", 
                          "oel_p" = "Overall Extremism Level"))

# Calculate percentage changes for annotation
ep_change <- (population_data$oep_p[population_data$Wave == "Sixth"] / 
              population_data$oep_p[population_data$Wave == "First"] - 1) * 100

el_change <- (population_data$oel_p[population_data$Wave == "Sixth"] / 
              population_data$oel_p[population_data$Wave == "First"] - 1) * 100

divergence_gap <- ep_change - el_change

# Scale factor for second axis
scale_factor <- 5.5

viridis_colors <- viridis(3)

# Plot with dual y-axes and connected lines for both measures
p <- ggplot(population_data, aes(x = Wave)) +
  # Line for Overall Extremism Point
  geom_line(aes(y = oep_p, group = 1), color = viridis_colors[1], size = 1.2) +
  geom_point(aes(y = oep_p), color = viridis_colors[1], size = 3) +
  geom_text(aes(y = oep_p, label = round(oep_p, 2)), vjust = -0.8, color = viridis_colors[1]) +
  
  # Line for Overall Extremism Level (scaled)
  geom_line(aes(y = oel_p / scale_factor, group = 1), color = viridis_colors[2], size = 1.2) +
  geom_point(aes(y = oel_p / scale_factor), color = viridis_colors[2], size = 3) +
  geom_text(aes(y = oel_p / scale_factor, label = round(oel_p, 1)), vjust = 1.8, color = viridis_colors[2]) +
  scale_x_discrete(limits = levels(df$Wave)) +
  scale_y_continuous(
    name = "Overall Extremism Point (oep_p)",
    sec.axis = sec_axis(~ . * scale_factor, name = "Overall Extremism Level (oel_p, %)")
  ) +
  labs(
    title = "Significant Divergence Between Extremism Point and Level",
    subtitle = paste0("EP increased by ", round(ep_change, 1), 
                      "% while EL decreased by ", abs(round(el_change, 1)), 
                      "% (divergence gap: ", round(divergence_gap, 1), " percentage points)"),
    x = "Wave"
  ) +
  theme_minimal() +
  theme(
    axis.title.y = element_text(color = viridis_colors[1]),
    axis.title.y.right = element_text(color = viridis_colors[2])
  )
af_event_labels(p)

5 Demographic Variables impact

p1 <- af_create_xy_bar(data = df, x_var = "gender", y_var = "pe_overall", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Gender and Overall Political Extremism",
                       y_label = "Overall Political Extremism (1-7)",
                       legend_position = "bottom")

p2 <- af_create_xy_bar(data = df, x_var = "gender", y_var = "pe_ideology", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Gender and Cognitive Dimension",
                       y_label = "Ideology (1-7)",
                       legend_position = "bottom")

p3 <- af_create_xy_bar(data = df, x_var = "gender", y_var = "pe_violence", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Gender and Behavioral Dimension",
                       y_label = "Violence (1-7)",
                       legend_position = "bottom")

p4 <- af_create_xy_bar(data = df, x_var = "gender", y_var = "pe_intolerance", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Gender and Social Dimension",
                       y_label = "Intolerance (1-7)",
                       legend_position = "bottom")

(p1 + p2) / (p3 + p4) + 
  plot_annotation(title = "Gender Impact on political Extremism")

p1 <- af_create_xy_plot(data = df, x_var = "age", y_var = "pe_overall",
                  grouping_variable = "pe_left_center_right", 
                  trend_line = "linear", show_points = FALSE,
                  title = "Age and Overall Political Extremism",
                  y_label = "Overall Political Extremism (1-7)",
                  legend_position = "bottom", legend_label = " ") 

p2 <- af_create_xy_plot(data = df, x_var = "age", y_var = "pe_ideology",
                  grouping_variable = "pe_left_center_right", 
                  trend_line = "linear", show_points = FALSE,
                  title = "Age and Cognitive Dimension",
                  y_label = "Ideology (1-7)",
                  legend_position = "bottom", legend_label = " ")

p3 <- af_create_xy_plot(data = df, x_var = "age", y_var = "pe_violence",
                  grouping_variable = "pe_left_center_right", 
                  trend_line = "linear", show_points = FALSE,
                  title = "Age and Behavioral Dimension",
                  y_label = "Violence (1-7)",
                  legend_position = "bottom", legend_label = " ")

p4 <- af_create_xy_plot(data = df, x_var = "age", y_var = "pe_intolerance",
                  grouping_variable = "pe_left_center_right", 
                  trend_line = "linear", show_points = FALSE,
                  title = "Age and social Dimension",
                  y_label = "Intolerance (1-7)",
                  legend_position = "bottom", legend_label = " ")

(p1 + p2) / (p3 + p4) + 
  plot_annotation(title = "Age Impact on political Extremism")

p1 <- af_create_xy_bar(data = df, x_var = "age_group", y_var = "pe_overall", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Age Group and Overall Political Extremism",
                       y_label = "Overall Political Extremism (1-7)",
                       legend_position = "bottom")

p2 <- af_create_xy_bar(data = df, x_var = "age_group", y_var = "pe_ideology", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Age Group and Cognitive Dimension",
                       y_label = "Ideology (1-7)",
                       legend_position = "bottom")

p3 <- af_create_xy_bar(data = df, x_var = "age_group", y_var = "pe_violence", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Age Group and Behavioral Dimension",
                       y_label = "Violence (1-7)",
                       legend_position = "bottom")

p4 <- af_create_xy_bar(data = df, x_var = "age_group", y_var = "pe_intolerance", 
                       fill_var = "pe_left_center_right", agg_func = "mean",
                       title = "Age Group and Social Dimension",
                       y_label = "Intolerance (1-7)",
                       legend_position = "bottom")

(p1 + p2) / (p3 + p4) + 
  plot_annotation(title = "Age Group Impact on political Extremism")

p1 <- af_create_xy_plot(data = df, x_var = "age", y_var = "pe_overall",
                  grouping_variable = "pe_religiosity", 
                  trend_line = "linear", show_points = FALSE,
                  title = "Age and Overall Political Extremism",
                  y_label = "Overall Political Extremism (1-7)",
                  legend_position = "bottom", legend_label = " ") 
p1


p2 <- af_create_xy_bar(data = df, x_var = "pe_religiosity", y_var = "pe_overall", 
                       fill_var = "age_group", agg_func = "mean",
                       title = "Age Group and Overall Political Extremism",
                       y_label = "Overall Political Extremism (1-7)",
                       legend_position = "bottom")
p2


p3 <- af_create_xy_bar(data = df, x_var = "pe_religiosity", y_var = "pe_overall", 
                       fill_var = "gender", agg_func = "mean",
                       title = "Gender and Overall Political Extremism",
                       y_label = "Overall Political Extremism (1-7)",
                       legend_position = "bottom")
p3