(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