This Analysis of Community Relative Indices is part of the Political Extremism Trend Analysis Framework. The purpose is to understand how extreme each community is relative to the broader population of Israeli Jewish people over time.
We examine the following key metrics: - Community Extremism Levels (cel_c, bel_c, sel_c, oel_c) - Community Extremism Ranks (er1_c, er2_c, er3_c)
The analysis follows these steps: 1. Assess each community’s contribution to overall extremism 2. Analyze multi-dimensional extremism within communities 3. Track changes in community relative positions over time
community_variable <- "pe_religiosity"
community_order <-
c("Secular", "Religious", "National Religious", "Ultra-Orthodox")
wave_order <- c("First", "Second", "Third", "Fourth", "Fifth", "Sixth")
dimensions_order <- c("Overall", "Cognitive", "Behavioral", "Social")
wave_transition_order <-
c("First-Second", "Second-Third", "Third-Fourth", "Fourth-Fifth", "Fifth-Sixth")
# Read the data from indices_table.txt
df <- as.data.frame(readRDS("Israel Survey/data/il_pe.RDS"))
indices_df <- af_gauge_indices(df, pop_var1 = "Wave", comm_var1 = community_variable)
indices_data <- indices_df$indices_table
# Convert data to a more manageable format for analysis
df <- indices_data %>%
mutate(Wave = factor(Wave, levels = wave_order)) %>%
mutate(!!sym(community_variable) := factor(!!sym(community_variable), levels = community_order))
# Separate the data into population and community data
pop_data <- df %>% filter(is.na(!!sym(community_variable)))
community_data <- df %>% filter(!is.na(!!sym(community_variable)))
plot_data <- community_data
p1 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "oel_c",
grouping_variable = community_variable, show_points = TRUE,
title = "Overall - Extremism Levels",
y_label = "oel_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)
p2 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "cel_c",
grouping_variable = community_variable, show_points = TRUE,
title = "Cognitive Dimension - Extremism Levels",
y_label = "cel_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)
p3 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "bel_c",
grouping_variable = community_variable, show_points = TRUE,
title = "Behavioral Dimension - Extremism Levels",
y_label = "bel_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p3)
p4 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "sel_c",
grouping_variable = community_variable, show_points = TRUE,
title = "Social Dimension - Extremism Levels",
y_label = "sel_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p4)
p1 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "er1_c",
grouping_variable = community_variable, show_points = TRUE,
title = "ER1",
y_label = "er1_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)
p2 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "er2_c",
grouping_variable = community_variable, show_points = TRUE,
title = "ER2",
y_label = "er2_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)
p3 <- af_create_xy_plot(data = plot_data, x_var = "Wave", y_var = "er3_c",
grouping_variable = community_variable, show_points = TRUE,
title = "ER3",
y_label = "er3_c %",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p3)
The ratio of Community to Population Extremism Levels indicates the community impact on the population extremism level. Ratio > 1 indicate communities contributing disproportionately to population extremism, The higher the ratio the more disproportionate thier contribution is.
# Calculate ratios for extremism levels
ratio_data <- af_calculate_ratio(df, community_variable, "oel_c", "oel_p")
p1 <- af_create_xy_plot(data = ratio_data, x_var = "Wave", y_var = "ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Overall - Impact Ratio",
y_label = "oel_c / oel_p Ratio",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)
ratio_data <- af_calculate_ratio(df, community_variable, "cel_c", "cel_p")
p2 <- af_create_xy_plot(data = ratio_data, x_var = "Wave", y_var = "ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Cognitive Dimension - Impact Ratio",
y_label = "cel_c / cel_p Ratio",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)
ratio_data <- af_calculate_ratio(df, community_variable, "bel_c", "bel_p")
p3 <- af_create_xy_plot(data = ratio_data, x_var = "Wave", y_var = "ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Behavioral Dimension - Impact Ratio",
y_label = "bel_c / bel_p Ratio",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p3)
ratio_data <- af_calculate_ratio(df, community_variable, "sel_c", "sel_p")
p4 <- af_create_xy_plot(data = ratio_data, x_var = "Wave", y_var = "ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Social Dimension - Impact Ratio",
y_label = "sel_c / sel_p Ratio",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p4)
The concentration measure captures the relative prominence of the most extreme group—those scoring at the extreme end on all three dimensions—within the broader population of extremists, defined as individuals who are extreme on at least one dimension, in each community.
Analysis of the concentration of extremism (measured by er3_c/er1_c ratio) reveals that Orthodox communities consistently show higher concentrations of multi-dimensional extremism compared to other communities.
# Calculate concentration ratios for multi-dimensional extremism
multi_dim_data <- af_calculate_concentration(df, community_variable, "er3_c", "er1_c")
# Remove rows with NA or infinite values
multi_dim_data <- multi_dim_data %>%
filter(is.finite(concentration_ratio))
p <- af_create_xy_plot(data = multi_dim_data, x_var = "Wave", y_var = "concentration_ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Concentration of Multi-dimensional Extremism by Community",
subtitle = "Higher values indicate Higher concentration",
y_label = "er3_c / er1_c Ratio",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p)
This analysis examines how each community disproportionately contributes to extremism in the Israeli Jewish population across six survey waves. We compare each community’s extremism levels (measured against population thresholds) with their relative proportion in the population, to identify which communities have higher or lower impact than their size would suggest.
We calculate an “impact ratio” for each community, dimension, and wave using the formula:
Impact Ratio = Extremism Level (EL_c) / (Population Proportion × 100)
Where: - Extremism Level (EL_c) is the percentage of community members exceeding the population’s extremism threshold - Population Proportion is the community’s size (nc) divided by the total population (np)
An impact ratio of 1.0 means the community’s contribution to extremism is proportional to its size. Values greater than 1.0 indicate disproportionate impact, while values less than 1.0 suggest lower impact than expected based on size.
# Extract community data
community_data <- indices_data %>%
filter(!is.na(!!sym(community_variable))) %>%
select(Wave, !!sym(community_variable), nc, np,
cel_c, bel_c, sel_c, oel_c)
# Calculate population proportion for each community
community_data <- community_data %>%
mutate(pop_proportion = nc / np)
# Calculate disproportionality indices for each dimension
# Values > 1 indicate disproportionate impact on extremism relative to size
community_data <- community_data %>%
mutate(
cognitive_impact_ratio = cel_c / (pop_proportion * 100),
behavioral_impact_ratio = bel_c / (pop_proportion * 100),
social_impact_ratio = sel_c / (pop_proportion * 100),
overall_impact_ratio = oel_c / (pop_proportion * 100)
)
# Reorganize for plotting
impact_data_long <- community_data %>%
select(Wave, !!sym(community_variable), pop_proportion,
cognitive_impact_ratio, behavioral_impact_ratio,
social_impact_ratio, overall_impact_ratio) %>%
pivot_longer(
cols = c(cognitive_impact_ratio, behavioral_impact_ratio,
social_impact_ratio, overall_impact_ratio),
names_to = "dimension",
values_to = "impact_ratio"
) %>%
mutate(
dimension = case_when(
dimension == "cognitive_impact_ratio" ~ "Cognitive",
dimension == "behavioral_impact_ratio" ~ "Behavioral",
dimension == "social_impact_ratio" ~ "Social",
dimension == "overall_impact_ratio" ~ "Overall"
)
)
# Create a standard order for communities
community_data[[community_variable]] <- factor(community_data[[community_variable]], levels = community_order)
impact_data_long[[community_variable]] <- factor(impact_data_long[[community_variable]], levels = community_order)
# Filter for Overall dimension
overall_impact <- impact_data_long %>% filter(dimension == "Overall")
p1 <- af_create_xy_plot(data = overall_impact, x_var = "Wave", y_var = "impact_ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Overall Extremism Level - Community Impact Ratio",
y_label = "Impact Ratio (EL_c / Population Proportion)",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p1)
# Filter for Cognitive dimension
cognitive_impact <- impact_data_long %>% filter(dimension == "Cognitive")
p2 <- af_create_xy_plot(data = cognitive_impact, x_var = "Wave", y_var = "impact_ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Cognitive Extremism Level - Community Impact Ratio",
y_label = "Impact Ratio (EL_c / Population Proportion)",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p2)
# Filter for Behavioral dimension
behavioral_impact <- impact_data_long %>% filter(dimension == "Behavioral")
p3 <- af_create_xy_plot(data = behavioral_impact, x_var = "Wave", y_var = "impact_ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Behavioral Extremism Level - Community Impact Ratio",
y_label = "Impact Ratio (EL_c / Population Proportion)",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p3)
# Filter for Social dimension
social_impact <- impact_data_long %>% filter(dimension == "Social")
p4 <- af_create_xy_plot(data = social_impact, x_var = "Wave", y_var = "impact_ratio",
grouping_variable = community_variable, show_points = TRUE,
title = "Social Extremism Level - Community Impact Ratio",
y_label = "Impact Ratio (EL_c / Population Proportion)",
legend_position = "bottom") + scale_x_discrete(limits = levels(df$Wave))
af_event_labels(p4)
# Calculate average impact ratios across waves for each community and dimension
impact_summary <- impact_data_long %>%
group_by(!!sym(community_variable), dimension) %>%
summarize(
mean_impact = mean(impact_ratio, na.rm = TRUE),
min_impact = min(impact_ratio, na.rm = TRUE),
max_impact = max(impact_ratio, na.rm = TRUE),
consistency = max_impact - min_impact # Lower values indicate more consistent impact
) %>%
ungroup()
# Reshape for visualization
impact_summary_wide <- impact_summary %>%
select(!!sym(community_variable), dimension, mean_impact) %>%
pivot_wider(names_from = dimension, values_from = mean_impact)
af_create_heatmap(data = impact_summary, x_var = "dimension", y_var = community_variable,
fill_var = "mean_impact",
title = "Average Extremism Level Impact Ratio by Community and Dimension",
subtitle = "Higher values indicate more disproportionate impact relative to size",
x_label = "Dimension of Extremism",
y_label = "Religious Community",
fill_label = "Impact Ratio",
legend_position = "bottom")
impact_summary_wide %>%
gt() %>%
tab_header(title = md("**Average Impact Ratio by Community and Dimension (Across All Waves)**")) %>%
fmt_number(decimals = 2) %>%
cols_align(align = "center", columns = everything()) %>%
cols_align(align = "left", columns = 1)
Average Impact Ratio by Community and Dimension (Across All Waves) | ||||
pe_religiosity | Behavioral | Cognitive | Overall | Social |
---|---|---|---|---|
Secular | 0.77 | 0.61 | 0.26 | 0.23 |
Religious | 0.79 | 0.35 | 0.35 | 0.42 |
National Religious | 4.73 | 5.89 | 5.48 | 5.35 |
Ultra-Orthodox | 2.75 | 1.95 | 2.21 | 2.96 |
The Relative Extremism Change Index (RECI) is a quantitative measure that captures the relationship between community extremism level changes and population normative point changes across different time periods. It provides a single numerical indicator that helps determine whether a community’s internal extremist composition is growing or shrinking relative to broader population shifts.
The Relative Extremism Change Index (RECI) is used to examine how extremism is evolving within different communities relative to population norms. The RECI provides a valuable metric for identifying which communities are becoming more or less extreme over time, controlling for broader societal shifts.
RECI Calculation:
RECI = EL_percent_change - NP_percent_change
Where:
Interpretation:
Standardized RECI (RECI-S) normalizes the index to facilitate comparison across dimensions and waves:
RECI-S = RECI / (|EL_percent_change| + |NP_percent_change| + 1)
This bounds the index between approximately -1 and 1:
Why RECI is Valuable:
Isolates True Radicalization: RECI distinguishes between changes in extremism due to broader societal shifts versus community-specific radicalization. This helps identify which communities are becoming more extreme relative to the broader population.
Comparable Across Time Periods: The standardized RECI-S allows for direct comparison across different time periods and dimensions, enabling identification of trends and patterns.
Early Warning System: RECI can serve as an early warning indicator, highlighting communities that are experiencing increasing extremism before it becomes widely apparent in absolute measures.
Multi-Dimensional Perspective: By calculating RECI across cognitive, behavioral, social, and overall dimensions, we gain insights into which aspects of extremism are changing most rapidly.
# Calculate RECI for communities
community_transitions <- data.frame()
# Process each consecutive wave pair
for (i in 1:(length(wave_order)-1)) {
current_wave <- wave_order[i+1]
previous_wave <- wave_order[i]
# Check if both waves exist in the data
if (!(previous_wave %in% df$Wave) || !(current_wave %in% df$Wave)) {
next
}
# Filter data for current and previous waves
current_data <- df[df$Wave == current_wave, ]
previous_data <- df[df$Wave == previous_wave, ]
# Calculate RECI for this wave transition
transition_results <- af_calculate_community_reci(
current_data, previous_data, community_variable,
dimensions = c("c", "b", "s", "o")
)
# Add wave transition information
transition_results$wave_transition <- paste(previous_wave, current_wave, sep = "-")
# Append to results
community_transitions <- rbind(community_transitions, transition_results)
}
# Calculate population RECI
population_transitions <- af_prepare_population_reci_data(df)
event_labels <-
c("Inland Terror", "Bennet Gov. Fall", "Judicial Reform", "Galant Dismissal", "October 7")
# Create trend plot for population-level RECI
reci_data <- population_transitions %>%
mutate(dimension = factor(dimension,
levels = tolower(dimensions_order),
labels = dimensions_order)) %>%
mutate(wave_transition = factor(wave_transition,
levels = wave_transition_order,
labels = event_labels))
p <- af_create_xy_plot(data = reci_data, x_var = "wave_transition", y_var = "reci",
grouping_variable = "dimension",
title = "Population RECI Trends",
x_label = "Wave Transition", y_label = "RECI Index",
legend_position = "bottom")
# Create heatmap for population RECI
af_create_heatmap (data = reci_data,
x_var = "wave_transition", y_var = "dimension", fill_var = "reci",
title = "Population RECI Heatmap",
x_label = "Wave Transition", y_label = "Dimension",
fill_label = "RECI Index", legend_position = "bottom")
# Create RECI table for the population
# Format the table with RECI and RECI-S values
population_table <- reci_data %>%
mutate(reci_formatted = sprintf("%.2f (%.2f)", reci, reci_s)) %>%
select(dimension, wave_transition, reci_formatted) %>%
pivot_wider(names_from = wave_transition, values_from = reci_formatted)
population_table %>%
arrange(dimension) %>%
gt() %>%
tab_header(title = md("**RECI Values for Overall Population: RECI (RECI-S)**")) %>%
cols_align(align = "center", columns = everything()) %>%
cols_align(align = "left", columns = 1)
RECI Values for Overall Population: RECI (RECI-S) | |||||
dimension | Inland Terror | Bennet Gov. Fall | Judicial Reform | Galant Dismissal | October 7 |
---|---|---|---|---|---|
Overall | 9.17 (0.90) | -11.88 (-0.89) | 0.81 (0.28) | 0.93 (0.09) | -14.76 (-0.87) |
Cognitive | -9.55 (-0.43) | 18.93 (0.95) | 15.27 (0.94) | -36.94 (-0.97) | 33.17 (0.97) |
Behavioral | -17.47 (-0.95) | 4.12 (0.80) | -10.46 (-0.91) | 3.34 (0.37) | 4.11 (0.53) |
Social | 6.90 (0.87) | -17.06 (-0.94) | 11.29 (0.92) | -7.16 (-0.88) | 2.73 (0.73) |
communities <- community_order
# Initialize empty lists to store plots for each community
trend_plots <- list()
heatmap_plots <- list()
community_tables <- list()
# Loop through each community and create visualizations
for (comm in communities) {
# Filter data for this community
comm_data <- community_transitions %>%
filter(community == comm) %>%
mutate(dimension = factor(dimension,
levels = tolower(dimensions_order),
labels = dimensions_order)) %>%
mutate(wave_transition = factor(wave_transition,
levels = wave_transition_order,
labels = event_labels))
# Create trend plot
trend_plot <- af_create_xy_plot(comm_data, x_var = "wave_transition", y_var = "reci",
grouping_variable = "dimension",
title = paste("RECI Trends -", comm),
x_label = "Wave Transition", y_label = "RECI Index",
legend_position = "bottom") +
scale_x_discrete(labels = event_labels)
# Create heatmap
heatmap_plot <- af_create_heatmap (data = comm_data,
x_var = "wave_transition", y_var = "dimension", fill_var = "reci",
title = paste("RECI Heatmap -", comm),
x_label = "Wave Transition", y_label = "Dimension",
fill_label = "RECI Index", legend_position = "bottom")
# Create table
comm_table <- comm_data %>%
arrange(dimension) %>%
mutate(reci_formatted = sprintf("%.2f (%.2f)", reci, reci_s)) %>%
select(dimension, wave_transition, reci_formatted) %>%
pivot_wider(names_from = wave_transition, values_from = reci_formatted)
gt_table <- comm_table %>%
gt() %>%
tab_header(title = md(paste0("**RECI Values for ", comm, " Community: RECI (RECI-S)**"))) %>%
cols_align(align = "center", columns = everything()) %>%
cols_align(align = "left", columns = 1)
# Then in your loop, simply print it:
print(trend_plot)
print(heatmap_plot)
print(gt_table)
# Store plots and tables for later reference
trend_plots[[comm]] <- trend_plot
heatmap_plots[[comm]] <- heatmap_plot
community_tables[[comm]] <- comm_table
}
RECI Values for Secular Community: RECI (RECI-S) | |||||
dimension | Inland Terror | Bennet Gov. Fall | Judicial Reform | Galant Dismissal | October 7 |
---|---|---|---|---|---|
Overall | 18.78 (0.95) | 19.60 (0.95) | 14.23 (0.93) | -36.53 (-0.97) | 23.50 (0.96) |
Cognitive | 3.13 (0.32) | 34.94 (0.97) | 15.87 (0.94) | -40.17 (-0.98) | 56.71 (0.98) |
Behavioral | -19.79 (-0.95) | 17.09 (0.94) | -13.54 (-0.93) | 11.57 (0.67) | 11.80 (0.76) |
Social | 14.18 (0.93) | 15.18 (0.71) | 18.44 (0.95) | -56.38 (-0.98) | 54.41 (0.98) |
RECI Values for Religious Community: RECI (RECI-S) | |||||
dimension | Inland Terror | Bennet Gov. Fall | Judicial Reform | Galant Dismissal | October 7 |
---|---|---|---|---|---|
Overall | 3.44 (0.77) | -14.99 (-0.91) | -4.07 (-0.52) | 15.87 (0.63) | -29.58 (-0.93) |
Cognitive | -24.08 (-0.65) | 24.97 (0.96) | 27.40 (0.96) | -48.32 (-0.98) | 19.38 (0.95) |
Behavioral | -18.39 (-0.95) | 4.20 (0.81) | -4.15 (-0.81) | -7.81 (-0.89) | -5.69 (-0.85) |
Social | 2.53 (0.72) | -19.57 (-0.95) | 12.60 (0.93) | 18.77 (0.86) | -18.53 (-0.89) |
RECI Values for National Religious Community: RECI (RECI-S) | |||||
dimension | Inland Terror | Bennet Gov. Fall | Judicial Reform | Galant Dismissal | October 7 |
---|---|---|---|---|---|
Overall | 8.55 (0.90) | -61.22 (-0.98) | -19.68 (-0.84) | 111.69 (0.92) | -31.73 (-0.94) |
Cognitive | -19.70 (-0.60) | -38.54 (-0.82) | -8.45 (-0.57) | -3.38 (-0.22) | 16.04 (0.94) |
Behavioral | -45.02 (-0.98) | -17.51 (-0.81) | -15.66 (-0.94) | 35.79 (0.86) | -6.16 (-0.86) |
Social | 40.19 (0.98) | -48.64 (-0.98) | 18.97 (0.95) | 22.36 (0.88) | 19.16 (0.95) |
RECI Values for Ultra-Orthodox Community: RECI (RECI-S) | |||||
dimension | Inland Terror | Bennet Gov. Fall | Judicial Reform | Galant Dismissal | October 7 |
---|---|---|---|---|---|
Overall | 23.49 (0.96) | -36.04 (-0.96) | -9.41 (-0.72) | 28.71 (0.75) | -20.60 (-0.91) |
Cognitive | -8.78 (-0.41) | -19.81 (-0.70) | -21.99 (-0.77) | 58.97 (0.76) | -19.93 (-0.90) |
Behavioral | 9.26 (0.52) | -28.79 (-0.87) | -27.75 (-0.97) | 20.30 (0.78) | 24.03 (0.87) |
Social | 12.73 (0.93) | -42.72 (-0.98) | -6.36 (-0.75) | -1.32 (-0.57) | 29.67 (0.97) |
# Prepare data for community comparison
comparison_data <- community_transitions %>%
filter(community != "NA") %>%
group_by(community, dimension) %>%
summarize(
mean_reci = mean(reci, na.rm = TRUE),
max_reci = max(reci, na.rm = TRUE),
min_reci = min(reci, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(dimension = factor(dimension,
levels = tolower(dimensions_order),
labels = dimensions_order)) %>%
mutate(community = factor(community, levels = community_order))
af_create_xy_bar (data = comparison_data, x_var = "community", y_var = "mean_reci",
fill_var = "dimension", flip_axes = TRUE,
title = "Average RECI by Community and Dimension",
x_label = "Community", y_label = "Mean RECI",
legend_position = "bottom") +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")