(1) Loading data and filtering for oak species and forest types

library(tidyverse)
stdstk_path <- '/Users/eyackulic/Downloads/std-stk.rds'
sum_path <- '/Users/eyackulic/Downloads/fvs_oak_woodlands_summary.rds'

Even though this FVS run was specified to FIA stands that occurred in oak woodlands, we filter for those that contain black oaks. We also filter for post-treatment years to identify where prescriptions were carried out in FVS (Step 2)

We might also want to compare changes in mortality later that are due to treatment. The value is calculated as the mortality between time steps. In general, we use a 5 year timestep in our simulation, but there are a couple individual years that are recorded for specifying the timing of disturbance/response. We select those and multiply the ‘MrtTPA’ values by 5 to be consistent with estimates at other years.

stdstk <- 
  stdstk_path |> 
  readRDS() |>
  dplyr::mutate(
    group = NA,
    group = dplyr::if_else(
      substr(Species,0,4) %in% 'QUKE','Oaks', group),
    group = dplyr::if_else(substr(Species,0,2) == 'PI','Pines', group),
    MrtTPA = dplyr::if_else(Year %in% c(2030,2031,2036),MrtTPA * 5, MrtTPA)
  )

summary <- 
  sum_path |>
  readRDS() |>
  dplyr::filter(CaseID %in% stdstk$CaseID)

(2) identify where actions occurred

FVS delivers stand reports for every stand in a simulation, regardless of whether or not it qualified for treatment based on FVS’ internal parameters. When trees are removed for commercial uses, FVS clearly reports this in the ‘RmvCode’ field in the summary document. However, it is more difficult disentangling which stands received treatment when the prescription is burning (i.e., prescribed burn / grapple pile) or designed to have a minimal, non-harvest effect (i.e., mowing, herbivory, herbicide, revegetation). In the case of herbivory, trees are neither being added or removed, but simply pruned. While the record of treatment is not intuitive for these treatments, there is an artifact left behind by FVS: by comparing each record with its counterfactual, BAU expectation, we can see fractional differences in TPA in the years following treatment, even in the case of minimally invasive treatments. The following function iteratively compares management and BAU scenarios to determine which stands received treatment for each different prescription.

treatedStands <- function(summary){
  for(i in 1:length(unique(summary$MgmtID))){
    mgmt_id <-unique(summary$MgmtID)[i]
    if(i == 1){
      out <-  
        summary |>
        dplyr::filter(MgmtID %in% c('BASE',mgmt_id) & Year %in% 2031) |>
        dplyr::group_by(StandID) |>
        dplyr::select(StandID, MgmtID, CaseID) |>
        dplyr::distinct()  
      tot_out <- out
    }  
    out <-  
      summary |>
      dplyr::filter(MgmtID %in% c('BASE',mgmt_id) & Year %in% 2031) |>
      dplyr::group_by(StandID) |>
      dplyr::arrange(StandID, MgmtID) |>
      dplyr::mutate(r = Tpa - dplyr::first(Tpa)) |>
      dplyr::filter(r > 0.005 | r < -0.005) |>
      dplyr::select(StandID, MgmtID, CaseID) |>
      dplyr::distinct()
    
    tot_out <- dplyr::bind_rows(out, tot_out)
  }
  tot_out
}

treated_stands <- treatedStands(summary)
table(treated_stands$MgmtID)
## 
## BASE CMCC CMUR HCTA HERB MRCC MRCT MTIR MTTH MTUR REVA RMGP RMMA RMTF RXAI RXGF 
##  550  447  393    8   57  420  206  237  136  301  550  469  393  231  538  538

The following plots display stdstk changes across pines, oaks, and other trees. In particular, note the lack of harvested oaks in the fourth plot and the general decreases in non-oaks associated with treatment.

#(3) compare (sdi/tpa/ba/mort) responses across functional groups (oaks/pines/etc) and treatments

stdstk |>
  ggplot(aes(x = Year, y = LiveBA, color = group)) + facet_wrap(~MgmtID, scales = 'free_y') +
  geom_smooth() + xlim(2025,2060) + tidyquant::theme_tq()

stdstk |>
  ggplot(aes(x = Year, y = LiveTpa, color = group)) + facet_wrap(~MgmtID, scales = 'free_y') +
  geom_smooth() + xlim(2025,2060) + tidyquant::theme_tq()

stdstk |>
  ggplot(aes(x = Year, y = MrtTPA, color = group)) + facet_wrap(~MgmtID, scales = 'free_y') +
  geom_smooth() + xlim(2025,2060)+ tidyquant::theme_tq()

#no oaks being harvested or cut
stdstk |>
  ggplot(aes(x = MgmtID, y = HrvTPA, color = group)) + facet_wrap(~MgmtID, scales = 'free') +
  geom_boxplot()+ tidyquant::theme_tq()

