(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 the correct forest types in the FVS summary to make sure that no weird stands are retained. We also filter for post-treatment years to identify where prescriptions were carried out in FVS (Step 2)
summary <-
sum_path |>
readRDS() |>
dplyr::filter(Year > 2030 & ForTyp > 921 & ForTyp < 933)
Next, we filter our std-stk data for the oak records we identified in the summary document.
We set a group argument for the oak species that we specified to ‘Do-Not-Cut’ in FVS. These species are valley oak (QULO), canyon live oak (QUCH2), black oak (QUKE), blue oak (QUDO), and oregon white oak (QUGA4).
Finally, we might 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::filter(CaseID %in% summary$CaseID) |>
dplyr::mutate(
group = NA,
group = dplyr::if_else(
substr(Species,0,5) %in% c('QUCH2','QUDO','QUGA4','QUKE','QULO'), #QUEN (Engelmann oak) was not included in the dnc for this run
'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)
)
(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
## 394 301 261 6 28 278 122 142 79 197 394 351 266 138 374 375
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 364 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## 2 CMCC 2035 sdi 278 -0.129 0.902 0.008 0.000 0.040 0.040 0.017
## 3 CMUR 2035 sdi 238 -0.123 0.902 0.003 -0.001 0.025 0.026 0.010
## 4 HCTA 2035 sdi 5 -0.003 0.007 -0.001 -0.002 0.000 0.002 0.002
## 5 HERB 2035 sdi 28 0.000 0.089 0.000 0.000 0.002 0.002 0.001
## 6 MRCC 2035 sdi 256 -0.132 0.433 0.009 0.001 0.036 0.035 0.015
## 7 MRCT 2035 sdi 121 -0.030 0.201 0.013 0.003 0.043 0.040 0.020
## 8 MTIR 2035 sdi 135 -0.059 0.182 0.002 -0.001 0.009 0.010 0.006
## 9 MTTH 2035 sdi 79 -0.049 0.160 -0.001 -0.008 0.021 0.029 0.020
## 10 MTUR 2035 sdi 173 -0.039 0.247 0.002 -0.001 0.016 0.016 0.006
## 11 REVA 2035 sdi 364 -0.063 0.018 -0.003 -0.011 0.001 0.012 0.007
## 12 RMGP 2035 sdi 323 -0.147 0.025 -0.015 -0.042 -0.003 0.039 0.022
## 13 RMMA 2035 sdi 240 -0.123 0.222 0.004 0.000 0.024 0.025 0.010
## 14 RMTF 2035 sdi 131 -0.053 0.183 0.001 -0.001 0.006 0.007 0.006
## 15 RXAI 2035 sdi 347 -0.940 -0.041 -0.349 -0.437 -0.279 0.159 0.116
## 16 RXGF 2035 sdi 348 -0.932 -0.013 -0.330 -0.422 -0.257 0.165 0.122
## 17 BASE 2035 tpa 364 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## 18 CMCC 2035 tpa 278 -0.162 0.297 0.003 0.000 0.039 0.039 0.010
## 19 CMUR 2035 tpa 238 -0.141 0.231 0.002 -0.001 0.034 0.035 0.009
## 20 HCTA 2035 tpa 5 -0.004 0.009 0.000 -0.003 0.000 0.003 0.004
## 21 HERB 2035 tpa 28 0.000 0.136 0.000 0.000 0.003 0.003 0.001
## 22 MRCC 2035 tpa 256 -0.165 0.155 0.004 0.000 0.041 0.041 0.009
## 23 MRCT 2035 tpa 121 -0.040 0.294 0.016 0.003 0.053 0.050 0.028
## 24 MTIR 2035 tpa 135 -0.068 0.271 0.001 -0.001 0.012 0.013 0.006
## 25 MTTH 2035 tpa 79 -0.046 0.131 -0.008 -0.029 0.015 0.044 0.032
## 26 MTUR 2035 tpa 173 -0.046 0.243 0.002 0.000 0.018 0.018 0.006
## 27 REVA 2035 tpa 364 -0.085 0.009 -0.003 -0.014 0.000 0.014 0.006
## 28 RMGP 2035 tpa 323 -0.102 0.033 -0.054 -0.083 -0.013 0.070 0.049
## 29 RMMA 2035 tpa 240 -0.141 0.206 0.002 -0.001 0.035 0.036 0.009
## 30 RMTF 2035 tpa 131 -0.054 0.273 0.000 -0.001 0.009 0.010 0.005
## 31 RXAI 2035 tpa 347 -0.361 0.326 -0.102 -0.195 -0.033 0.162 0.124
## 32 RXGF 2035 tpa 348 -0.357 0.306 -0.099 -0.189 -0.032 0.156 0.124
## 33 BASE 2035 ba 364 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## 34 CMCC 2035 ba 278 -0.119 0.865 0.008 0.000 0.038 0.038 0.016
## 35 CMUR 2035 ba 238 -0.119 0.865 0.003 -0.001 0.023 0.024 0.010
## 36 HCTA 2035 ba 5 -0.003 0.006 -0.001 -0.002 0.000 0.002 0.002
## 37 HERB 2035 ba 28 0.000 0.074 0.000 0.000 0.002 0.002 0.000
## 38 MRCC 2035 ba 256 -0.123 0.241 0.008 0.001 0.036 0.034 0.015
## 39 MRCT 2035 ba 121 -0.027 0.173 0.012 0.003 0.039 0.036 0.018
## 40 MTIR 2035 ba 135 -0.058 0.156 0.002 -0.001 0.009 0.010 0.006
## 41 MTTH 2035 ba 79 -0.051 0.180 0.002 -0.004 0.024 0.029 0.019
## 42 MTUR 2035 ba 173 -0.037 0.321 0.002 -0.001 0.014 0.015 0.006
## 43 REVA 2035 ba 364 -0.059 0.021 -0.003 -0.010 0.001 0.011 0.007
## 44 RMGP 2035 ba 323 -0.163 0.023 -0.005 -0.034 0.000 0.034 0.013
## 45 RMMA 2035 ba 240 -0.119 0.246 0.003 0.000 0.023 0.023 0.009
## 46 RMTF 2035 ba 131 -0.054 0.156 0.001 -0.001 0.006 0.007 0.005
## 47 RXAI 2035 ba 347 -1.000 -0.097 -0.410 -0.501 -0.326 0.175 0.127
## 48 RXGF 2035 ba 348 -1.000 -0.061 -0.388 -0.482 -0.304 0.178 0.134
## 49 BASE 2035 mort 364 0.000 0.000 0.000 0.000 0.000 0.000 0.000
## 50 CMCC 2035 mort 278 -1.000 1.000 -0.177 -0.531 0.002 0.533 0.413
## 51 CMUR 2035 mort 238 -1.000 1.000 -0.062 -0.465 0.037 0.501 0.385
## 52 HCTA 2035 mort 5 -0.091 0.331 0.000 -0.002 0.038 0.041 0.056
## 53 HERB 2035 mort 28 -0.435 0.006 -0.003 -0.024 0.000 0.024 0.007
## 54 MRCC 2035 mort 256 -1.000 1.000 -0.201 -0.556 0.000 0.556 0.359
## 55 MRCT 2035 mort 121 -1.000 1.000 -0.450 -0.670 -0.090 0.579 0.404
## 56 MTIR 2035 mort 135 -1.000 1.000 0.000 -0.200 0.033 0.233 0.125
## 57 MTTH 2035 mort 79 -1.000 1.000 0.134 -0.053 0.815 0.868 0.586
## 58 MTUR 2035 mort 173 -1.000 1.000 -0.038 -0.395 0.019 0.415 0.261
## 59 REVA 2035 mort 364 -1.000 1.000 0.000 -0.025 0.055 0.080 0.054
## 60 RMGP 2035 mort 323 -1.000 1.000 -0.088 -0.258 0.000 0.258 0.137
## 61 RMMA 2035 mort 240 -1.000 1.000 -0.085 -0.477 0.031 0.508 0.320
## 62 RMTF 2035 mort 131 -1.000 1.000 0.000 -0.152 0.102 0.254 0.165
## 63 RXAI 2035 mort 347 -1.000 1.000 -0.239 -0.509 -0.053 0.456 0.364
## 64 RXGF 2035 mort 348 -1.000 1.000 -0.247 -0.516 -0.053 0.463 0.367
## mean sd se ci
## 1 0.000 0.000 0.000 0.000
## 2 0.032 0.081 0.005 0.010
## 3 0.020 0.071 0.005 0.009
## 4 0.000 0.004 0.002 0.005
## 5 0.005 0.017 0.003 0.006
## 6 0.023 0.041 0.003 0.005
## 7 0.027 0.035 0.003 0.006
## 8 0.005 0.021 0.002 0.004
## 9 0.008 0.032 0.004 0.007
## 10 0.014 0.037 0.003 0.006
## 11 -0.006 0.011 0.001 0.001
## 12 -0.029 0.036 0.002 0.004
## 13 0.015 0.036 0.002 0.005
## 14 0.003 0.019 0.002 0.003
## 15 -0.359 0.130 0.007 0.014
## 16 -0.342 0.134 0.007 0.014
## 17 0.000 0.000 0.000 0.000
## 18 0.023 0.046 0.003 0.005
## 19 0.017 0.041 0.003 0.005
## 20 0.000 0.005 0.002 0.006
## 21 0.007 0.026 0.005 0.010
## 22 0.021 0.040 0.002 0.005
## 23 0.035 0.046 0.004 0.008
## 24 0.007 0.028 0.002 0.005
## 25 -0.001 0.035 0.004 0.008
## 26 0.015 0.033 0.003 0.005
## 27 -0.009 0.013 0.001 0.001
## 28 -0.049 0.036 0.002 0.004
## 29 0.017 0.040 0.003 0.005
## 30 0.005 0.027 0.002 0.005
## 31 -0.089 0.147 0.008 0.016
## 32 -0.089 0.142 0.008 0.015
## 33 0.000 0.000 0.000 0.000
## 34 0.032 0.085 0.005 0.010
## 35 0.019 0.072 0.005 0.009
## 36 0.000 0.004 0.002 0.004
## 37 0.004 0.014 0.003 0.005
## 38 0.022 0.035 0.002 0.004
## 39 0.024 0.033 0.003 0.006
## 40 0.005 0.019 0.002 0.003
## 41 0.011 0.032 0.004 0.007
## 42 0.014 0.041 0.003 0.006
## 43 -0.005 0.011 0.001 0.001
## 44 -0.024 0.038 0.002 0.004
## 45 0.015 0.038 0.002 0.005
## 46 0.003 0.017 0.002 0.003
## 47 -0.417 0.138 0.007 0.015
## 48 -0.397 0.144 0.008 0.015
## 49 0.000 0.000 0.000 0.000
## 50 -0.226 0.469 0.028 0.055
## 51 -0.170 0.443 0.029 0.057
## 52 0.055 0.161 0.072 0.200
## 53 -0.036 0.088 0.017 0.034
## 54 -0.263 0.420 0.026 0.052
## 55 -0.409 0.398 0.036 0.072
## 56 -0.110 0.321 0.028 0.055
## 57 0.254 0.543 0.061 0.122
## 58 -0.156 0.393 0.030 0.059
## 59 0.035 0.306 0.016 0.032
## 60 -0.131 0.303 0.017 0.033
## 61 -0.188 0.432 0.028 0.055
## 62 -0.033 0.377 0.033 0.065
## 63 -0.254 0.430 0.023 0.045
## 64 -0.260 0.426 0.023 0.045
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 364 -0.152 0.567 0.023 0.006 0.045 0.039 0.029
## 2 CMCC 2035 sdi 278 -0.184 1.000 0.027 0.014 0.050 0.036 0.024
## 3 CMUR 2035 sdi 238 -0.186 1.000 0.023 0.010 0.041 0.032 0.021
## 4 HCTA 2035 sdi 5 -0.065 0.565 0.016 -0.026 0.018 0.044 0.062
## 5 HERB 2035 sdi 28 -0.119 0.088 -0.023 -0.052 0.007 0.059 0.046
## 6 MRCC 2035 sdi 256 -0.187 1.000 0.026 0.013 0.045 0.031 0.021
## 7 MRCT 2035 sdi 121 -0.106 0.146 0.022 0.010 0.038 0.028 0.020
## 8 MTIR 2035 sdi 135 -0.107 0.557 0.019 -0.013 0.038 0.051 0.038
## 9 MTTH 2035 sdi 79 -0.113 0.109 0.015 -0.003 0.028 0.031 0.024
## 10 MTUR 2035 sdi 173 -0.127 0.565 0.021 0.005 0.043 0.038 0.030
## 11 REVA 2035 sdi 364 -0.175 0.566 0.020 -0.007 0.042 0.049 0.036
## 12 RMGP 2035 sdi 323 -0.158 0.460 0.001 -0.029 0.022 0.051 0.036
## 13 RMMA 2035 sdi 240 -0.186 0.686 0.023 0.010 0.042 0.032 0.022
## 14 RMTF 2035 sdi 131 -0.106 0.560 0.017 -0.016 0.033 0.049 0.039
## 15 RXAI 2035 sdi 347 -0.756 0.098 -0.332 -0.395 -0.258 0.137 0.101
## 16 RXGF 2035 sdi 348 -0.744 0.101 -0.315 -0.381 -0.239 0.141 0.105
## 17 BASE 2035 tpa 364 -0.325 0.000 -0.019 -0.062 -0.017 0.045 0.010
## 18 CMCC 2035 tpa 278 -0.308 -0.004 -0.019 -0.034 -0.016 0.018 0.007
## 19 CMUR 2035 tpa 238 -0.314 -0.002 -0.021 -0.046 -0.016 0.030 0.014
## 20 HCTA 2035 tpa 5 -0.148 -0.016 -0.072 -0.143 -0.017 0.126 0.084
## 21 HERB 2035 tpa 28 -0.322 -0.018 -0.109 -0.157 -0.073 0.084 0.065
## 22 MRCC 2035 tpa 256 -0.310 -0.001 -0.019 -0.035 -0.016 0.019 0.010
## 23 MRCT 2035 tpa 121 -0.325 -0.001 -0.032 -0.049 -0.019 0.030 0.021
## 24 MTIR 2035 tpa 135 -0.330 -0.002 -0.039 -0.084 -0.017 0.067 0.037
## 25 MTTH 2035 tpa 79 -0.352 -0.001 -0.073 -0.099 -0.053 0.046 0.038
## 26 MTUR 2035 tpa 173 -0.274 -0.001 -0.031 -0.061 -0.016 0.044 0.027
## 27 REVA 2035 tpa 364 -0.345 0.000 -0.025 -0.080 -0.017 0.063 0.021
## 28 RMGP 2035 tpa 323 -0.333 0.000 -0.106 -0.129 -0.052 0.077 0.049
## 29 RMMA 2035 tpa 240 -0.314 -0.001 -0.021 -0.047 -0.016 0.031 0.015
## 30 RMTF 2035 tpa 131 -0.326 -0.002 -0.044 -0.085 -0.017 0.067 0.042
## 31 RXAI 2035 tpa 347 -0.439 0.312 -0.148 -0.242 -0.066 0.176 0.128
## 32 RXGF 2035 tpa 348 -0.434 0.293 -0.140 -0.239 -0.066 0.174 0.122
## 33 BASE 2035 ba 364 -0.107 0.759 0.034 0.015 0.063 0.048 0.034
## 34 CMCC 2035 ba 278 -0.150 1.000 0.038 0.023 0.070 0.047 0.028
## 35 CMUR 2035 ba 238 -0.151 1.000 0.034 0.019 0.057 0.038 0.025
## 36 HCTA 2035 ba 5 -0.043 0.755 0.026 0.002 0.038 0.036 0.036
## 37 HERB 2035 ba 28 -0.106 0.140 -0.008 -0.025 0.024 0.048 0.032
## 38 MRCC 2035 ba 256 -0.154 1.000 0.038 0.023 0.061 0.038 0.027
## 39 MRCT 2035 ba 121 -0.066 0.190 0.034 0.021 0.058 0.037 0.023
## 40 MTIR 2035 ba 135 -0.092 0.743 0.029 0.003 0.052 0.049 0.037
## 41 MTTH 2035 ba 79 -0.067 0.160 0.030 0.017 0.054 0.036 0.028
## 42 MTUR 2035 ba 173 -0.095 0.755 0.032 0.014 0.058 0.044 0.033
## 43 REVA 2035 ba 364 -0.130 0.758 0.031 0.009 0.056 0.048 0.036
## 44 RMGP 2035 ba 323 -0.115 0.652 0.020 -0.005 0.039 0.044 0.032
## 45 RMMA 2035 ba 240 -0.151 0.926 0.034 0.019 0.058 0.039 0.026
## 46 RMTF 2035 ba 131 -0.086 0.748 0.029 -0.001 0.049 0.050 0.039
## 47 RXAI 2035 ba 347 -0.801 0.196 -0.371 -0.437 -0.297 0.140 0.103
## 48 RXGF 2035 ba 348 -0.789 0.199 -0.352 -0.422 -0.277 0.145 0.108
## 49 BASE 2035 mort 364 -0.894 1.000 -0.017 -0.194 -0.009 0.184 0.162
## 50 CMCC 2035 mort 278 -0.998 1.000 -0.237 -0.695 -0.007 0.688 0.514
## 51 CMUR 2035 mort 238 -0.988 1.000 -0.102 -0.635 0.032 0.667 0.417
## 52 HCTA 2035 mort 5 -0.449 1.000 -0.021 -0.290 0.167 0.457 0.399
## 53 HERB 2035 mort 28 -0.407 1.000 -0.133 -0.193 0.169 0.361 0.221
## 54 MRCC 2035 mort 256 -0.986 1.000 -0.245 -0.692 -0.014 0.678 0.468
## 55 MRCT 2035 mort 121 -0.992 1.000 -0.576 -0.794 -0.227 0.567 0.381
## 56 MTIR 2035 mort 135 -0.998 1.000 -0.103 -0.343 0.084 0.428 0.330
## 57 MTTH 2035 mort 79 -0.811 1.000 0.106 -0.369 0.988 1.357 0.898
## 58 MTUR 2035 mort 173 -0.998 1.000 -0.181 -0.471 0.048 0.519 0.366
## 59 REVA 2035 mort 364 -0.699 1.000 -0.033 -0.150 0.010 0.160 0.143
## 60 RMGP 2035 mort 323 -0.999 1.000 -0.106 -0.353 -0.013 0.340 0.190
## 61 RMMA 2035 mort 240 -0.988 1.000 -0.118 -0.585 0.016 0.601 0.399
## 62 RMTF 2035 mort 131 -0.923 1.000 -0.036 -0.305 0.251 0.556 0.407
## 63 RXAI 2035 mort 347 -0.997 1.000 -0.242 -0.669 -0.061 0.607 0.461
## 64 RXGF 2035 mort 348 -0.974 1.000 -0.240 -0.673 -0.061 0.612 0.452
## mean sd se ci
## 1 0.030 0.071 0.004 0.007
## 2 0.056 0.116 0.007 0.014
## 3 0.040 0.098 0.006 0.013
## 4 0.102 0.261 0.117 0.325
## 5 -0.021 0.049 0.009 0.019
## 6 0.042 0.083 0.005 0.010
## 7 0.026 0.031 0.003 0.006
## 8 0.016 0.064 0.006 0.011
## 9 0.011 0.042 0.005 0.009
## 10 0.029 0.071 0.005 0.011
## 11 0.024 0.073 0.004 0.008
## 12 0.002 0.060 0.003 0.007
## 13 0.035 0.073 0.005 0.009
## 14 0.016 0.068 0.006 0.012
## 15 -0.328 0.111 0.006 0.012
## 16 -0.312 0.114 0.006 0.012
## 17 -0.046 0.052 0.003 0.005
## 18 -0.030 0.031 0.002 0.004
## 19 -0.037 0.042 0.003 0.005
## 20 -0.079 0.065 0.029 0.080
## 21 -0.118 0.075 0.014 0.029
## 22 -0.031 0.034 0.002 0.004
## 23 -0.040 0.042 0.004 0.007
## 24 -0.058 0.055 0.005 0.009
## 25 -0.085 0.063 0.007 0.014
## 26 -0.048 0.049 0.004 0.007
## 27 -0.054 0.059 0.003 0.006
## 28 -0.098 0.060 0.003 0.007
## 29 -0.038 0.042 0.003 0.005
## 30 -0.060 0.056 0.005 0.010
## 31 -0.135 0.150 0.008 0.016
## 32 -0.134 0.145 0.008 0.015
## 33 0.048 0.085 0.004 0.009
## 34 0.076 0.133 0.008 0.016
## 35 0.058 0.113 0.007 0.014
## 36 0.156 0.336 0.150 0.418
## 37 0.004 0.054 0.010 0.021
## 38 0.059 0.090 0.006 0.011
## 39 0.042 0.037 0.003 0.007
## 40 0.035 0.077 0.007 0.013
## 41 0.036 0.045 0.005 0.010
## 42 0.049 0.088 0.007 0.013
## 43 0.043 0.086 0.004 0.009
## 44 0.027 0.072 0.004 0.008
## 45 0.053 0.091 0.006 0.012
## 46 0.035 0.082 0.007 0.014
## 47 -0.368 0.116 0.006 0.012
## 48 -0.348 0.121 0.006 0.013
## 49 0.016 0.356 0.019 0.037
## 50 -0.233 0.519 0.031 0.061
## 51 -0.160 0.509 0.033 0.065
## 52 0.081 0.566 0.253 0.703
## 53 0.087 0.481 0.091 0.186
## 54 -0.255 0.472 0.030 0.058
## 55 -0.450 0.467 0.042 0.084
## 56 -0.063 0.473 0.041 0.081
## 57 0.227 0.629 0.071 0.141
## 58 -0.134 0.502 0.038 0.075
## 59 0.053 0.386 0.020 0.040
## 60 -0.117 0.420 0.023 0.046
## 61 -0.175 0.495 0.032 0.063
## 62 0.019 0.512 0.045 0.089
## 63 -0.273 0.471 0.025 0.050
## 64 -0.281 0.468 0.025 0.049