Nothing
## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
echo = TRUE, warning = FALSE, message = FALSE, fig.align = 'center',
out.width = '75%', fig.dim = c(8,5)
)
## -----------------------------------------------------------------------------
# install.packages("devtools")
# options(download.file.method = "libcurl")
# devtools::install_github('sergiocostafh/timbeR')
library(dplyr)
library(timbeR)
glimpse(tree_scaling)
## -----------------------------------------------------------------------------
library(ggplot2)
tree_scaling <- tree_scaling %>%
mutate(did = di/dbh,
hih = hi/h)
ggplot(tree_scaling, aes(x = hih, y = did, group = tree_id))+
geom_point()+
labs(x = 'hi / h',
y = 'di / dbh')
## -----------------------------------------------------------------------------
poli5 <- lm(did~hih+I(hih^2)+I(hih^3)+I(hih^4)+I(hih^5),tree_scaling)
summary(poli5)
tree_scaling <- tree_scaling %>%
mutate(di_poli = predict(poli5)*dbh)
poli_rmse <- tree_scaling %>%
summarise(RMSE = sqrt(sum((di_poli-di)^2)/mean(di_poli))) %>%
pull(RMSE) %>%
round(2)
ggplot(tree_scaling,aes(x=hih))+
geom_point(aes(y = (di_poli-di)/di_poli*100))+
geom_hline(aes(yintercept = 0))+
scale_y_continuous(limits=c(-60,60), breaks = seq(-100,100,20))+
scale_x_continuous(limits=c(0,1))+
labs(x = 'hi / h', y = 'Residuals (%)',
title = '5th degree polynomial taper function (Schöepfer, 1966)',
subtitle = 'Dispersion of residuals along the stem',
caption = paste0('Root Mean Squared Error = ', poli_rmse,'%'))+
theme(plot.title.position = 'plot')
## -----------------------------------------------------------------------------
library(minpack.lm)
bi <- nlsLM(di ~ taper_bi(dbh, h, hih, b0, b1, b2, b3, b4, b5, b6),
data=tree_scaling,
start=list(b0=1.8,b1=-0.2,b2=-0.04,b3=-0.9,b4=-0.0006,b5=0.07,b6=-.14))
summary(bi)
tree_scaling <- tree_scaling %>%
mutate(di_bi = predict(bi))
bi_rmse <- tree_scaling %>%
summarise(RMSE = sqrt(sum((di_bi-di)^2)/mean(di_bi))) %>%
pull(RMSE) %>%
round(2)
ggplot(tree_scaling,aes(x=hih))+
geom_point(aes(y = (di_bi-di)/di_bi*100))+
geom_hline(aes(yintercept = 0))+
scale_y_continuous(limits=c(-60,60), breaks = seq(-100,100,20))+
scale_x_continuous(limits=c(0,1))+
labs(x = 'hi / h', y = 'Residuals (%)',
title = 'Bi (2000) trigonometric variable-form taper function',
subtitle = 'Dispersion of residuals along the stem',
caption = paste0('Root Mean Squared Error = ', bi_rmse,'%'))+
theme(plot.title.position = 'plot')
## -----------------------------------------------------------------------------
kozak <- nlsLM(di ~ taper_kozak(dbh, h, hih, b0, b1, b2, b3, b4, b5, b6, b7, b8, p),
start=list(b0=1.00,b1=.97,b2=.03,b3=.49,b4=-
0.87,b5=0.50,b6=3.88,b7=0.03,b8=-0.19, p = .1),
data = tree_scaling,
control = nls.lm.control(maxiter = 1000, maxfev = 2000)
)
summary(kozak)
tree_scaling <- tree_scaling %>%
mutate(di_kozak = predict(kozak))
kozak_rmse <- tree_scaling %>%
summarise(RMSE = sqrt(sum((di_kozak-di)^2)/mean(di_kozak))) %>%
pull(RMSE) %>%
round(2)
ggplot(tree_scaling, aes(x=hih))+
geom_point(aes(y = (di_kozak-di)/di_kozak*100))+
geom_hline(aes(yintercept = 0))+
scale_y_continuous(limits=c(-100,100), breaks = seq(-100,100,20))+
scale_x_continuous(limits=c(0,1))+
labs(x = 'hi / h', y = 'Residuals (%)',
title = 'Kozak (2004) variable-form taper function',
subtitle = 'Dispersion of residuals along the stem',
caption = paste0('Root Mean Squared Error = ', kozak_rmse,'%'))+
theme(plot.title.position = 'plot')
## -----------------------------------------------------------------------------
dbh <- 25
h <- 20
## -----------------------------------------------------------------------------
coef_poli <- coef(poli5)
coef_bi <- coef(bi)
coef_kozak <- coef(kozak)[-10]
p_kozak <- coef(kozak)[10]
## -----------------------------------------------------------------------------
hi <- 15
poly5_di(dbh, h, hi, coef_poli)
bi_di(dbh, h, hi, coef_bi)
kozak_di(dbh, h, hi, coef_kozak, p = p_kozak)
## -----------------------------------------------------------------------------
hi <- seq(0.1,h,.1)
ggplot(mapping=aes(x=hi))+
geom_line(aes(y=poly5_di(dbh, h, hi, coef_poli), linetype = '5th degree polynomial'))+
geom_line(aes(y=bi_di(dbh, h, hi, coef_bi), linetype = 'Bi (2000)'))+
geom_line(aes(y=kozak_di(dbh, h, hi, coef_kozak, p_kozak), linetype = 'Kozak (2004)'))+
scale_linetype_manual(name = 'Fitted models', values = c('solid','dashed','dotted'))+
labs(x = 'hi (m)',
y = 'Predicted di (cm)')
## -----------------------------------------------------------------------------
di <- 10
poly5_hi(dbh, h, di, coef_poli)
bi_hi(dbh, h, di, coef_bi)
kozak_hi(dbh, h, di, coef_kozak, p_kozak)
## -----------------------------------------------------------------------------
poly5_vol(dbh, h, coef_poli)
bi_vol(dbh, h, coef_bi)
kozak_vol(dbh, h, coef_kozak, p_kozak)
## -----------------------------------------------------------------------------
hi = 15
h0 = .2
poly5_vol(dbh, h, coef_poli, hi, h0)
bi_vol(dbh, h, coef_bi, hi, h0)
kozak_vol(dbh, h, coef_kozak, p_kozak, hi, h0)
## -----------------------------------------------------------------------------
assortments <- data.frame(
NAME = c('> 15','4-15'),
SED = c(15,4),
MINLENGTH = c(2.65,2),
MAXLENGTH = c(2.65,4.2),
LOSS = c(5,5)
)
## -----------------------------------------------------------------------------
poly5_logs(dbh, h, coef_poli, assortments)
bi_logs(dbh, h, coef_bi, assortments)
kozak_logs(dbh, h, coef_kozak, p_kozak, assortments)
## -----------------------------------------------------------------------------
poly5_logs_plot(dbh, h, coef_poli, assortments)
bi_logs_plot(dbh, h, coef_bi, assortments)
kozak_logs_plot(dbh, h, coef_kozak, p_kozak, assortments)
## -----------------------------------------------------------------------------
# Using mapply
tree_data <- data.frame(dbh = c(18.3, 23.7, 27.2, 24.5, 20, 19.7),
h = c(18, 24, 28, 24, 18.5, 19.2))
assortment_vol <- mapply(
poly5_logs,
dbh = tree_data$dbh,
h = tree_data$h,
SIMPLIFY = T,
MoreArgs = list(
coef = coef_poli,
assortments = assortments,
stump_height = 0.2,
total_volume = T,
only_vol = T
)
) %>%
t()
assortment_vol
# Bindind tree_data and volumes output
library(tidyr)
cbind(tree_data, assortment_vol) %>%
unnest()
## -----------------------------------------------------------------------------
# Using pmap
library(purrr)
tree_data %>%
mutate(coef = list(coef_poli),
assortments = list(assortments),
stump_height = 0.2,
total_volume = T,
only_vol = T) %>%
mutate(assortment_vol = pmap(.,poly5_logs)) %>%
select(dbh, h, assortment_vol) %>%
unnest(assortment_vol)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.