Extra Material Poster

Author

Nino and Dorothee

Natural Experiment: Drought and Forest Loss

Outstanding Drought Event

Drought intensity in the vegetation period from April to October for total soil between 1950 to 2025 in Germany. Taken from UFZ (see https://www.ufz.de/index.php?de=47252).

Forest Loss in Germany

Forest changes (percentage loss of forest cover per hexagon) for all forest types and the period January 2018 – April 2021 (left panel), 2018, 2019, 2020, and January–April 2021. Each hexagon has an area of approx. 87 km. Taken from Thonfeld et al. (2022), Figure 8, Page 562.

Survey Material

Attributes and Levels in the DCE

Attribute Levels Description
Type of forest Broadleaved, Coniferous, Mixed The basic type of the forest.
Number of tree species 1, 2, 3, 4* The number of different tree species in the forest.*
Height of tallest trees in the forest 8m, 18m, 24m Height of the tallest trees in the forest measured in meters.
Forest age variation Single-aged, Two-aged, Multi-aged Size and age-class variation in the forest.
Trees left for natural decay None, Low, Medium Indicator for the presence of deadwood in the forest.
Visitor facilities None, Picnic facilities, Marked trails, Picnic facilities and marked trails Available visitor facilities and infrastructure elements in the forest.
Distance to forest (in kilometers, one-way) I: 0.5, 1, 2, 4, 6, 8, 10, 12; II…; III…; IV…; V: 3, 6, 12, 25, 50, 65, 90, 125 One-way travel distance to the forest. The attribute levels were conditional on the stated status quo travel distance.

Methodology

Methodology: DiD Mixed Logit Model

\[ \begin{aligned} U_{ijt} &= -\beta_{TD} \cdot \biggl( \left( \beta_{FS} + \textcolor{red}{\delta_{TP}^{(FS)} \cdot \text{Treat}_i \cdot \text{Post}_t} + \textcolor{BurntOrange}{\delta_T^{(FS)} \cdot \text{Treat}_i} + \textcolor{CadetBlue}{\delta_P^{(FS)} \cdot \text{Post}_t}\right) \cdot \text{ForestStructures}_{ijt} \\ &\quad \quad - \text{TravelDistance}_{ijt} \bigg) + \epsilon_{ijt} \end{aligned} \]

With:

  • \(\text{TravelDistance}\) and \(\text{ForestStructures}\): attributes from the choice experiment
  • \(\textcolor{BurntOrange}{\text{Treat}}\) and \(\textcolor{CadetBlue}{\text{Post}}\): dummy variables \(\in \{0,1\}\)
  • \(\beta_{TD}\) and \(\beta_{FS}\): effect of travel distance and different forest structures on utility \(U_{ijt}\)
  • Apply propensity score matching to account for sample imbalances

Methodology: DiD Ordinary Least Squares

\[ Y = \beta_0 + \textcolor{red}{\beta_{TP} \cdot \text{Treat}_i \cdot \text{Post}} + \textcolor{BurntOrange}{\beta_{T} \cdot \text{Treat}_i} + \textcolor{CadetBlue}{\beta_{P} \cdot \text{Post}} + \beta_{SocDem} \cdot \text{SocDem} + \epsilon \tag{1}\]

With:

  • \(Y \in \{\text{Number of Forest Visits, Travel Distance to Forest, Time Spent in Forest}\}\)
  • \(\textcolor{red}{\beta_{TP}}\): effect of the treatment on the dependent variable
  • \(\epsilon\): error term
  • Include fixed effects to account for sample imbalances

Treatment group assignment: last forest vs place of residence

Code
ggplot() +   geom_spatraster(data = forest_loss_1km* 100) +
  scale_fill_gradient(
    low = "white",
    high = "orange",
    na.value = "transparent",
    name = "Forest Loss \nwithin 1x1km Cell (%)",
    trans = "sqrt"
  ) +
  geom_sf(data = germany_fed, fill = NA, color = "grey50") + 
  geom_sf(data = buffer_10km, fill = "blue", alpha = 0.15, color = NA) + 
  geom_sf(data = lines_sf, linewidth = 0.7, alpha = 0.5) + 
  geom_sf(data = dep_sf, aes(color = "Departure point", shape = "Departure point"), size = 2, alpha = 0.9) + 
  geom_sf(data = for_sf, aes(color = "Forest", shape = "Forest"), size = 2, alpha = 0.9) + 
  scale_color_manual( name = NULL, values = c( "Departure point" = "blue", "Forest" = "forestgreen" ) ) + 
  scale_shape_manual( name = NULL, values = c( "Departure point" = 16, # filled circle 
                                               "Forest" = 17 # filled triangle
                                               ))  +
                                               theme_minimal() +
  ggspatial::annotation_scale(
    location = "br",          # bottom-left ("br" for bottom-right)
    width_hint = 0.25         # relative width of scale bar
  )

Treatment group assignment: forest loss around place of residence

Sample balance prior to exposure

Control Treatment
Variables n mean sd n mean sd Diff
Age (years) 347 45.59 13.74 347 44.86 13.60 -0.735
Gender (1=female) 347 0.48 0.50 347 0.47 0.50 -0.006
Settlement (1=urban) 347 0.68 0.47 347 0.45 0.50 -0.233***
Higher Education (1=University degree) 347 0.32 0.47 347 0.27 0.45 -0.049
Number forest visits (last visited forest) 347 19.82 51.43 347 24.37 58.15 4.553
Time spent in forest during last visit 347 2.46 1.80 347 2.25 1.58 -0.210
Income categories 340 342 \(\chi^2\)=4.46
Environmental attitudes 346 345 \(\chi^2\)=3.52
Federal state 347 347 \(\chi^2\)=214.10***

Between Sample Balance: Propensity Score Matching

Code
love.plot(
  m.out,
  stats     = "mean.diffs",
  abs       = TRUE,
  var.order = "unadjusted",
  line      = TRUE,
  thresholds = c(m = .1)   # optional threshold line at |SMD| = 0.1
)

Results

Mixed logit models survey waves

Code
ggplot(
  filter(ci_data_match, Group == "match_base"), 
  aes(
    x = factor(
      Coefficient,
      levels = c(
        "Tree height (m)",
        "Low amount of deadwood",
        "High amount of deadwood",
        "Two age classes",
        "Multiple age classes",
        "Monoculture coniferous",
        "Two species coniferous",
        "Two species broadleaf",
        "Two species mixed forest",
        "Three species mixed forest",
        "Four species mixed forest",
        "Picnic facilities",
        "Marked hiking trails",
        "Picnic facilities + hiking trails",
        "ASC (status quo)",
        "Distance (km)"
      )
    ),
    y = Mean,
    color = Model
  )
) +
  geom_rect(
    data = bg_data,
    inherit.aes = FALSE,
    aes(xmin = xmin, xmax = xmax, ymin = -Inf, ymax = Inf),
    fill = "grey95"
  ) +
  geom_point(size = 3, position = position_dodge(width = 0.6)) +
  geom_errorbar(
    aes(ymin = Lower_CI, ymax = Upper_CI),
    width = 0.2,
    position = position_dodge(width = 0.6)
  ) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  labs(
    x = "Coefficient",
    y = "WTT Estimate (km)",
    color = "Model"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  coord_trans(y = "pseudo_log")

Mixed logit interaction effects: Mixed Species (pooled model)

Code
ggplot(all_df, aes(x = group, y = estimate, color = effect)) +
  geom_point(size = 3, position = pd) +
  geom_errorbar(aes(ymin = lower, ymax = upper), width = 0.2, position = pd) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  theme_minimal(base_size = 14) +
  labs(
    x = "DiD parameter",
    y = "Coefficient estimate",
    color = "Interaction effect"
  ) +
  coord_flip() 

Mixed logit distributions: four species mixed forest

Code
plot_mxl_mirrored(models, "four_mix")

Alternatvie treatment classification

Code
ggplot(did_all_mxl, aes(x = factor(clean_param, levels=param_order), y = estimate, color = model)) +
  geom_point(position = position_dodge(width = 0.6), size = 3) +
  geom_errorbar(aes(ymin = lower, ymax = upper),
                position = position_dodge(width = 0.6),
                width = 0.2) +
  geom_hline(yintercept = 0, linetype = "dashed") +
  coord_flip() +
  theme_minimal(base_size = 14) +
  labs(
    x = "DiD parameter",
    y = "Coefficient estimate",
    color = "Model"
  )

Effects on recreational behavior

Num forest visits Travel distance (log) Time spent (h)
Did \(0.29\) \(0.43^{**}\) \(0.29^{*}\)
\((5.07)\) \((0.15)\) \((0.16)\)
high forest loss \(5.12\) \(-0.31^{**}\) \(-0.22^{*}\)
\((5.08)\) \((0.13)\) \((0.12)\)
year2025 (post) \(-4.87\) \(-0.28\) \(-0.79^{***}\)
\((2.84)\) \((0.16)\) \((0.07)\)
age \(0.17^{*}\) \(-0.01^{***}\) \(-0.01^{***}\)
\((0.10)\) \((0.00)\) \((0.00)\)
female \(1.73\) \(0.05\) \(-0.08\)
\((2.18)\) \((0.05)\) \((0.07)\)
university degree \(-2.39\) \(0.37^{***}\) \(0.32^{***}\)
\((2.43)\) \((0.11)\) \((0.07)\)
hh income: €2,000–2,499 \(-3.24\) \(0.01\) \(0.01\)
\((2.95)\) \((0.14)\) \((0.11)\)
hh income: €2,500–4,599 \(-2.73\) \(0.33^{**}\) \(0.33^{***}\)
\((2.80)\) \((0.13)\) \((0.10)\)
hh income: \(\ge\) €4,600 \(-2.23\) \(0.35^{***}\) \(0.60^{***}\)
\((3.89)\) \((0.12)\) \((0.12)\)
hh income: DK/Refuse \(1.45\) \(0.13\) \(-0.06\)
\((6.80)\) \((0.14)\) \((0.14)\)
Num. obs. \(2178\) \(2176\) \(2178\)
Num. groups: bundesland_depart \(16\) \(16\) \(16\)
Num. groups: urban \(2\) \(2\) \(2\)
Adj. R\(^2\) (full model) \(0.03\) \(0.10\) \(0.12\)
Adj. R\(^2\) (proj model) \(0.00\) \(0.04\) \(0.08\)

\(^{***}p<0.01\); \(^{**}p<0.05\); \(^{*}p<0.1\).

Correlation forest loss and perceived drought

Effect of perceived drought on behavior

Num forest visits Travel distance (log) Time spent (h)
drought index \(0.61\) \(-0.04\) \(-0.06^{***}\)
\((0.54)\) \((0.03)\) \((0.02)\)
age \(0.18^{**}\) \(-0.02^{***}\) \(-0.02^{***}\)
\((0.07)\) \((0.00)\) \((0.00)\)
female \(2.59\) \(0.02\) \(-0.02\)
\((1.99)\) \((0.11)\) \((0.06)\)
university degree \(-1.09\) \(0.27^{*}\) \(0.24^{***}\)
\((3.82)\) \((0.14)\) \((0.08)\)
hh income: €2,000–2,499 \(-1.97\) \(0.14\) \(0.12\)
\((3.72)\) \((0.13)\) \((0.14)\)
hh income: €2,500–4,599 \(-3.82\) \(0.37^{***}\) \(0.32^{***}\)
\((5.07)\) \((0.11)\) \((0.08)\)
hh income: \(\ge\) €4,600 \(-2.75\) \(0.58^{***}\) \(0.51^{***}\)
\((4.88)\) \((0.15)\) \((0.13)\)
hh income: DK/Refused \(-3.85\) \(0.43^{**}\) \(0.09\)
\((6.49)\) \((0.18)\) \((0.13)\)
life satisfaction \(-0.81^{*}\) \(0.04^{*}\) \(0.07^{***}\)
\((0.42)\) \((0.02)\) \((0.01)\)
Num. obs. \(2263\) \(2263\) \(2263\)
Num. groups: bundesland \(16\) \(16\) \(16\)
Num. groups: urban \(2\) \(2\) \(2\)
Adj. R\(^2\) (full model) \(0.04\) \(0.11\) \(0.19\)
Adj. R\(^2\) (proj model) \(0.00\) \(0.06\) \(0.10\)

\(^{***}p<0.01\); \(^{**}p<0.05\); \(^{*}p<0.1\).

Further material

Socio-demografics matched sample

Variable 2017_C 2017_T 2025_C 2025_T
Age (mean) 45.37 44.64 47.67 46.76
Household size (mean) 2.17 2.37 2.18 2.20
Education: Lower secondary 4.27 2.10 5.06 2.50
Education: Upper secondary 18.60 21.56 17.86 18.44
Education: Vocational training 44.51 48.80 46.13 51.88
Education: Bachelor 10.67 9.88 9.82 10.00
Education: Master / PhD 21.95 17.66 21.13 17.19
Settlement: Rural \(<\)500 5.49 14.67 4.46 8.75
Settlement: Small town 500–20k 26.83 41.32 30.65 42.19
Settlement: Town 20–100k 20.12 20.36 16.67 21.88
Settlement: City \(>\)100k 47.56 23.65 48.21 27.19
Gender: Female 47.56 47.01 48.81 47.50
Gender: Male 52.44 52.99 51.19 52.50
HH income: \(<\) €2,000 35.37 31.44 31.85 35.00
HH income: €2,000–2,499 15.24 18.56 15.18 16.56
HH income: €2,500–4,599 20.43 21.56 26.19 21.88
HH income: \(\ge\) €4,600 19.82 16.47 17.86 19.06
HH income: DK/Refused 9.15 11.98 8.93 7.50
Observations 328 334 336 320