Code
source(here::here("R", "prep.R"))
library(readr)
library(stringr)
library(purrr)
library(scales)
library(jsonlite)
library(performance)source(here::here("R", "prep.R"))
library(readr)
library(stringr)
library(purrr)
library(scales)
library(jsonlite)
library(performance)Dieses Kapitel beantwortet anhand eines Fallbeispiels die Fragen: Wie ist das methodische Vorgehen von Bertschek et al. (2026) im internationalen Vergleich? Sind in anderen Ländern vergleichbare Daten zugänglicher? Dafür wird ein Beispielfall präsentiert (Chile) und die Daten verglichen.
Die Auswahl des Landes erfolgt aus praktischen Gründen: Die chilenische Zentralregierung stellt viele Datensätze des staatlichen Betriebs über eine API der Öffentlichkeit.
Der Großteil dieses Kapitels besteht darin zu verstehen, wie die Daten vergleichbar gemacht werden können und welche API-Calls notwendig sind, um die Daten so aufzubereiten, dass sie mit den deutschen Daten annäherungsweise kompatibel sind.
# ── Chile DIPRES: Ejecución Presupuestaria (Ist / execution) ──────────────────
chile_exec_urls <- list(
`2019` = "https://datos.gob.cl/dataset/79fdfcec-bc20-4d95-8cb7-8ec9b89f0125/resource/1ccf8c55-c2d2-465d-a2cf-412e5086a060/download/ejecucion-presupuestaria_nivel-programa_a-diciembre-2019.csv",
`2021` = "https://datos.gob.cl/dataset/e7cc7d26-2cdc-41e3-bd1d-9464c4fb3b51/resource/2bf2d22b-2046-4043-8610-cb09fb0a1c0f/download/ejecucion-presupuestaria_nivel-programa_a-diciembre-2021.csv",
`2023` = "https://datos.gob.cl/dataset/02bdb8cc-57d8-4464-99ad-22dd410788a6/resource/26ec6603-8fbe-4d2b-8074-fa6c4446cc5f/download/ejecucion-presupuestaria_nivel-programa_a-diciembre-2023.csv"
)
# ── Chile DIPRES: Ley de Presupuestos (Soll / appropriation) ─────────────────
# 2021 = no-covid_19 variant (regular budget only, excl. emergency COVID fund)
chile_ley_urls <- list(
`2019` = "https://datos.gob.cl/dataset/aded9e2b-656d-4ddf-a5eb-a5deb6b594f6/resource/c9b684fc-847f-4eb4-9f77-2bf1aebb5a6e/download/ley-de-presupuestos-inicial-y-vigente_nivel-programa_a-diciembre-2019.csv",
`2021` = "https://datos.gob.cl/dataset/7a9cb24c-0cd9-454c-bb0f-55182e08679a/resource/b3fc2440-93ad-4a4a-82eb-aafcbd1671cf/download/ley-de-presupuestos-inicial-y-vigente_nivel-programa_a-diciembre-2021-no-covid_19.csv",
`2023` = "https://datos.gob.cl/dataset/3bbe2257-7212-404d-a1f8-308ef802cdc9/resource/7aabd30f-85ef-49c1-8808-e77751f01024/download/ley-de-presupuestos-inicial-y-vigente_nivel-programa_a-diciembre-2023.csv"
)
# ── Helper: download + parse DIPRES CSV ───────────────────────────────────────
# Values are in miles de pesos (thousands of CLP). European number format:
# dots = thousands separator, comma = decimal. Filter to PESOS rows and
# expenditure subtítulos (≥ 21); revenue subtítulos (01–20) are excluded.
cache_dir <- here::here("data-in", "chile")
dir.create(cache_dir, showWarnings = FALSE, recursive = TRUE)
locale_cl <- locale(decimal_mark = ",", grouping_mark = ".", encoding = "UTF-8")
read_dipres <- function(year, url, suffix) {
path <- file.path(cache_dir, paste0(suffix, "_", year, ".csv"))
if (!file.exists(path)) download.file(url, path, quiet = TRUE)
# Read everything as character to avoid cross-year type conflicts
# (code columns like Partida, Subtítulo parse inconsistently across years).
# Numeric value columns are parsed explicitly below when needed.
read_delim(path, delim = ";", locale = locale_cl,
show_col_types = FALSE, name_repair = "unique",
col_types = cols(.default = col_character())) %>%
filter(Moneda == "PESOS") %>%
(\(d) if (!"Item" %in% names(d)) mutate(d, Item = NA_character_) else d)() %>%
mutate(year = as.integer(year),
subtitulo = as.integer(`Subtítulo`),
item = as.integer(Item)) %>%
filter(subtitulo >= 21)
}
chile_exec <- imap(chile_exec_urls, \(url, y) read_dipres(y, url, "exec")) %>% bind_rows()
chile_ley <- imap(chile_ley_urls, \(url, y) read_dipres(y, url, "ley")) %>% bind_rows()Die vergleichbaren Haushalte für Chile sind von 2019, 2021 und 2023 (DIPRES, 2026). Für die Jahre 2024 und 2025 sind die Daten nicht vollständig. Diese werden über die API geladen. Soll- und Ist-Daten liegen getrennt vor. Für weitere Informationen zum API-Vorgehen, siehe Code-Chunk.
# ── GDP: World Bank indicator NY.GDP.MKTP.CN (nominal, current local currency)
# CHL → Chilean Pesos (CLP); DEU → Euro (EUR)
# Source: World Bank, World Development Indicators,
# https://data.worldbank.org/indicator/NY.GDP.MKTP.CN
fetch_wb_gdp <- function(iso3, years) {
url <- paste0(
"https://api.worldbank.org/v2/country/", iso3,
"/indicator/NY.GDP.MKTP.CN?date=",
min(years), ":", max(years),
"&format=json&per_page=20"
)
d <- fromJSON(url)[[2]]
setNames(d$value, d$date)[as.character(years)]
}
yrs <- c(2019L, 2021L, 2023L)
gdp_cl <- fetch_wb_gdp("CHL", yrs) # raw CLP → /1e9 for bn CLP
gdp_de <- fetch_wb_gdp("DEU", yrs) # raw EUR → /1e9 for bn EURUm Vergleiche zu erlauben, werden BIP-Daten für Chile und Deutschland über die Weltbank-API geladen (World Bank, 2026).
# Keyword pattern applied to program/item/asignación text columns
# (analogous to Germany's titel_text search in the TexAn method)
kw_es <- regex(
paste0(
"inform[aá]tic|digital|tecnolog[íi]|telecomunic|software|",
"computaci[oó]n|cibersegur|internet|conectiv|",
"sistemas de inform|nube|cloud"
),
ignore_case = TRUE
)
text_cols_cl <- c(
"Nombre Programa", "Nombre Subtítulo", "Nombre Item",
"Nombre Asignación", "Nombre Sub-Asignación"
)
flag_digital <- function(dat) {
dat %>%
mutate(
is_digital_kw = rowSums(across(
any_of(text_cols_cl),
~ str_detect(replace_na(.x, ""), kw_es)
)) > 0,
is_it_svc = subtitulo == 22L & item == 8L # ST22/IT08: Servicios de Informática
)
}
chile_exec <- flag_digital(chile_exec)
chile_ley <- flag_digital(chile_ley)Nun wird eine ähnliche Vorgehensweise verwendet wie beim deutschen Digitalhaushalt in der Studie von Bertschek et al. (2026).
Schlagwortsuche auf Programmebene: Jede Haushaltszeile der chilenischen Daten wurde auf das Vorkommen digitalbezogener Begriffe in den Textspalten geprüft – Programmname, Posten und Zuweisung. Das Muster umfasst zwölf Begriffe, darunter informática, digital, tecnología, software und cloud.
Strukturelle IT-Proxy: Ergänzend wurde ein zweites Kriterium angewendet: Zeilen mit Subtítulo 22, Posten 08 (Servicios de Informática), die standardisierte Haushaltsklassifikation für IT-Dienstleistungen in Chile, wurden unabhängig vom Wortlaut als digital markiert.
Das Ergebnis hiervon ist, dass von den rund 100.000 Ausgabenzeilen (drei Jahre, nur Peso-Ausgaben) 6.251 über Schlagworte und 6.010 über die IT-Klassifikation identifiziert wurden; 76 Zeilen erfüllen beide Kriterien. Zusammen deckt der kombinierte Ansatz 12.185 Zeilen ab.
# Amount columns are character strings in European format (dots = thousands sep,
# comma = decimal). parse_number() with locale_cl handles this correctly.
# Values are in miles de pesos (thousands CLP) → ×1000 for CLP → ÷1e9 for bn CLP.
exec_col <- "Ejecución a DICIEMBRE"
ley_col <- "Monto Ley Inicial"
traj_cl <- chile_exec %>%
mutate(monto = parse_number(.data[[exec_col]], locale = locale_cl)) %>%
group_by(year) %>%
summarise(
total_bn = sum(monto, na.rm = TRUE) * 1e3 / 1e9,
digi_kw_bn = sum(monto[is_digital_kw], na.rm = TRUE) * 1e3 / 1e9,
digi_it_bn = sum(monto[is_it_svc], na.rm = TRUE) * 1e3 / 1e9,
digi_kw_it_bn = sum(monto[is_digital_kw | is_it_svc], na.rm = TRUE) * 1e3 / 1e9,
.groups = "drop"
) %>%
mutate(
gdp_bn = gdp_cl[as.character(year)] / 1e9,
pct_gdp_kw = digi_kw_bn / gdp_bn * 100,
pct_gdp_it = digi_it_bn / gdp_bn * 100,
pct_gdp_kw_it = digi_kw_it_bn / gdp_bn * 100
)Um die digitalbezogenen Ausgaben über die Zeit vergleichbar zu machen, werden die identifizierten Zeilen je Jahr aggregiert und in Relation zum Bruttoinlandsprodukt gesetzt. Dafür gibt es drei Einheiten: Gesamtausgaben, digitale Ausgaben per Schlagwort, digitale Ausgaben per IT-Klassifikation (ST22/08) sowie die Kombination beider Ansätze. Die absoluten Beträge werden durch das nominale BIP des jeweiligen Jahres (Weltbank) geteilt, um einen länderübergreifenden Vergleich zu ermöglichen.
traj_cl %>%
select(year, `Schlagwort` = pct_gdp_kw,
`IT-Klassifikation (ST22/08)` = pct_gdp_it,
`Kombiniert` = pct_gdp_kw_it) %>%
tidyr::pivot_longer(-year, names_to = "Methode", values_to = "pct_gdp") %>%
mutate(Methode = factor(Methode, levels = c(
"Kombiniert", "Schlagwort", "IT-Klassifikation (ST22/08)"
))) %>%
ggplot(aes(x = year, y = pct_gdp, colour = Methode, group = Methode)) +
geom_line(linewidth = 0.9) +
geom_point(size = 3) +
scale_colour_manual(values = c(
"Kombiniert" = hhc_cat_pal[1],
"Schlagwort" = hhc_cat_pal[2],
"IT-Klassifikation (ST22/08)" = hhc_cat_pal[5]
)) +
scale_x_continuous(breaks = c(2019, 2021, 2023)) +
scale_y_continuous(labels = label_percent(scale = 1, suffix = " %"),
limits = c(0, 1.5)) +
labs(
title = "Chilenische Digitalausgaben, 2019–2023",
subtitle = "Anteil am nominalen BIP, nach Identifikationsmethode",
x = NULL, y = "% BIP", colour = NULL
) +
theme_hhc()
Die digitalbezogenen Ausgaben Chiles wachsen kontinuierlich: Der kombinierte Ansatz (Schlagwort + IT-Klassifikation) steigt von 1,0 % des BIP (2019) auf 1,2 % (2023).
# ── Germany: Soll + Ist (Tausend EUR → bn EUR) ────────────────────────────────
traj_de <- df %>%
filter(jahr %in% yrs) %>%
group_by(jahr) %>%
summarise(
digi_soll_bn = sum(digi_soll_eng, na.rm = TRUE) / 1e6,
digi_ist_bn = sum(digi_ist_eng, na.rm = TRUE) / 1e6,
.groups = "drop"
) %>%
mutate(
gdp_bn = gdp_de[as.character(jahr)] / 1e9,
pct_gdp_soll = digi_soll_bn / gdp_bn * 100,
pct_gdp_ist = digi_ist_bn / gdp_bn * 100,
year = as.integer(jahr)
)
# ── Chile: Ley (Soll) trajectory ─────────────────────────────────────────────
ley_col <- "Monto Ley Inicial"
traj_cl_ley <- chile_ley %>%
mutate(monto = parse_number(.data[[ley_col]], locale = locale_cl)) %>%
group_by(year) %>%
summarise(
digi_kw_bn = sum(monto[is_digital_kw], na.rm = TRUE) * 1e3 / 1e9,
digi_it_bn = sum(monto[is_it_svc], na.rm = TRUE) * 1e3 / 1e9,
digi_kw_it_bn = sum(monto[is_digital_kw | is_it_svc], na.rm = TRUE) * 1e3 / 1e9,
total_bn = sum(monto, na.rm = TRUE) * 1e3 / 1e9,
.groups = "drop"
) %>%
mutate(
gdp_bn = gdp_cl[as.character(year)] / 1e9,
pct_gdp_kw = digi_kw_bn / gdp_bn * 100,
pct_gdp_it = digi_it_bn / gdp_bn * 100,
pct_gdp_soll = digi_kw_it_bn / gdp_bn * 100
)
# ── Shared plot helper ────────────────────────────────────────────────────────
plot_comparison <- function(data, title, subtitle) {
ggplot(data, aes(x = year, y = pct_gdp, colour = Reihe,
linetype = Land, group = Reihe)) +
geom_line(linewidth = 0.9) +
geom_point(size = 3) +
scale_colour_manual(values = c(
"Chile" = hhc_cat_pal[5],
"Deutschland" = hhc_cat_pal[1]
)) +
scale_linetype_manual(values = c("Chile" = "dashed", "Deutschland" = "solid"),
guide = "none") +
scale_x_continuous(breaks = c(2019, 2021, 2023)) +
scale_y_continuous(labels = label_percent(scale = 1, suffix = " %")) +
coord_cartesian(ylim = c(0, 2.0)) +
labs(title = title, subtitle = subtitle,
x = NULL, y = "% BIP", colour = NULL) +
theme_hhc()
}bind_rows(
traj_cl_ley %>% transmute(year, Land = "Chile",
Reihe = "Chile · Schlagwort", pct_gdp = pct_gdp_kw),
traj_de %>% transmute(year, Land = "Deutschland",
Reihe = "Deutschland · validiert", pct_gdp = pct_gdp_soll)
) %>%
mutate(Reihe = factor(Reihe, levels = c(
"Chile · Schlagwort",
"Deutschland · validiert"
))) %>%
ggplot(aes(x = year, y = pct_gdp, colour = Reihe,
linetype = Land, group = Reihe)) +
geom_line(linewidth = 0.9) +
geom_point(size = 3) +
scale_colour_manual(values = c(
"Chile · Schlagwort" = hhc_cat_pal[5],
"Deutschland · validiert" = hhc_cat_pal[1]
)) +
scale_linetype_manual(values = c("Chile" = "dashed", "Deutschland" = "solid"),
guide = "none") +
scale_x_continuous(breaks = c(2019, 2021, 2023)) +
scale_y_continuous(labels = label_percent(scale = 1, suffix = " %")) +
coord_cartesian(ylim = c(0, 2.0)) +
labs(
title = "Geplante Digitalausgaben (Soll), 2019–2023",
subtitle = "Anteil am nominalen BIP — Chile (Schlagwort-Proxy) vs. Deutschland (validiert)",
x = NULL, y = "% BIP", colour = NULL
) +
theme_hhc()
Ein Vergleich der geplanten Ausgaben beider Länder ist im Falle Chiles nur anhand der Schlagwortmethode möglich, die, wie im Fazit erläutert wird, nicht zuverlässig ist. Diese Grafik wurde aus Gründen der Transparenz erstellt, stellt jedoch keinen fairen Vergleich zwischen den beiden Ländern dar.
bind_rows(
traj_cl %>% transmute(year, Land = "Chile",
Reihe = "Chile · Schlagwort", pct_gdp = pct_gdp_kw),
traj_cl %>% transmute(year, Land = "Chile",
Reihe = "Chile · IT-Klassifikation (ST22/08)", pct_gdp = pct_gdp_it),
traj_de %>% transmute(year, Land = "Deutschland",
Reihe = "Deutschland · validiert", pct_gdp = pct_gdp_ist)
) %>%
mutate(Reihe = factor(Reihe, levels = c(
"Chile · Schlagwort",
"Chile · IT-Klassifikation (ST22/08)",
"Deutschland · validiert"
))) %>%
ggplot(aes(x = year, y = pct_gdp, colour = Reihe,
linetype = Land, group = Reihe)) +
geom_line(linewidth = 0.9) +
geom_point(size = 3) +
scale_colour_manual(values = c(
"Chile · Schlagwort" = hhc_cat_pal[5],
"Chile · IT-Klassifikation (ST22/08)" = hhc_cat_pal[6],
"Deutschland · validiert" = hhc_cat_pal[1]
)) +
scale_linetype_manual(values = c("Chile" = "dashed", "Deutschland" = "solid"),
guide = "none") +
scale_x_continuous(breaks = c(2019, 2021, 2023)) +
scale_y_continuous(labels = label_percent(scale = 1, suffix = " %")) +
coord_cartesian(ylim = c(0, 1.5)) +
labs(
title = "Tatsächliche Digitalausgaben (Ist), 2019–2023",
subtitle = "Anteil am nominalen BIP — Chile (zwei Proxys) vs. Deutschland (validiert)",
x = NULL, y = "% BIP", colour = NULL
) +
theme_hhc()
Vergleicht man Chile und Deutschland hinsichtlich der Digitalausgaben (Ist), für die uns vollständige Daten für beide Länder vorliegen, so zeigt sich: Berücksichtigt man die Schlagwortanalyse für Chile, scheint Chile fast doppelt so viel für Digitalausgaben auszugeben wie Deutschland. Behält man jedoch die konservativere Klassifizierung im chilenischen Haushalt bei, die nur diejenigen Posten umfasst, die ausdrücklich als IT ausgewiesen sind, so bleibt der Anteil der Digitalausgaben am BIP im Zeitverlauf vergleichbar.
In diesem Kapitel wurde versucht, eine vergleichende Analyse zwischen dem Agora-Ansatz zur Erstellung eines Digitalhaushalts und dem eines anderen Landes anzustellen. Im methodischen Teil ist besonders interessant, dass es in beiden Ländern schwierig ist, die angemessenen Ausgaben für die Digitalisierung zu ermitteln. In beiden Ländern ist die Digitalisierung ein wichtiger politischer Schwerpunkt, was die Notwendigkeit unterstreicht, über klarere Daten zu den Ausgaben zu verfügen, um zu verstehen, wie und wie effektiv diese Mittel ausgegeben werden.