RF Generation

In the next step, RFs are calculated for oak trees for all years in comparison to the pre-treatment observation (2029). SDI is not inherently part of the std-stk output, so it is calculated here along with qmd (SDI is correct - I have compared with stand level estimates in the Summary table). Values are summed to the stand level and RFs are calculated as (post-pre)/pre, with all values constrained to a range of -1:1. RFs are calculated for SDI, BA, Tpa, and Mortality for comparison.

#(4) present rfs and n

oak_responses <-
  stdstk |>
  dplyr::filter(Year %in% c(2029:2060) & #years for RFs
                  !Species %in% 'All' &
                  DBHClass %in% 'All' &
                  group %in% 'Oaks' & #oak specific
                  CaseID %in% treated_stands$CaseID) |> #treatments that happened
  dplyr::group_by(MgmtID, StandID, Species, Year) |>
  dplyr::arrange(StandID, MgmtID,Year) |>
  dplyr::mutate(
    ba_per_tree = LiveBA/LiveTpa,
    qmd = sqrt((ba_per_tree/0.005454154)), #calculate qmd
    sdi = LiveTpa * (qmd/10)^1.605 #and sdi
  ) |>
  dplyr::ungroup() |>#drop species grouping
  dplyr::group_by(MgmtID, StandID, Year) |>
  dplyr::reframe(
    year = Year,
    stand_sdi = sum(sdi),#sum to stand level
    stand_tpa = sum(LiveTpa),
    runTitle = RunTitle,
    stand_ba = sum(LiveBA),
    stand_mort = sum(MrtTPA)
  ) |>
  dplyr::distinct() |>
  dplyr::group_by(MgmtID, StandID) |>
  dplyr::mutate(
    sdi_response = (stand_sdi - dplyr::first(stand_sdi)) / dplyr::first(stand_sdi),
    sdi_response = dplyr::if_else(sdi_response >= 1, 1, sdi_response),
    sdi_response = dplyr::if_else(sdi_response <= -1, -1, sdi_response),
    tpa_response = (stand_tpa - dplyr::first(stand_tpa)) / dplyr::first(stand_tpa),
    tpa_response = dplyr::if_else(tpa_response >= 1, 1, tpa_response),
    tpa_response = dplyr::if_else(tpa_response <= -1, -1, tpa_response),
    ba_response = (stand_ba - dplyr::first(stand_ba)) / dplyr::first(stand_ba),
    ba_response = dplyr::if_else(ba_response >= 1, 1, ba_response),
    ba_response = dplyr::if_else(ba_response <= -1, -1, ba_response),
    mort_response = (stand_mort - dplyr::first(stand_mort)) / dplyr::first(stand_mort),
    mort_response = dplyr::if_else(mort_response >= 1, 1, mort_response),
    mort_response = dplyr::if_else(mort_response <= -1, -1, mort_response),
  ) |>
  dplyr::as_tibble() |>
  dplyr::select(c(
    year, MgmtID, StandID, sdi_response,tpa_response,ba_response,mort_response))

RF Reporting

The RFs recorded in the last step are what we are currently reporting for FVS-derived RFs. But there is a systematic flaw with these values: because FVS does not record treatment at every stand, each RF is based on a unique set of stands. Those stands each have a distinct character that are inherent to the selected treatment; a clearcut is not going to be prescribed in a bareground or seedling dominated stand, and mowing isnt going to be selected in a large diameter, old growth stand. This is important, because those stand conditions are affecting the background rates of growth and mortality. By not accounting for stand conditions, we are predominately reporting those differences in our RFs, rather than what the treatment is directly influencing.

One way to circumvent this problem is to compare each RF to what the RF would have been for the same stands in a BAU scenario. The following function does just that : for each mgmtID, it filters and compares the records that received treatment with the BAU scenario for those same records. The result is fully normalized RFs that reflect treatment benefits.

#(5) contrast with base scenarios
normalize_rfs <- function(oak_responses, response_var){

  oak_responses$variable <- 
    oak_responses |> 
  dplyr::select(
      dplyr::all_of(response_var)
    ) |> 
    unlist() |> 
    as.numeric()

  for(i in 1:length(unique(oak_responses$MgmtID))){
  mgmt_id <- unique(oak_responses$MgmtID)[i]
  ids <-
    oak_responses |> 
    dplyr::filter(MgmtID %in% mgmt_id) |>
    dplyr::select(StandID) |> 
    dplyr::distinct()
  
  out <-
  oak_responses |>
    dplyr::filter(
      MgmtID %in% c('BASE',mgmt_id) &
      StandID %in% ids$StandID) |>
    dplyr::group_by(StandID, year) |>
    dplyr::arrange(StandID, MgmtID, year) |>
    dplyr::mutate(
      base_rf = variable - dplyr::first(variable),
      base_rf = dplyr::if_else(base_rf >= 1, 1, base_rf),
      base_rf = dplyr::if_else(base_rf <= -1, -1, base_rf)
                  ) |>
    dplyr::filter(MgmtID %in% mgmt_id) 
if( i == 1){
  tot_out <- out
}else{
  tot_out <- dplyr::bind_rows(out,tot_out)
}
  }
  tot_out
}

