1 Introduction
Figure 1.1: Marburg’s riverfront and hilltop castle.
In 2021, Germany adopted the National Cycling Plan 3.0, setting the goal of becoming a “cycling nation.” Policymakers promoted cycling as climate-neutral, affordable, and space-efficient – all of which are qualities that directly tie to national climate targets (BMVI, 2021). Recent studies suggest that raising cycling’s share of short trips from the current 13 percent to 45 percent by 2035 could save nearly 20 million tonnes of CO₂ annually (Doll et al., 2024). Cycling is also a major economic driver: in 2022, cycling tourism generated more than 30 million day trips and 5 million overnight stays across Germany (ZIV, 2023). With Marburg being located on the Lahn Valley Cycle Route and home to a large student population, there is strong potential for cycling to become an even greater part of daily life in the city.
Despite this ambitious national cycling vision, Germany’s transport sector has stalled on greenhouse-gas reductions over the past decade, highlighting why promoting cycling is a priority (UBA, 2023). Yet, safety perceptions remain one of the greatest barriers to wider adoption. Research consistently shows that perceptions of safety often weigh as heavily as objective crash data in shaping behavior (Ma & Dill, 2017; Iwińska et al., 2018). Recent German studies confirm this pattern. Von Stülpnagel et al. (2022) found that cyclists rated wide, physically separated cycle tracks and colored lanes as significantly safer than painted lanes or mixed-traffic routes. A 2020 Berlin survey of 22,000 residents similarly showed that protected and visually distinct infrastructure was perceived as far safer than standard setups (Radwege-Check, 2023). In Aachen, Bosen et al. (2025) showed that close motorist overtakes (measured with OpenBikeSensors and the SimRa app) influenced cyclists’ sense of safety, and that both physical and social vulnerability shaped experiences of risk. Their mixed-methods approach reveals that equity factors, such as gender and caregiving responsibilities, interact with infrastructure to influence perceptions of safety, highlighting the need for more inclusive transportation planning.
These findings align with earlier international work showing the mismatch between “objective” and “perceived” cycling risk (Ma & Dill, 2017) and demonstrate that subjective safety cannot be ignored if cities like Marburg wish to boost cycling numbers. The approach taken here replicates the peer-reviewed study “A Spatial and Demographic Analysis of Cycling Safety Perceptions: A Case Study in Eau Claire, Wisconsin, USA” (Haffner et al., 2024). By applying the same methodology in Marburg, this study provides a cross-cultural comparison and produces insights that can guide local planners in improving safety and accessibility for cyclists across the city.
2 Survey instrument
Figure 2.1: The front page of the survey.
The analysis of cycling safety in Marburg, Germany, relied on two primary data sets that were derived from an online survey that was given to local cyclists. This survey was available in both German and English. The survey was distributed to residents of Marburg through three methods: distribution of flyers with a QR code that provided a link to the survey, an email distributed to students of Philipps-Universität Marburg which contained the survey link, and by general word of mouth. The first data set contains geometry and geospatial information that represents the locations users found unsafe. This data was gathered by asking respondents to plot points on a constructed map.
The second data set provides additional information and context for the cycling safety survey conducted in Marburg. The CSV format includes responses to the survey. It covered various aspects such as:
- Demographic information
- Type of bicycle respondents owned
- Reasons for cycling
The survey instrument was created with R’s web framework Shiny along with other packages such as shinydashboard, leaflet, and sf. Prospective respondents were presented with a map on which they were instructed to identify points where they feel unsafe riding a bicycle as well as answering the following questions:
“How confident do you feel in your cycling ability?” Respondents are given a scale from 1 ‘Not confident,’ to 7 ‘Very confident.’
“How much does safety influence where you ride?” This scale is also rated 1-7, one being not at all influenced by safety, and seven, very much influenced by safety.
The respondents are then asked six questions that use a drop down bar to respond. They ask:
“Approximately how many trips do you take by bike per week?” The options for responding are, 0-3, 4-7, 8-12, 13-20, and 20+.
“How often do you wear a helmet when riding a bike?” The options for responding to this question are, “Never,” “Sometimes,” and “Always.”
“How often do you ride with children?” The options for responding to this are, “Never, Rarely, Often, Always.”
The survey moves to demographic questions using the drop down response method, asking the respondent information about their age and gender.
3 Demographic comparisons
gender_con <- df %>% filter(gender == "Female" | gender == "Male")
## finding mean confidence by gender
mean_confidence <- gender_con %>%
group_by(gender) %>%
summarize(mean_conf = mean(confidence, na.rm = TRUE))
## creating separate gendered data sets for better organization
male_conf <- gender_con %>%
filter(gender == "Male")
female_conf <- gender_con %>%
filter(gender == "Female")
## creation of objects to allow for easier in-text references
## female desc. stats
fcmean <- mean(female_conf$confidence)
fcmedian <- median(female_conf$confidence)
fcsd <- sd(female_conf$confidence)
## male desc. stats
mcmean <- mean(male_conf$confidence)
mcmedian <- median(male_conf$confidence)
mcsd <- sd(male_conf$confidence)
## wilcox test on gendered cycling confidence
wilcox_confidence <- wilcox.test(confidence ~ gender, data = gender_con)
The survey found no statistically significant difference in cycling confidence between men and women. Although the mean scores show women reported slightly higher confidence than men in Marburg, with women having a mean of 6.24 and men 5.82 , this difference is not statistically significant. The Wilcox test (W = 133.5, p = 0.941) confirmed that the p-value of 0.941 is much higher than the 0.05 threshold, indicating that gender does not appear to play a significant role in cycling confidence based on this data.
We created a graph which illustrates a difference in the percentage of recorded answers pertaining to cycling confidence across gender (see Figure 3.1). Both distributions are unimodal and are left-skewed. Comparing the two distributions, women have both a higher mean (6.24) and median (6.35) of respondents’ confidence than men (mean = 5.82, median = 6.8), with women’s standard deviation being 0.64 and men’s standard deviation being 1.74. In terms of distribution, there is a higher concentration of male responses in the range of one to around five, and a greater concentration of female responses in the range of five to seven.Figure 3.1: Distribution of responses across gender for cycling confidence
## finding mean
mean_confidence <- gender_con %>%
group_by(gender) %>%
summarize(mean_conf = mean(confidence, na.rm = TRUE))
## creation of gender safety influence dataset for organization
gender_si <- df %>% filter(gender== "Female" | gender == "Male")
## producing mean for visual confirmation
mean_safe <- gender_si %>%
group_by(gender) %>%
summarize(mean_safe = mean(safety_influence, na.rm = TRUE))
## separation of gender values for reference in text
## female desc. stats
female_si <- gender_si %>%
filter(gender == "Female")
fsimean <- mean(female_si$safety_influence)
fsimedian <- median(female_si$safety_influence)
fsisd <- sd(female_si$safety_influence)
## male desc. stats
male_si <- gender_si %>%
filter(gender == "Male")
msimean <- mean(male_si$safety_influence)
msimedian <- median(male_si$safety_influence)
msisd <- sd(male_si$safety_influence)
## wilcox test of safety influence across gender
wilcox_test_safe <- wilcox.test(safety_influence ~ gender, data = gender_si)
A Wilcox test (W = 189, p = 0.058) revealed a non-statistically significant difference, with women having a slightly higher mean (5.28) than men (4.26). This result indicates that there is no statistically significant difference in the way that men and women in Marburg are influenced in their decision ride location by their perception of safety. However, with the p-value being so close to the margin of statistical significance (0.05), we found that we could extract some observations about what the data may illustrate. While the difference is not statistically significant, there is still a noticeable gap in the influence that safety has in riding location across gender, with women having a higher mean than men. Woman also have a higher median (6) than men (5), with a small difference in standard deviation (women = 1.62, men = 1.64) These observations may indicate that women may place more of an emphasis on safety than men when it comes to considering a location to ride in.
We created a graph which illustrates a difference in the percentage of recorded answers pertaining to the influence of safety when determining a riding location across gender (see Figure 3.2). Comparing the two distributions, there is an observable difference between the amount of peaks, with the female distribution being unimodal (one peak) while the male distribution is tending towards bimodal (two peaks). Both distributions are left-skewed as well, similar to the previous figure of confidence across gender. One thing of note is the higher concentration of male responses at safety influences lower than six when compared to female responses, while female responses have a higher concentration at safety influences six and higher.
knitr::opts_chunk$set(echo = TRUE)
## safety influence by gender density plot
ggplot(gender_si, aes(x=safety_influence, color = gender, fill = gender)) +
geom_density(alpha = 0.5) +
scale_color_manual(values = c("Female" = female_color, "Male" = male_color)) +
scale_fill_manual(values = c("Female" = female_color, "Male" = male_color)) +
labs(x = "Safety Influence",
y = "Density",
color = "Gender",
fill = "Gender",
title = "Safety Influence by Gender of Respondents")
Figure 3.2: Distribution of responses across gender for the influence of safety
## creation of new dataset for organization
gender_nwt <- df %>%
mutate(
weeklytripnum = case_when(
number_of_trips == "0-3" ~ 1,
number_of_trips == "4-7" ~ 2,
number_of_trips == "8-12" ~ 3,
number_of_trips == "13-20" ~ 4,
number_of_trips == "20+" ~ 5,
TRUE ~ NA_real_)) %>%
filter(gender == "Female" | gender == "Male")
## this new data set converts the string-formatted wkly trip number responses
## to numeric in order to conduct a wilcox test
## wilcox test on weekly trip number across gender using created variable
wilcox_test_tripnum <- wilcox.test(weeklytripnum ~ gender, data = gender_nwt)
## creation of mode function to collect modes for bar chart
get_mode <- function(x, na.arm = TRUE) {
uniq_vals <- unique(x)
uniq_vals[which.max(tabulate(match(x, uniq_vals)))]
}
## creation of gendered datasets to simplify process, then collecting modes using created function
female_nwt <- gender_nwt %>%
filter(gender == "Female")
fnwtmode <- get_mode(female_nwt$number_of_trips)
male_nwt <- gender_nwt %>%
filter(gender == "Male")
mnwtmode <- get_mode(male_nwt$number_of_trips)
## creation of data set to use percentages in table
female_nwt_percentages <- female_nwt %>%
group_by(number_of_trips) %>%
count(number_of_trips) %>%
mutate(percentage = n / 16 * 100)
kable(female_nwt_percentages, caption = "Frequency of female responses",
col.names = c("Number of Trips", "Count", "Percentage"))
| Number of Trips | Count | Percentage |
|---|---|---|
| 0-3 | 1 | 6.25 |
| 4-7 | 3 | 18.75 |
| 8-12 | 2 | 12.50 |
| 13-20 | 4 | 25.00 |
| 20+ | 6 | 37.50 |
## creation of data set to use percentages in table
male_nwt_percentages <- male_nwt %>%
group_by(number_of_trips) %>%
count(number_of_trips) %>%
mutate(round((percentage = n / 17 * 100),2))
kable(male_nwt_percentages, caption = "Frequency of male responses",
col.names = c("Number of Trips", "Count", "Percentage"))
| Number of Trips | Count | Percentage |
|---|---|---|
| 0-3 | 3 | 17.65 |
| 4-7 | 2 | 11.76 |
| 8-12 | 1 | 5.88 |
| 13-20 | 6 | 35.29 |
| 20+ | 5 | 29.41 |
A Wilcox test (W = 147.5, p = 0.681) indicates that there is no significant difference in the number of trips men and women take throughout the week, with both genders participating in cycling at similar rates. This data indicates that there isn’t a large difference in the amount of weekly trips males and females may take, meaning that gender may not strongly influence cycling frequency in Marburg.
To visually represent the distribution of weekly bike trips across gender, we constructed a bar graph (see Figure 3.3). It is observable that more respondents, both male and female, tend to go on a higher amount of cycling trips weekly, with the most common response for males being 13-20 and the most common response for females being 20+.
knitr::opts_chunk$set(echo = TRUE)
## number of trips bar chart
df_num_trips <- df %>%
group_by(gender) %>%
count(number_of_trips) %>%
filter(gender %in% c("Female", "Male")) %>%
na.omit(number_of_trips) %>%
mutate(Gender = gender)
ggplot(df_num_trips, aes(fill = Gender, y = n, x = number_of_trips)) +
geom_bar(position = "dodge",
stat = "identity",
alpha = 0.5,
color = "black") +
scale_fill_manual(values = c("Female" = female_color, "Male" = male_color)) +
xlab("Number of trips") +
ylab("Frequency")
Figure 3.3: Frequencies of gendered responses for number of weekly riding trips
4 Usage and Bike Type Tables
A significant majority of respondents use city bikes in Marburg, Germany, suggesting that the city’s infrastructure is particularly well-suited for this type of bicycle. This preference possibly stems from the comfort and convenience city bikes offer for everyday travel, especially within urban environments and infrastructure that supports cycling. (See table 4.1)
## displaying table
biketype_df %>%
kable("html", col.names = c("Bike Type", "Total"), caption = "Respondents' bicycle usage across type") %>%
kable_styling(bootstrap_options = c( "hover", "condensed"),
full_width = TRUE)
| Bike Type | Total |
|---|---|
| City Bike | 28 |
| Mountain Bike | 10 |
| Road/Gravel Bike | 8 |
| Cargo Bike | 3 |
| E-Bike | 3 |
Cyclists in the city of Marburg ride for a variety of reasons, including:
- Recreation
- Transportation
- Exercise
Survey results show that cycling for transportation and recreation are the most common purposes for cycling trips for respondents in Marburg. This data may support the notion that bike usage is rising in Marburg and thus resulting in a larger presence of cycling as a alternate mode of transportation. (See table 4.2)
## displaying table
bikeusage_df %>%
kable("html", col.names = c("Bike Usage", "Total"), caption = "Respondents' bicycle usage in Marburg") %>%
kable_styling(bootstrap_options = c( "hover", "condensed"),
full_width = TRUE)
| Bike Usage | Total |
|---|---|
| Transportation | 29 |
| Recreation | 27 |
| Exercise | 14 |
5 Heat Map
Figure 5.1: Shared-use path sign: cycling permitted at walking speed (“Schritttempo”).
The heat map visualizes where respondents most frequently marked locations as unsafe to cycle. Warmer colors mark concentrations of individual reports, created by smoothing survey responses into a continuous density surface. In Marburg, the intensity is greatest in the city center and along multi-lane, multi-modal, and heavily trafficked corridors leading into it. Pilgrimstein at Weidenhäuser Brücke and the intersection of Ketzerbach and Elisabethstraße notably stand out as conflict points where streets, transit, and cyclists converge. Because the map aggregates perceived risk, hot spots may reflect a combination of (a) genuine conflict points, (b) places people ride frequently (and therefore notice more issues), and (c) visibility biases (downtown familiarity, commute paths, etc.). Interpretation therefore should consider exposure in addition to density.
library(leaflet)
library(leaflet.extras)
# Weight Column
pts$w <- 1
pts_df <- pts %>% sf::st_set_geometry(NULL)
# Rainbow-style gradient
grad <- c(
"0.05" = "blue",
"0.10" = "green",
"0.20" = "yellow",
"0.30" = "orange",
"0.40" = "red"
)
heat_map <- leaflet(pts) %>%
setView(
zoom = 12,
lng = mean(pts_df$x, na.rm = TRUE),
lat = mean(pts_df$y, na.rm = TRUE)
) %>%
addProviderTiles("CartoDB.Positron",
group = "Light",
options = providerTileOptions(opacity = 0.85)) %>%
# Dark basemap for comparison
addProviderTiles("CartoDB.DarkMatter",
group = "Dark") %>%
# Heatmap with rainbow gradient
addHeatmap(
lng = ~x, lat = ~y,
intensity = ~w,
radius = 22,
blur = 18,
minOpacity = 0.3,
max = 1, # tweak this to control saturation
gradient = grad,
group = "Heat Map"
) %>%
addCircleMarkers(
lng = pts_df$x, lat = pts_df$y,
fillOpacity = 0.5, color = "white",
stroke = FALSE, radius = 5,
group = "Individual points"
) %>%
addLayersControl(
baseGroups = c("Light", "Dark"),
overlayGroups = c("Heat Map", "Individual points"),
options = layersControlOptions(collapsed = FALSE)
) %>%
hideGroup("Individual points")
heat_map
6 Cluster Map
Figure 6.1: Bicycle contraflow sign on a one-way street in Marburg’s Altstadt.
To complement the heat map, we applied DBSCAN clustering to detect statistically meaningful hotspots of unsafe reports. Using a 175-meter distance threshold and a minimum of five points per cluster, we identified three distinct clusters across Marburg. Two are concentrated in the city center, along multi-modal corridors such as Pilgrimstein, Universitätsstraße, Ketzerbach, Elisabethstraße, and Bahnhofsstraße, where several major routes converge. A smaller, localized third cluster appears to the southwest of these larger clusters, near Schwanallee and Wilhelmstraße. Overall, the analysis shows that unsafe reports are not evenly distributed but rather concentrated along several major intersections and corridors within Marburg.
7 Limitations
While this study provides insight into cycling safety perceptions in Marburg, several limitations must be acknowledged when interpreting the results.
First, the survey relied on voluntary participation, which may have skewed the sample toward individuals already highly interested with cycling. The survey was primarily distributed via university networks, QR-code flyers, and word-of-mouth. These methods likely concentrated responses among student and academic populations, making the resulting sample unlikely to represent all demographic groups equally.
Second, while the dataset itself is objective (geolocated points and survey responses), it reflects riders’ perceptions of safety rather than crash or conflict statistics. Perceptions are shaped by factors like exposure, route familiarity, and recent experience, meaning hotspots may partly reflect where people ride most often.
Third, technical and design constraints affected data quality. For instance, respondents may have placed points imprecisely on the digital map, and cluster detection which relied on distance thresholds were influenced by these results. Data collection also happened at a single point in time. Cycling safety perceptions can shift seasonally due to changing weather conditions or infrastructure changes. This study therefore only provides a snapshot into these perceptions.
Fourth, demographic questions were limited in scope, which reduced the ability to analyze intersectional factors like income, caregiving, or disability. Gender responses were also limited to binary options plus an “other” category, which restricts comprehensive analysis of gender-diverse experiences. Recognizing these limitations points toward ways that future research can expand and strengthen upon the study.
8 Future Research
This study builds off of the approach first developed in A Spatial and Demographic Analysis of Cycling Safety Perceptions: A Case Study in Eau Claire, Wisconsin, USA (Haffner et al., 2024). The long-term goal is to build a broader comparative analysis by applying the same methodology to multiple locations. This will help researchers identify which cycling infrastructure designs prove most or least effective across cultural and geographic contexts.
Expanding the analysis beyond simple questions about gender is also critical. Gathering information on age, income, occupation, caregiving responsibilities, and disability status would give focus to the safety concerns of underrepresented groups who may differ in accessibility needs. Moreover, linking perception data to observed risk through police crash reports or sensor-based overtaking measures could help assess the discrepancies in objective outcomes and subjective experience.
9 Conclusion
The national efforts to make Germany a “cycling nation” hinge on understanding how cities are progressing – and where gaps remain – in cycling infrastructure. In the 2024 Bicycle Climate Test, Marburg earned its best score (2.1) for its public bike-share system, while respondents identified narrow path widths, construction detours, and weak enforcement of parking on cycle lanes as shortcomings (Marbuch Verlag, 2024). These varying perceptions capture Marburg’s current moment – one that is advancing toward stronger cycling culture and continues to grapple with practical obstacles over safety. Our analysis contributes to the ongoing discourse by providing a spatial and demographic angle on those experiences, revealing where perceptions of safety take form within Marburg’s landscape.
Mapping this perceived risk humanizes objective stats on cycling safety. Our heat map and DBSCAN clusters indicate that concerns become highly concentrated along Marburg’s most heavily trafficked corridors - roads like Pilgrimstein, Universitätsstraße, Ketzerbach–Elisabethstraße, and Bahnhofsstraße. At the same time, demographic comparisons point to men and women having more or less the same level of confidence and sensitivity towards safety. When combined, this data can help planners identify problematic locations and potential spot fixes, helping expand a comfortable, connected network that a true “cycling nation” requires.
10 References
BMVI / Federal Ministry of Transport and Digital Infrastructure (Germany). (2021). National Cycling Plan 3.0: Germany – a cycling nation 2030 [PDF]. https://www.isi.fraunhofer.de/content/dam/isi/dokumente/ccn/2021/national-cycling-plan-3-0.pdf
Bosen, A., Kuhn, S., Klement, S., & Buehler, R. (2025). Too close for cycling comfort? Social and physical contributors to subjective cycling safety in the context of overtaking: Results from a mixed-methods study combining data from OpenBikeSensors, the SimRa app, and qualitative interviews. Urban Mobility, 5, 100123. https://doi.org/10.1016/j.urbmob.2025.100123
Doll, C., Brauer, C., Duffner-Korbee, D. (2024). The potential of cycling for climate protection and livable urban centers and regions: New methods for forecasting supply and demand in Germany as a cycling nation up to 2035. Fraunhofer ISI https://www.isi.fraunhofer.de/content/dam/isi/dokumente/ccn/2024/2024-05_adfc_cycling_potentials_germany_summary.pdf
Haffner, M., Walker, N., Grunzke, S., St. Ores, M. (2024). A spatial and demographic analysis of cycling safety perceptions: A case study in Eau Claire, Wisconsin, USA. Region: The Journal of Regional Analysis & Policy, 11(2). https://doi.org/10.18335/region.v11i2.480
Iwińska, K., et al. (2018). Cycling in Warsaw, Poland – Perceived enablers and barriers. Transportation Research Part F: Traffic Psychology and Behaviour. https://doi.org/10.1016/j.tra.2018.04.014
Ma, L., & Dill, J. (2017). Do people’s perceptions of neighborhood bikeability match up with the built environment? Journal of Transport and Land Use, 10(1). https://www.jstor.org/stable/26211732
UBA (Umweltbundesamt). (2023). Germany’s greenhouse gas emission projections under the United Nations Framework Convention on Climate Change: National inventory report 2023 (Publication No. 29/2023). https://www.umweltbundesamt.de/sites/default/files/medien/11850/publikationen/29_2023_cc_submission_under_the_united_nations_framework_convention.pdf
von Stülpnagel, R., Lucas, K., & Binnig, A. (2022). Cyclists’ perceptions of safety on separated and mixed-traffic routes: Comparing objective and subjective safety in Germany. Accident Analysis & Prevention, 166, 106470. https://doi.org/10.1016/j.aap.2021.106470
ZIV – Zweirad-Industrie-Verband. (2023). Cycle tourism and everyday cycling in Germany 2022: Facts and figures.