Wave 2 soft launch: Baltic crisis

What we check

Master data: 301 records. We use the first soft launch for all results. The later 126-record file is a possible follow-up after randomization problems. Its purpose still needs confirmation. We use it only to check assignments. We do not combine the files.

We use POLITSOLID_W2_Softlaunch_18052026.dta. It contains 301 interviews from 25 to 28 September 2026.

The preregistration gives two expectations:

  • People agree to more personal sacrifices when the attack is larger.
  • People agree to more personal sacrifices when identity questions come before the crisis.

We expect the same pattern for support for government action.

The first batch cannot separate these effects. Every small attack comes with identity questions before the crisis. Every large attack comes with identity questions after the crisis. Two of the four planned groups are missing.

Check of the assignments

The table compares the two batches. All four combinations appear in the later file. This fits the idea that it was a follow-up after the assignment problem. It does not prove why the records were collected or that every randomization problem was fixed.

Code
bind_rows(
  w2 %>% transmute(batch = "Master: 301", attack_large, identity_before),
  w2_followup %>% transmute(batch = "Later: 126",
    attack_large = as.numeric(TREATSCALE %% 10 == 2),
    identity_before = as.numeric(POSITION_id == 1))
) %>% count(batch, attack_large, identity_before) %>%
  mutate(attack = if_else(attack_large == 1, "Large", "Small"),
         identity = if_else(identity_before == 1, "Before crisis", "After crisis")) %>%
  select(batch, attack, identity, n) %>%
  kable(col.names = c("Batch", "Attack", "Identity questions", "Records"))
Batch Attack Identity questions Records
Later: 126 Small After crisis 32
Later: 126 Small Before crisis 34
Later: 126 Large After crisis 31
Later: 126 Large Before crisis 29
Master: 301 Small Before crisis 153
Master: 301 Large After crisis 148

Results from the master batch

The sacrifice score counts the four actions a person selects. It ranges from 0 to 4. The government-action score records the strongest action selected: none (0), sanctions (1), military equipment (2), or troops (3).

We show the two combinations that were actually used. A difference between them combines attack size and identity-question placement. It cannot tell us which treatment caused a difference.

Code
cell_means <- w2 %>%
  mutate(condition = if_else(attack_large == 1,
    "Large attack / identity after", "Small attack / identity before")) %>%
  group_by(country, condition) %>%
  summarise(n = n(), n_sacrifice = sum(!is.na(sacrifice)),
            sacrifice = mean(sacrifice, na.rm = TRUE),
            n_state = sum(!is.na(state_response)),
            state_response = mean(state_response, na.rm = TRUE), .groups = "drop")
cell_means %>% kable(digits = 2, col.names = c("Country", "Combination", "Records",
  "Valid sacrifice scores", "Mean sacrifice", "Valid action scores", "Mean action"))
Country Combination Records Valid sacrifice scores Mean sacrifice Valid action scores Mean action
Croatia Large attack / identity after 20 20 0.60 20 0.90
Croatia Small attack / identity before 20 20 0.75 20 1.05
France Large attack / identity after 20 20 0.55 20 1.60
France Small attack / identity before 22 22 0.59 22 1.59
Germany Large attack / identity after 24 24 0.83 24 1.71
Germany Small attack / identity before 24 24 1.17 24 1.79
Italy Large attack / identity after 24 24 0.88 24 1.17
Italy Small attack / identity before 24 24 0.71 24 1.04
Poland Large attack / identity after 16 16 1.44 16 2.25
Poland Small attack / identity before 16 16 1.12 16 1.94
Spain Large attack / identity after 25 25 0.60 25 1.48
Spain Small attack / identity before 27 27 1.19 27 2.07
Sweden Large attack / identity after 19 19 1.79 19 2.16
Sweden Small attack / identity before 20 20 1.60 20 2.45
Code
cell_means %>%
  mutate(combination = if_else(str_starts(condition, "Large"), "Large / after", "Small / before")) %>%
  ggplot(aes(combination, sacrifice, fill = combination)) +
  geom_col() + facet_wrap(~ country) + coord_flip() +
  labs(x = NULL, y = "Mean sacrifice count (0 to 4)", fill = NULL) +
  theme(legend.position = "none", axis.text.y = element_text(size = 8))

Which actions do people choose?

An unselected action counts as zero. If a person does not reach the questions, the score stays missing.

Code
w2 %>% select(country, baltic_sacrifice_1:baltic_sacrifice_4,
              baltic_country_response_level_1:baltic_country_response_level_3) %>%
  pivot_longer(-country, names_to = "item", values_to = "yes") %>%
  group_by(item) %>% summarise(n = sum(!is.na(yes)), percent_yes = 100 * mean(yes, na.rm = TRUE)) %>%
  mutate(item = recode(item, baltic_sacrifice_1 = "Additional tax", baltic_sacrifice_2 = "Civil work",
    baltic_sacrifice_3 = "Host refugees", baltic_sacrifice_4 = "Enlist",
    baltic_country_response_level_1 = "Sanctions", baltic_country_response_level_2 = "Military equipment",
    baltic_country_response_level_3 = "Troops")) %>%
  kable(digits = 1, col.names = c("Action", "Valid answers", "Yes (%)"))
Action Valid answers Yes (%)
Sanctions 301 49.8
Military equipment 301 51.2
Troops 301 29.6
Additional tax 301 23.6
Civil work 301 42.9
Host refugees 301 20.3
Enlist 301 10.0

Difference between the two combinations

Each country has the same weight in the overall average. The table subtracts the small-attack/identity-before mean from the large-attack/identity-after mean. We do not label its sign as support for either separate prediction.

Code
combined_difference <- cell_means %>%
  pivot_longer(c(sacrifice, state_response), names_to = "score", values_to = "mean") %>%
  group_by(country, score) %>%
  summarise(difference = mean[condition == "Large attack / identity after"] -
              mean[condition == "Small attack / identity before"], .groups = "drop")
bind_rows(
  combined_difference %>% group_by(score) %>% summarise(difference = mean(difference)) %>%
    mutate(country = "Equal-country average"),
  combined_difference
) %>% select(country, score, difference) %>%
  kable(digits = 3, col.names = c("Country", "Score", "Combined difference"))
Country Score Combined difference
Equal-country average sacrifice -0.063
Equal-country average state_response -0.096
Croatia sacrifice -0.150
Croatia state_response -0.150
France sacrifice -0.041
France state_response 0.009
Germany sacrifice -0.333
Germany state_response -0.083
Italy sacrifice 0.167
Italy state_response 0.125
Poland sacrifice 0.312
Poland state_response 0.312
Spain sacrifice -0.585
Spain state_response -0.594
Sweden sacrifice 0.189
Sweden state_response -0.292

Limits

We cannot estimate the separate attack effect, the separate identity-order effect, or their interaction from this batch. We do not test statistical significance or analyse distance to Latvia.

The later batch has the missing combinations. We keep it separate until its purpose and status are confirmed.