The following function prints results, so that we can compare the effects of normalization for every response function, in plot and tabular forms.

#(6) refactored rfs

printResults <- function(oak_responses, years, response_var, normalized = TRUE, plot = TRUE){

  if(normalized == TRUE){
  responses <- 
    oak_responses |>
    normalize_rfs(response_var = response_var) |> 
    dplyr::filter(year %in% years) |>
    dplyr::group_by(MgmtID, year) |>
    dplyr::select(base_rf)|> 
    rstatix::get_summary_stats()
  }else{
  responses <-
    oak_responses  |>
    dplyr::filter(year %in% years) |>
    dplyr::group_by(MgmtID, year) |>
    dplyr::select(response_var)|> 
    rstatix::get_summary_stats()
  }
  if(plot %in% FALSE){
    responses
  }else{
    
plot <- 
ggplot(
  data = responses |> 
    dplyr::filter(MgmtID != 'BASE'),
  aes(x= year, 
      y = median, 
      ymin = median -ci, 
      ymax = median + ci, 
      color = MgmtID, 
      fill = MgmtID)) + 
  geom_path() +
  geom_ribbon(
    alpha = .05, 
    color = NA) +
  ylab(glue::glue(' Normalized = ', normalized)) +
  tidyquant::theme_tq() + 
  scale_fill_viridis_d() +
  scale_colour_viridis_d()
  
 plot |> plotly::ggplotly()
  }
}
sdi_plot <- printResults(oak_responses, years = c(2029:2060), response_var = 'sdi_response', normalized = T,plot = T)
sdi_plot_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'sdi_response', normalized = F,plot = T)
sdi_table <- printResults(oak_responses, years = c(2029:2060), response_var = 'sdi_response', normalized = T,plot = F) |> dplyr::mutate(variable = 'sdi')
sdi_table_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'sdi_response', normalized = F,plot = F) |> dplyr::mutate(variable = 'sdi')


tpa_plot <- printResults(oak_responses, years = c(2029:2060), response_var = 'tpa_response', normalized = T,plot = T)
tpa_plot_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'tpa_response', normalized = F,plot = T)
tpa_table <- printResults(oak_responses, years = c(2029:2060), response_var = 'tpa_response', normalized = T,plot = F) |> dplyr::mutate(variable = 'tpa')
tpa_table_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'tpa_response', normalized = F,plot = F) |> dplyr::mutate(variable = 'tpa')


ba_plot <- printResults(oak_responses, years = c(2029:2060), response_var = 'ba_response', normalized = T,plot = T)
ba_plot_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'ba_response', normalized = F,plot = T)
ba_table <- printResults(oak_responses, years = c(2029:2060), response_var = 'ba_response', normalized = T,plot = F) |> dplyr::mutate(variable = 'ba')
ba_table_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'ba_response', normalized = F,plot = F) |> dplyr::mutate(variable = 'ba')


mort_plot <- printResults(oak_responses, years = c(2029:2060), response_var = 'mort_response', normalized = T,plot = T)
mort_plot_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'mort_response', normalized = F,plot = T)
mort_table <- printResults(oak_responses, years = c(2029:2060), response_var = 'mort_response', normalized = T,plot = F)  |> dplyr::mutate(variable = 'mort')
mort_table_non <- printResults(oak_responses, years = c(2029:2060), response_var = 'mort_response', normalized = F,plot = F)  |> dplyr::mutate(variable = 'mort')

Normalization effect - SDI RFs

annotations = list( 
  list( 
    x = 0.2,  
    y = 1.0,  
    text = "Normalized",  
    xref = "paper",  
    yref = "paper",  
    xanchor = "center",  
    yanchor = "bottom",  
    showarrow = FALSE 
  ),  
  list( 
    x = 0.8,  
    y = 1,  
    text = "Regular RF",  
    xref = "paper",  
    yref = "paper",  
    xanchor = "center",  
    yanchor = "bottom",  
    showarrow = FALSE 
  )
)
plotly::subplot(sdi_plot, sdi_plot_non, nrows = 1) |> plotly::layout(title = list(text = 'SDI'), showlegend = F, annotations = annotations)

