In the year ending June 2026, Victoria Police recorded approximately 102,800 family violence incidents, marking the first decline in five years. While this may seem like a positive change, the data raises some concerns. The number of criminal incidents resulting in charges fell by around a quarter, while unsolved incidents more than tripled.

This report examines five aspects of the data, including when incidents occur, how they are resolved, who is involved, and how trends have changed since 2022. It is important to remember that these figures reflect only incidents recorded by police and do not represent the full extent of family violence. A decline in recorded incidents does not necessarily mean that violence itself has decreased, as reporting and classification practices may also affect the numbers.

#Table 01: incident outcomes
t1 <- read_excel(f, sheet = "Table 01") |>
  rename(year = Year, category = Category, outcome = Outcome,
         n = `Family Incident Count`)

# Total incidents per year (children-present flag splits every incident in two)
totals <- t1 |>
  filter(category == "Children Present Flag") |>
  group_by(year) |>
  summarise(total = sum(n), .groups = "drop")

#Table 02: monthly counts
fy_months <- c("July","August","September","October","November","December",
               "January","February","March","April","May","June")
t2 <- read_excel(f, sheet = "Table 02") |>
  rename(year = Year, month = Month, n = `Family Incident Count`) |>
  mutate(month = factor(month, levels = fy_months),
         fy = paste0("Year ending June ", year))

#Tables 03 + 04: affected family members & other parties
age_levels <- c("00-09 years","10-14 years","15-17 years","18-19 years",
                "20-24 years","25-29 years","30-34 years","35-39 years",
                "40-44 years","45-49 years","50-54 years","55-59 years",
                "60-64 years","65-69 years","70-74 years","75 years and over")

afm <- read_excel(f, sheet = "Table 03") |>
  transmute(year = Year, sex = `AFM Sex`, age = `AFM Age Group`,
            n = `AFM Counter`, rate = `Rate per 100,000 population`,
            role = "Affected family member")
oth <- read_excel(f, sheet = "Table 04") |>
  transmute(year = Year, sex = `OTH Sex`, age = `OTH Age Group`,
            n = `OTH Counter`, rate = `Rate per 100,000 population`,
            role = "Other party")

# Table 03 splits 0-4 and 5-9; Table 04 uses 0-9.
people <- bind_rows(afm, oth) |>
  filter(sex %in% c("Females", "Males"), age != "Total") |>
  mutate(age = if_else(age %in% c("00-04 years", "05-09 years"),
                       "00-09 years", age),
         pop = if_else(rate > 0, n / rate * 1e5, NA_real_)) |>
  group_by(year, role, sex, age) |>
  summarise(n = sum(n), pop = sum(pop, na.rm = TRUE), .groups = "drop") |>
  mutate(rate = if_else(pop > 0, n / pop * 1e5, 0),
         age = factor(age, levels = age_levels),
         sex = recode(sex, Females = "Women and girls", Males = "Men and boys"))

1. When do incidents happen, and is 2026 different?

Family violence incidents tend to be more common during the summer months and around the festive season, before gradually decreasing during winter. These seasonal patterns may reflect changes in daily routines, family interactions, and holiday pressures. In 2026, the number of recorded incidents (shown in orange) was lower than in 2025 for most months, suggesting a decline compared with the previous year. However, the figures remain considerably higher than those recorded in 2022. This shows that although recent numbers have decreased, family violence continues to be a significant concern in Victoria.

cols1 <- c("Year ending June 2022" = grey,  "Year ending June 2023" = "#9ecae1",
           "Year ending June 2024" = "#4292c6", "Year ending June 2025" = "#08519c",
           "Year ending June 2026" = verm)