Normalization effect - TPA RFs

This plot exemplifies the problem with the former RF approach – everything is overstocked in the West, so FVS wants to drive down the TPA of oaks through increased mortality. By comparing with the base line scenario, we see that there is actually an increase in TPA following most treatments.

On the other hand, look at the 30 year projections for herbivory and targeted herbicide – these treatments are not that extreme! But the sample size for these treatments is low and outlier site conditions are accentuated

plotly::subplot(tpa_plot,tpa_plot_non, nrows = 1) |>  plotly::layout(title = list(text = 'TPA'), showlegend = F, annotations = annotations)

Normalization effect - BA RFs

plotly::subplot(ba_plot, ba_plot_non, nrows = 1) |>  plotly::layout(title = list(text = 'BA'), showlegend = F, annotations = annotations)

Normalization effect - Mort RFs

plotly::subplot(mort_plot, mort_plot_non, nrows = 1) |> plotly::layout(title = list(text = 'Mortality'), showlegend = F, annotations = annotations)

Tabular RFs - Normalized

sdi_table |>
  dplyr::bind_rows(tpa_table, ba_table, mort_table) |>
  dplyr::filter(year %in% 2035) |>
  data.frame()
##    MgmtID year variable   n    min   max median     q1     q3   iqr   mad
## 1    BASE 2035      sdi 170  0.000 0.000  0.000  0.000  0.000 0.000 0.000
## 2    CMCC 2035      sdi 153 -0.033 1.000  0.015  0.002  0.053 0.050 0.023
## 3    CMUR 2035      sdi 134 -0.039 1.000  0.009  0.000  0.045 0.045 0.017
## 4    HCTA 2035      sdi   3 -0.003 0.000  0.000 -0.002  0.000 0.002 0.001
## 5    HERB 2035      sdi  24  0.000 0.013  0.000  0.000  0.002 0.002 0.000
## 6    MRCC 2035      sdi 142 -0.010 1.000  0.015  0.003  0.053 0.050 0.022
## 7    MRCT 2035      sdi  87 -0.023 1.000  0.018  0.004  0.045 0.042 0.024
## 8    MTIR 2035      sdi  95 -0.033 0.161  0.002 -0.002  0.009 0.011 0.007
## 9    MTTH 2035      sdi  45 -0.056 0.278  0.001 -0.004  0.022 0.026 0.011
## 10   MTUR 2035      sdi 113 -0.021 0.606  0.003  0.000  0.023 0.023 0.008
## 11   REVA 2035      sdi 170 -0.063 0.018 -0.003 -0.010  0.000 0.010 0.008
## 12   RMGP 2035      sdi 161 -0.169 0.029  0.000 -0.019  0.003 0.022 0.013
## 13   RMMA 2035      sdi 134 -0.039 0.325  0.009  0.000  0.041 0.041 0.016
## 14   RMTF 2035      sdi  93 -0.040 0.124  0.002 -0.001  0.009 0.009 0.005
## 15   RXAI 2035      sdi 170 -0.679 0.258 -0.237 -0.365 -0.155 0.211 0.133
## 16   RXGF 2035      sdi 170 -0.668 0.261 -0.215 -0.350 -0.140 0.210 0.145
## 17   BASE 2035      tpa 170  0.000 0.000  0.000  0.000  0.000 0.000 0.000
## 18   CMCC 2035      tpa 153 -0.039 0.372  0.010  0.000  0.057 0.057 0.017
## 19   CMUR 2035      tpa 134 -0.036 0.353  0.008  0.000  0.045 0.045 0.017
## 20   HCTA 2035      tpa   3 -0.004 0.000  0.000 -0.002  0.000 0.002 0.001
## 21   HERB 2035      tpa  24  0.000 0.016  0.000  0.000  0.003 0.003 0.000
## 22   MRCC 2035      tpa 142 -0.012 0.351  0.010  0.000  0.052 0.051 0.018
## 23   MRCT 2035      tpa  87 -0.027 0.357  0.019  0.004  0.057 0.053 0.026
## 24   MTIR 2035      tpa  95 -0.039 0.194  0.001 -0.001  0.008 0.008 0.006
## 25   MTTH 2035      tpa  45 -0.048 0.238  0.000 -0.010  0.021 0.031 0.027
## 26   MTUR 2035      tpa 113 -0.024 0.357  0.003  0.000  0.022 0.022 0.007
## 27   REVA 2035      tpa 170 -0.061 0.014 -0.004 -0.011  0.000 0.011 0.005
## 28   RMGP 2035      tpa 161 -0.099 0.035 -0.001 -0.056  0.002 0.059 0.019
## 29   RMMA 2035      tpa 134 -0.036 0.275  0.008  0.000  0.042 0.042 0.017
## 30   RMTF 2035      tpa  93 -0.048 0.145  0.001 -0.001  0.008 0.009 0.005
## 31   RXAI 2035      tpa 170 -0.081 0.502  0.168  0.031  0.279 0.248 0.181
## 32   RXGF 2035      tpa 170 -0.081 0.486  0.149  0.029  0.259 0.230 0.170
## 33   BASE 2035       ba 170  0.000 0.000  0.000  0.000  0.000 0.000 0.000
## 34   CMCC 2035       ba 153 -0.032 1.000  0.015  0.002  0.052 0.051 0.022
## 35   CMUR 2035       ba 134 -0.040 1.000  0.010  0.000  0.043 0.043 0.016
## 36   HCTA 2035       ba   3 -0.003 0.000  0.000 -0.002  0.000 0.002 0.001
## 37   HERB 2035       ba  24  0.000 0.013  0.000  0.000  0.002 0.001 0.000
## 38   MRCC 2035       ba 142 -0.011 1.000  0.015  0.003  0.049 0.047 0.022
## 39   MRCT 2035       ba  87 -0.022 1.000  0.017  0.003  0.044 0.041 0.023
## 40   MTIR 2035       ba  95 -0.032 0.151  0.002 -0.002  0.009 0.011 0.007
## 41   MTTH 2035       ba  45 -0.059 0.289  0.001  0.000  0.023 0.022 0.012
## 42   MTUR 2035       ba 113 -0.021 0.683  0.002  0.000  0.022 0.022 0.008
## 43   REVA 2035       ba 170 -0.059 0.021 -0.003 -0.009  0.001 0.010 0.008
## 44   RMGP 2035       ba 161 -0.165 0.031  0.000 -0.011  0.003 0.015 0.007
## 45   RMMA 2035       ba 134 -0.040 0.339  0.010  0.000  0.036 0.036 0.016
## 46   RMTF 2035       ba  93 -0.038 0.118  0.002 -0.001  0.008 0.009 0.005
## 47   RXAI 2035       ba 170 -0.804 0.266 -0.330 -0.458 -0.242 0.215 0.160
## 48   RXGF 2035       ba 170 -0.801 0.268 -0.299 -0.434 -0.215 0.219 0.160
## 49   BASE 2035     mort 170  0.000 0.000  0.000  0.000  0.000 0.000 0.000
## 50   CMCC 2035     mort 153 -1.000 1.000 -0.450 -0.745 -0.013 0.732 0.569
## 51   CMUR 2035     mort 134 -1.000 1.000 -0.330 -0.619  0.006 0.625 0.490
## 52   HCTA 2035     mort   3 -0.002 0.396  0.000 -0.001  0.198 0.199 0.004
## 53   HERB 2035     mort  24 -0.400 0.007 -0.006 -0.020  0.000 0.020 0.008
## 54   MRCC 2035     mort 142 -1.000 1.000 -0.441 -0.719 -0.016 0.703 0.498
## 55   MRCT 2035     mort  87 -1.000 1.000 -0.527 -0.781 -0.171 0.610 0.445
## 56   MTIR 2035     mort  95 -1.000 0.621 -0.027 -0.240  0.012 0.253 0.164
## 57   MTTH 2035     mort  45 -1.000 1.000 -0.005 -0.447  0.097 0.544 0.463
## 58   MTUR 2035     mort 113 -1.000 0.976 -0.121 -0.458  0.000 0.458 0.272
## 59   REVA 2035     mort 170 -1.000 1.000  0.000 -0.033  0.038 0.071 0.053
## 60   RMGP 2035     mort 161 -1.000 0.909 -0.093 -0.281  0.000 0.281 0.157
## 61   RMMA 2035     mort 134 -1.000 1.000 -0.312 -0.620  0.002 0.622 0.466
## 62   RMTF 2035     mort  93 -1.000 1.000 -0.010 -0.168  0.045 0.213 0.209
## 63   RXAI 2035     mort 170 -1.000 1.000 -0.174 -0.576  0.291 0.867 0.618
## 64   RXGF 2035     mort 170 -1.000 1.000 -0.194 -0.598  0.197 0.795 0.591
##      mean    sd    se    ci
## 1   0.000 0.000 0.000 0.000
## 2   0.045 0.104 0.008 0.017
## 3   0.037 0.098 0.008 0.017
## 4  -0.001 0.002 0.001 0.004
## 5   0.002 0.003 0.001 0.001
## 6   0.042 0.098 0.008 0.016
## 7   0.042 0.111 0.012 0.024
## 8   0.006 0.021 0.002 0.004
## 9   0.019 0.051 0.008 0.015
## 10  0.020 0.062 0.006 0.012
## 11 -0.006 0.011 0.001 0.002
## 12 -0.017 0.038 0.003 0.006
## 13  0.031 0.053 0.005 0.009
## 14  0.004 0.018 0.002 0.004
## 15 -0.269 0.152 0.012 0.023
## 16 -0.251 0.154 0.012 0.023
## 17  0.000 0.000 0.000 0.000
## 18  0.034 0.057 0.005 0.009
## 19  0.031 0.054 0.005 0.009
## 20 -0.001 0.002 0.001 0.005
## 21  0.002 0.004 0.001 0.002
## 22  0.035 0.055 0.005 0.009
## 23  0.039 0.058 0.006 0.012
## 24  0.007 0.024 0.002 0.005
## 25  0.015 0.051 0.008 0.015
## 26  0.019 0.047 0.004 0.009
## 27 -0.007 0.011 0.001 0.002
## 28 -0.026 0.039 0.003 0.006
## 29  0.029 0.048 0.004 0.008
## 30  0.005 0.020 0.002 0.004
## 31  0.161 0.144 0.011 0.022
## 32  0.150 0.137 0.011 0.021
## 33  0.000 0.000 0.000 0.000
## 34  0.042 0.102 0.008 0.016
## 35  0.035 0.097 0.008 0.017
## 36 -0.001 0.002 0.001 0.004
## 37  0.002 0.003 0.001 0.001
## 38  0.039 0.092 0.008 0.015
## 39  0.040 0.111 0.012 0.024
## 40  0.006 0.020 0.002 0.004
## 41  0.020 0.052 0.008 0.015
## 42  0.020 0.068 0.006 0.013
## 43 -0.005 0.010 0.001 0.002
## 44 -0.014 0.037 0.003 0.006
## 45  0.029 0.051 0.004 0.009
## 46  0.004 0.017 0.002 0.004
## 47 -0.352 0.170 0.013 0.026
## 48 -0.331 0.174 0.013 0.026
## 49  0.000 0.000 0.000 0.000
## 50 -0.380 0.464 0.037 0.074
## 51 -0.313 0.431 0.037 0.074
## 52  0.131 0.229 0.132 0.570
## 53 -0.036 0.087 0.018 0.037
## 54 -0.397 0.426 0.036 0.071
## 55 -0.464 0.428 0.046 0.091
## 56 -0.151 0.300 0.031 0.061
## 57 -0.119 0.505 0.075 0.152
## 58 -0.231 0.351 0.033 0.065
## 59  0.009 0.290 0.022 0.044
## 60 -0.154 0.305 0.024 0.047
## 61 -0.318 0.420 0.036 0.072
## 62 -0.067 0.399 0.041 0.082
## 63 -0.124 0.606 0.046 0.092
## 64 -0.139 0.594 0.046 0.090

Tabular RFs - Raw

sdi_table_non |>
  dplyr::bind_rows(tpa_table_non, ba_table_non, mort_table_non) |>
  dplyr::filter(year %in% 2035) |>
  data.frame()
##    MgmtID year variable   n    min    max median     q1     q3   iqr   mad
## 1    BASE 2035      sdi 170 -0.337  1.000  0.014 -0.023  0.031 0.054 0.038
## 2    CMCC 2035      sdi 153 -0.034  1.000  0.021  0.008  0.041 0.033 0.024
## 3    CMUR 2035      sdi 134 -0.109  1.000  0.015  0.003  0.031 0.028 0.021
## 4    HCTA 2035      sdi   3 -0.061  0.015  0.012 -0.025  0.014 0.038 0.005
## 5    HERB 2035      sdi  24 -0.119  0.063 -0.016 -0.057  0.002 0.059 0.040
## 6    MRCC 2035      sdi 142 -0.043  1.000  0.021  0.008  0.038 0.031 0.024
## 7    MRCT 2035      sdi  87 -0.111  1.000  0.013  0.002  0.025 0.023 0.017
## 8    MTIR 2035      sdi  95 -0.291  0.966  0.001 -0.041  0.020 0.060 0.036
## 9    MTTH 2035      sdi  45 -0.113  0.222  0.004 -0.026  0.017 0.043 0.022
## 10   MTUR 2035      sdi 113 -0.295  1.000  0.011 -0.016  0.026 0.042 0.032
## 11   REVA 2035      sdi 170 -0.333  1.000  0.011 -0.031  0.029 0.060 0.041
## 12   RMGP 2035      sdi 161 -0.362  1.000 -0.001 -0.034  0.020 0.054 0.037
## 13   RMMA 2035      sdi 134 -0.109  1.000  0.014  0.002  0.031 0.029 0.020
## 14   RMTF 2035      sdi  93 -0.293  0.927 -0.001 -0.046  0.021 0.067 0.039
## 15   RXAI 2035      sdi 170 -0.610  1.000 -0.257 -0.341 -0.167 0.174 0.128
## 16   RXGF 2035      sdi 170 -0.592  1.000 -0.239 -0.327 -0.145 0.182 0.131
## 17   BASE 2035      tpa 170 -0.431  0.000 -0.025 -0.084 -0.015 0.070 0.027
## 18   CMCC 2035      tpa 153 -0.247  0.000 -0.019 -0.034 -0.014 0.020 0.012
## 19   CMUR 2035      tpa 134 -0.257  0.000 -0.022 -0.044 -0.014 0.030 0.017
## 20   HCTA 2035      tpa   3 -0.147 -0.003 -0.069 -0.108 -0.036 0.072 0.098
## 21   HERB 2035      tpa  24 -0.322 -0.005 -0.085 -0.118 -0.039 0.079 0.069
## 22   MRCC 2035      tpa 142 -0.170  0.000 -0.019 -0.035 -0.014 0.022 0.013
## 23   MRCT 2035      tpa  87 -0.325  0.000 -0.030 -0.044 -0.017 0.027 0.020
## 24   MTIR 2035      tpa  95 -0.387 -0.002 -0.038 -0.087 -0.017 0.071 0.040
## 25   MTTH 2035      tpa  45 -0.352 -0.005 -0.059 -0.107 -0.027 0.081 0.050
## 26   MTUR 2035      tpa 113 -0.334  0.000 -0.031 -0.072 -0.016 0.056 0.029
## 27   REVA 2035      tpa 170 -0.428  0.000 -0.032 -0.094 -0.015 0.079 0.034
## 28   RMGP 2035      tpa 161 -0.453  0.000 -0.077 -0.117 -0.018 0.099 0.071
## 29   RMMA 2035      tpa 134 -0.257  0.000 -0.022 -0.045 -0.014 0.031 0.019
## 30   RMTF 2035      tpa  93 -0.380 -0.002 -0.047 -0.088 -0.017 0.071 0.047
## 31   RXAI 2035      tpa 170 -0.202  0.487  0.121 -0.046  0.210 0.255 0.188
## 32   RXGF 2035      tpa 170 -0.200  0.471  0.100 -0.047  0.196 0.244 0.173
## 33   BASE 2035       ba 170 -0.311  1.000  0.022 -0.014  0.043 0.057 0.042
## 34   CMCC 2035       ba 153 -0.018  1.000  0.030  0.017  0.057 0.040 0.027
## 35   CMUR 2035       ba 134 -0.101  1.000  0.025  0.012  0.043 0.032 0.025
## 36   HCTA 2035       ba   3 -0.039  0.037  0.016 -0.012  0.026 0.038 0.031
## 37   HERB 2035       ba  24 -0.106  0.101 -0.007 -0.040  0.022 0.062 0.046
## 38   MRCC 2035       ba 142 -0.032  1.000  0.030  0.016  0.053 0.037 0.026
## 39   MRCT 2035       ba  87 -0.100  1.000  0.023  0.010  0.040 0.029 0.020
## 40   MTIR 2035       ba  95 -0.281  1.000  0.012 -0.023  0.034 0.058 0.039
## 41   MTTH 2035       ba  45 -0.069  0.310  0.021 -0.015  0.035 0.050 0.029
## 42   MTUR 2035       ba 113 -0.285  1.000  0.019 -0.006  0.042 0.049 0.037
## 43   REVA 2035       ba 170 -0.308  1.000  0.019 -0.017  0.044 0.060 0.045
## 44   RMGP 2035       ba 161 -0.337  1.000  0.015 -0.017  0.035 0.052 0.037
## 45   RMMA 2035       ba 134 -0.101  1.000  0.025  0.011  0.043 0.033 0.025
## 46   RMTF 2035       ba  93 -0.283  1.000  0.006 -0.023  0.034 0.057 0.043
## 47   RXAI 2035       ba 170 -0.681  1.000 -0.327 -0.412 -0.228 0.183 0.140
## 48   RXGF 2035       ba 170 -0.664  1.000 -0.305 -0.395 -0.202 0.193 0.144
## 49   BASE 2035     mort 170 -0.891  1.000 -0.027 -0.207  0.034 0.241 0.208
## 50   CMCC 2035     mort 153 -0.998  1.000 -0.501 -0.816 -0.023 0.794 0.540
## 51   CMUR 2035     mort 134 -0.987  1.000 -0.235 -0.751  0.010 0.762 0.523
## 52   HCTA 2035     mort   3 -0.289  1.000  0.397  0.054  0.699 0.645 0.894
## 53   HERB 2035     mort  24 -0.404  1.000 -0.015 -0.142  0.309 0.451 0.291
## 54   MRCC 2035     mort 142 -0.997  1.000 -0.491 -0.816 -0.022 0.794 0.517
## 55   MRCT 2035     mort  87 -0.990  1.000 -0.676 -0.821 -0.242 0.579 0.330
## 56   MTIR 2035     mort  95 -0.998  1.000 -0.115 -0.361  0.083 0.444 0.326
## 57   MTTH 2035     mort  45 -0.844  1.000 -0.169 -0.651  0.132 0.783 0.604
## 58   MTUR 2035     mort 113 -0.998  1.000 -0.216 -0.570  0.044 0.614 0.403
## 59   REVA 2035     mort 170 -0.701  1.000 -0.043 -0.180  0.077 0.256 0.201
## 60   RMGP 2035     mort 161 -0.999  1.000 -0.112 -0.388  0.004 0.392 0.261
## 61   RMMA 2035     mort 134 -0.987  1.000 -0.247 -0.742 -0.006 0.736 0.502
## 62   RMTF 2035     mort  93 -0.906  1.000 -0.078 -0.304  0.251 0.554 0.377
## 63   RXAI 2035     mort 170 -0.997  1.000 -0.130 -0.702  0.352 1.055 0.824
## 64   RXGF 2035     mort 170 -0.983  1.000 -0.135 -0.720  0.339 1.059 0.811
##      mean    sd    se    ci
## 1   0.026 0.161 0.012 0.024
## 2   0.072 0.202 0.016 0.032
## 3   0.046 0.167 0.014 0.028
## 4  -0.011 0.043 0.025 0.107
## 5  -0.027 0.047 0.010 0.020
## 6   0.069 0.199 0.017 0.033
## 7   0.023 0.111 0.012 0.024
## 8   0.002 0.135 0.014 0.028
## 9  -0.002 0.054 0.008 0.016
## 10  0.024 0.142 0.013 0.026
## 11  0.021 0.160 0.012 0.024
## 12  0.010 0.151 0.012 0.024
## 13  0.037 0.142 0.012 0.024
## 14  0.000 0.133 0.014 0.027
## 15 -0.243 0.209 0.016 0.032
## 16 -0.225 0.208 0.016 0.031
## 17 -0.056 0.070 0.005 0.011
## 18 -0.027 0.026 0.002 0.004
## 19 -0.034 0.035 0.003 0.006
## 20 -0.073 0.072 0.042 0.179
## 21 -0.099 0.083 0.017 0.035
## 22 -0.027 0.023 0.002 0.004
## 23 -0.042 0.048 0.005 0.010
## 24 -0.067 0.074 0.008 0.015
## 25 -0.081 0.076 0.011 0.023
## 26 -0.053 0.058 0.005 0.011
## 27 -0.064 0.075 0.006 0.011
## 28 -0.085 0.076 0.006 0.012
## 29 -0.036 0.038 0.003 0.007
## 30 -0.070 0.075 0.008 0.015
## 31  0.105 0.146 0.011 0.022
## 32  0.093 0.139 0.011 0.021
## 33  0.044 0.173 0.013 0.026
## 34  0.087 0.207 0.017 0.033
## 35  0.061 0.180 0.016 0.031
## 36  0.005 0.039 0.023 0.097
## 37 -0.007 0.050 0.010 0.021
## 38  0.083 0.202 0.017 0.034
## 39  0.036 0.111 0.012 0.024
## 40  0.019 0.149 0.015 0.030
## 41  0.019 0.060 0.009 0.018
## 42  0.043 0.164 0.015 0.031
## 43  0.039 0.173 0.013 0.026
## 44  0.031 0.166 0.013 0.026
## 45  0.052 0.158 0.014 0.027
## 46  0.017 0.150 0.016 0.031
## 47 -0.308 0.225 0.017 0.034
## 48 -0.287 0.224 0.017 0.034
## 49  0.039 0.396 0.030 0.060
## 50 -0.381 0.524 0.042 0.084
## 51 -0.289 0.507 0.044 0.087
## 52  0.369 0.645 0.372 1.603
## 53  0.158 0.489 0.100 0.207
## 54 -0.391 0.484 0.041 0.080
## 55 -0.472 0.481 0.052 0.102
## 56 -0.076 0.498 0.051 0.101
## 57 -0.040 0.618 0.092 0.186
## 58 -0.180 0.503 0.047 0.094
## 59  0.050 0.399 0.031 0.060
## 60 -0.117 0.421 0.033 0.066
## 61 -0.286 0.496 0.043 0.085
## 62  0.013 0.507 0.053 0.104
## 63 -0.098 0.656 0.050 0.099
## 64 -0.120 0.651 0.050 0.099