p1 <- ggplot(t2, aes(month, n, colour = fy, group = fy,
                     text = paste0(month, "<br>", fy, "<br>",
                                   comma(n), " incidents"))) +
  geom_line(aes(linewidth = year == 2026)) +
  geom_point(size = 1.6) +
  scale_linewidth_manual(values = c(`FALSE` = 0.7, `TRUE` = 1.7), guide = "none") +
  scale_colour_manual(values = cols1, name = NULL) +
  scale_y_continuous(labels = comma, limits = c(6500, NA)) +
  labs(title = "Family incidents peak in summer, and 2026 broke the upward run",
       x = NULL, y = "Family incidents recorded per month") +
  theme_minimal(base_size = 13)

ggplotly(p1, tooltip = "text") |> tidy()

2. What happened to criminal incidents? The enforcement gap

This section looks at how criminal incidents were handled and what outcomes were recorded each year. Each bar represents 100% of the incidents for that year, making it easier to compare the changes over time. The blue section, representing incidents where charges were laid, has become smaller, while the orange and red sections, representing incidents where no charges were laid or the cases remained unsolved, have increased. This shift raises questions about how effectively these incidents are being resolved. Although the data shows a clear change in recorded outcomes, it does not explain the reasons behind it. Further investigation would be needed to understand what may be contributing to these trends.

lv2 <- c("Criminal incident - Charges laid", "Criminal incident - No charges laid",
         "Criminal incident - Unsolved", "No criminal incident")
lab2 <- c("Criminal: charges laid", "Criminal: no charges laid",
          "Criminal: unsolved", "No criminal incident")

d2 <- t1 |>
  filter(category == "Criminal Incident Flag and Charges Laid") |>
  left_join(totals, by = "year") |>
  mutate(share = n / total,
         outcome = factor(outcome, levels = lv2, labels = lab2),
         tip = paste0(outcome, "<br>Year ending June ", year, "<br>",
                      comma(n), " incidents (", percent(share, 0.1), ")"))

p2 <- ggplot(d2, aes(factor(year), share, fill = outcome, text = tip)) +
  geom_col(width = 0.7) +
  scale_fill_manual(values = c(blue, orange, verm, grey), name = NULL) +
  scale_y_continuous(labels = percent) +
  labs(title = "Charges laid fell from 32% to 24% of all incidents; unsolved more than tripled",
       x = "Year ending June", y = "Share of all family incidents") +
  theme_minimal(base_size = 13)

ggplotly(p2, tooltip = "text") |> tidy()

3. Protection and children: a changing response?

Three indicators, shown as a share of all incidents. All three have drifted down since 2022, with safety notices and recorded child presence falling faster than intervention order applications. Use the hover to compare years across panels.

d3 <- t1 |>
  filter((category == "Intervention Order Taken (IVO)" & outcome == "Applied for") |
         (category == "Family Violence Safety Notice (FVSN)" & outcome == "Issued") |
         (category == "Children Present Flag" & outcome == "Child recorded as present")) |>
  left_join(totals, by = "year") |>
  mutate(share = n / total,
         indicator = case_match(category,
           "Intervention Order Taken (IVO)" ~ "Intervention order applied for",
           "Family Violence Safety Notice (FVSN)" ~ "Safety notice issued",
           "Children Present Flag" ~ "Child recorded as present"),
         tip = paste0(indicator, "<br>Year ending June ", year, "<br>",
                      percent(share, 0.1), " of incidents (", comma(n), ")"))

p3 <- ggplot(d3, aes(year, share, group = indicator, text = tip)) +
  geom_line(colour = blue, linewidth = 1.1) +
  geom_point(colour = blue, size = 2.2) +
  facet_wrap(~ indicator, nrow = 1) +
  scale_y_continuous(labels = percent, limits = c(0, 0.45)) +
  scale_x_continuous(breaks = 2022:2026) +
  labs(title = "Safety notices and child presence fell faster than intervention order applications",
       x = "Year ending June", y = "Share of all family incidents") +
  theme_minimal(base_size = 12) +
  theme(panel.spacing = unit(1.2, "lines"))

ggplotly(p3, tooltip = "text") |> tidy()

4. Who is involved? Two very different age profiles

This section examines the age and gender patterns of people involved in family violence incidents in Victoria in 2026, using rates per 100,000 people. The data shows that women and girls are more commonly recorded as the affected family member, while men and boys are more frequently recorded as the other party involved. Across both groups, the rates are highest among people in their mid-30s. These patterns help highlight the age groups most represented in police records and show how involvement in family violence differs between genders. However, the figures describe recorded incidents and should not be taken as a complete picture of everyone’s experiences of family violence.

d4 <- people |>
  filter(year == 2026) |>
  mutate(tip = paste0(role, "<br>", sex, ", ", age, "<br>",
                      comma(rate, 1), " per 100,000 (", comma(n), " people-records)"))

p4 <- ggplot(d4, aes(age, rate, colour = role, group = role, text = tip)) +
  geom_line(linewidth = 1.1) +
  geom_point(size = 2) +
  facet_wrap(~ sex, ncol = 1) +
  scale_colour_manual(values = c("Affected family member" = pink,
                                 "Other party" = blue), name = NULL) +
  scale_y_continuous(labels = comma) +
  labs(title = "Women are most often affected, men most often the other party, both peaking in their 30s",
       x = "Age group", y = "Rate per 100,000 people (2026)") +
  theme_minimal(base_size = 12) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

ggplotly(p4, tooltip = "text", height = 640) |> tidy()

5. How has risk shifted since 2022?

This section compares the rates of people recorded as affected family members in 2022 and 2026 across different age groups. The dumbbell chart connects the two years, with hollow circles representing the 2022 rates and filled circles showing the 2026 rates. This makes it easier to see which age groups have experienced an increase or decrease over time. Hovering over the chart provides the exact change in rates, helping identify shifts in patterns of family violence and the age groups that may require greater attention. These comparisons offer useful insights into how recorded risk has changed over the past four years.

d5 <- people |>
  filter(role == "Affected family member", year %in% c(2022, 2026)) |>
  select(sex, age, year, rate) |>
  pivot_wider(names_from = year, values_from = rate, names_prefix = "y") |>
  mutate(change = y2026 - y2022,
         tip = paste0(sex, ", ", age, "<br>2022: ", comma(y2022, 1),
                      "<br>2026: ", comma(y2026, 1),
                      "<br>Change: ", if_else(change >= 0, "+", ""),
                      comma(change, 1), " per 100,000"))

p5 <- ggplot(d5, aes(y = fct_rev(age))) +
  geom_segment(aes(x = y2022, xend = y2026, yend = fct_rev(age)),
               colour = grey, linewidth = 1.4) +
  geom_point(aes(x = y2022, text = tip), shape = 21, fill = "white",
             colour = blue, size = 3, stroke = 1.2) +
  geom_point(aes(x = y2026, text = tip), colour = blue, size = 3) +
  facet_wrap(~ sex) +
  scale_x_continuous(labels = comma) +
  labs(title = "Change in rate of being an affected family member, 2022 (hollow) to 2026 (filled)",
       x = "Rate per 100,000 people", y = NULL) +
  theme_minimal(base_size = 12)

ggplotly(p5, tooltip = "text", height = 620) |> tidy()

What this means

What surprised me most was that even though the number of recorded family violence incidents went down in 2026, unsolved cases increased a lot and fewer incidents resulted in charges. This made me realise that the numbers don’t always tell the full story, as some cases may go unreported, and the data doesn’t explain why these changes happened. A decrease in recorded incidents doesn’t necessarily mean that family violence is actually becoming less common. It leaves me wondering whether things are genuinely improving or whether more needs to be done to support victims and ensure these cases are properly investigated.

Data and references

All figures use one source, Victoria’s Crime Statistics Agency family incident data tables (Tables 01 to 04), year ending June 2026. Chart 1 uses Table 02, charts 2 and 3 use Table 01, and charts 4 and 5 use Tables 03 and 04.

Crime Statistics Agency. (2026). Family incidents: Data tables, year ending June 2026 [Data set]. State of Victoria. https://www.crimestatistics.vic.gov.au/