R/stan_simulation_funcs.R

Defines functions analyze_start_up_firm analyze_two_stage_growth_firm

Documented in analyze_start_up_firm analyze_two_stage_growth_firm

#' Get the posterior distribution of value-per-share parameter (2-stage firm)
#' @description
#' This function calculates all the relevant parameters and their posteriors
#' for the analysis of 2-stage growth firms. Specifically, this function
#' calculates value-per-share parameter posterior.
#' @param average_beta **Number** Industry average industry beta
#' @param industry_effective_tax **Number** Industry average effective tax
#' @param average_de **Number** Industry average Debt-to-Equity ratio
#' @param firm_tax **Number** Firm current effective tax
#' @param firm_debt **Number** Firm current debt
#' @param firm_equity **Number** Firm current equity
#' @param firm_cash **Number** Firm current cash
#' @param after_tax_ebit **Number** Firm current after tax EBIT
#' @param working_capital **Number** Firm current working capital
#' @param net_capex **Number** Firm current net capital investments
#' @param roic_target **Number** Firm ROIC in 5Y
#' @param roic_initial **Number** Firm current ROIC
#' @param net_capex **Number** Firm current net capital investments
#' @param share_out **Number** Firm current shares outstanding
#' @param company_spread **Number** Firm current debt spread, based on synthetic
#' score
#' @param risk_free **Number** Current risk-free rate
#' @param risk_premium **Number** Current risk premium rate
#' @param marginal_tax **Number** Current country tax rate
#' @param lower_unbeta **Number** Lower margin unlevered beta
#' @param upper_unbeta **Number** Upper margin unlevered beta
#' @param lower_unlevered_beta_sigma **Number** Lower margin unlevered beta sigma
#' @param upper_unlevered_beta_sigma **Number** Upper margin unlevered beta sigma
#' @param lower_levbeta **Number** Lower margin levered beta
#' @param upper_levbeta **Number** Upper margin levered beta
#' @param lower_levered_beta_sigma **NUmber** Lower margin levered beta sigma
#' @param upper_levered_beta_sigma **NUmber** Upper margin levered beta sigma
#' @param lower_cost_debt **Number** Lower margin cost debt
#' @param upper_cost_debt **Number** Upper margin cost debt
#' @param lower_cost_debt_sigma **Number** Lower margin cost debt sigma
#' @param upper_cost_debt_sigma **Number** Upper margin cost debt sigma
#' @param lower_cost_capital **Number** Lower margin cost capital
#' @param upper_cost_capital **Number** Upper margin cost capital
#' @param lower_cost_capital_sigma **Number** Lower margin cost capital sigma
#' @param upper_cost_capital_sigma **Number** Upper margin cost capital sigma
#' @param lower_cost_equity **Number** Lower margin cost equity
#' @param upper_cost_equity **Number** Upper margin cost equity
#' @param lower_cost_equity_sigma **Number** Lower margin cost equity sigma
#' @param upper_cost_equity_sigma **Number** Upper margin cost equity sigma
#' @param lower_growth **Number** Lower margin growth
#' @param upper_growth **Number** Upper margin growth
#' @param lower_growth_sigma **Number** Lower margin growth sigma
#' @param upper_growth_sigma **Number** Upper margin growth sigma
#' @param lower_reinvestment_rate **Number** Lower margin reinvestment
#' @param upper_reinvestment_rate **Number** Upper margin reinvestment
#' @param lower_reinvestment_sigma **Number** Lower margin reinvestment sigma
#' @param upper_reinvestment_sigma **Number** Upper margin reinvestment sigma
#' @param lower_terminal_reinvestment_rate **Number** Lower margin terminal reinvestment rate
#' @param upper_terminal_reinvestment_rate **Number** Upper margin terminal reinvestment rate
#' @param lower_terminal_reinvestment_sigma **Number** Lower margin terminal reinvestment sigma
#' @param upper_terminal_reinvestment_sigma **Number** Upper margin terminal reinvestment sigma
#' @return **List** Fitted STAN model and the medians of relevant parameters
#' @examples
#' analyze_two_stage_growth_firm(
#' average_beta = 1,
#' industry_effective_tax = 0.22,
#' average_de = 0.5,
#' firm_tax = 0.15,
#' firm_debt = 4444,
#' firm_equity = 950,
#' risk_free = 0.035,
#' risk_premium = 0.055,
#' company_spread = 0.05,
#' marginal_tax=0.3,
#' after_tax_ebit = 600,
#' working_capital = 100,
#' net_capex = 50,
#' roic_target = 0.35,
#' roic_initial = 0.2,
#' shares_out = 111,
#' firm_cash = 150,
#' lower_unbeta = 0,
#' upper_unbeta = 2,
#' lower_unlevered_beta_sigma = 0,
#' upper_unlevered_beta_sigma = 0.5,
#' lower_levbeta = 0,
#' upper_levbeta = 2,
#' lower_levered_beta_sigma = 0,
#' upper_levered_beta_sigma = 0.5,
#' lower_cost_debt = 0,
#' upper_cost_debt = 0.2,
#' lower_cost_debt_sigma = 0,
#' upper_cost_debt_sigma = 0.05,
#' lower_cost_capital = 0,
#' upper_cost_capital = 0.2,
#' lower_cost_capital_sigma = 0,
#' upper_cost_capital_sigma = 0.05,
#' lower_cost_equity = 0,
#' upper_cost_equity = 0.25,
#' lower_cost_equity_sigma = 0,
#' upper_cost_equity_sigma = 0.05,
#' lower_growth = 0,
#' upper_growth = 2,
#' lower_growth_sigma = 0,
#' upper_growth_sigma = 0.5,
#' lower_reinvestment_rate = 0,
#' upper_reinvestment_rate = 2,
#' lower_reinvestment_sigma = 0,
#' upper_reinvestment_sigma = 0.5,
#' lower_terminal_reinvestment_rate = 0,
#' upper_terminal_reinvestment_rate = 0.05,
#' lower_terminal_reinvestment_sigma = 0,
#' upper_terminal_reinvestment_sigma = 0.01)
#' @importFrom rstan stan
#' @importFrom broom.mixed tidy
#' @export
analyze_two_stage_growth_firm <- function(
    average_beta,
    industry_effective_tax,
    average_de,
    firm_tax,
    firm_debt,
    firm_equity,
    risk_free,
    risk_premium,
    company_spread,
    marginal_tax,
    after_tax_ebit,
    working_capital,
    net_capex,
    roic_target,
    roic_initial,
    shares_out,
    firm_cash,
    lower_unbeta=0,
    upper_unbeta=2,
    lower_unlevered_beta_sigma = 0,
    upper_unlevered_beta_sigma = 0.5,
    lower_levbeta = 0,
    upper_levbeta = 2,
    lower_levered_beta_sigma = 0,
    upper_levered_beta_sigma = 0.5,
    lower_cost_debt = 0,
    upper_cost_debt = 0.2,
    lower_cost_debt_sigma = 0,
    upper_cost_debt_sigma = 0.05,
    lower_cost_capital = 0,
    upper_cost_capital = 0.2,
    lower_cost_capital_sigma = 0,
    upper_cost_capital_sigma = 0.05,
    lower_cost_equity = 0,
    upper_cost_equity = 0.25,
    lower_cost_equity_sigma = 0,
    upper_cost_equity_sigma = 0.05,
    lower_growth = 0,
    upper_growth = 2,
    lower_growth_sigma = 0,
    upper_growth_sigma = 0.5,
    lower_reinvestment_rate = 0,
    upper_reinvestment_rate = 2,
    lower_reinvestment_sigma = 0,
    upper_reinvestment_sigma = 0.5,
    lower_terminal_reinvestment_rate = 0,
    upper_terminal_reinvestment_rate = 0.05,
    lower_terminal_reinvestment_sigma = 0,
    upper_terminal_reinvestment_sigma = 0.01) {

  ### Prepare data inputs
  data <- list(average_beta = average_beta,
               industry_effective_tax = industry_effective_tax,
               average_de = average_de,
               firm_tax = firm_tax,
               firm_debt = firm_debt,
               firm_equity = firm_equity,
               risk_free = risk_free,
               risk_premium = risk_premium,
               company_spread = company_spread,
               marginal_tax = marginal_tax,
               after_tax_ebit = after_tax_ebit,
               working_capital = working_capital,
               net_capex = net_capex,
               roic_target = roic_target,
               roic_initial = roic_initial,
               shares_out = shares_out,
               firm_cash = firm_cash,
               lower_unbeta = lower_unbeta,
               upper_unbeta = upper_unbeta,
               lower_unlevered_beta_sigma = lower_unlevered_beta_sigma,
               upper_unlevered_beta_sigma = upper_unlevered_beta_sigma,
               lower_levbeta = lower_levbeta ,
               upper_levbeta = upper_levbeta ,
               lower_levered_beta_sigma = lower_levered_beta_sigma,
               upper_levered_beta_sigma = upper_levered_beta_sigma,
               lower_cost_debt = lower_cost_debt,
               upper_cost_debt = upper_cost_debt,
               lower_cost_debt_sigma = lower_cost_debt_sigma,
               upper_cost_debt_sigma = upper_cost_debt_sigma,
               lower_cost_capital = lower_cost_capital,
               upper_cost_capital = upper_cost_capital,
               lower_cost_capital_sigma = lower_cost_capital_sigma,
               upper_cost_capital_sigma = upper_cost_capital_sigma,
               lower_cost_equity = lower_cost_equity,
               upper_cost_equity = upper_cost_equity,
               lower_cost_equity_sigma = lower_cost_equity_sigma,
               upper_cost_equity_sigma = upper_cost_equity_sigma,
               lower_growth = lower_growth,
               upper_growth = upper_growth,
               lower_growth_sigma = lower_growth_sigma,
               upper_growth_sigma = upper_growth_sigma,
               lower_reinvestment_rate = lower_reinvestment_rate,
               upper_reinvestment_rate = upper_reinvestment_rate,
               lower_reinvestment_sigma = lower_reinvestment_sigma,
               upper_reinvestment_sigma =  upper_reinvestment_sigma,
               lower_terminal_reinvestment_rate = lower_terminal_reinvestment_rate,
               upper_terminal_reinvestment_rate = upper_terminal_reinvestment_rate,
               lower_terminal_reinvestment_sigma = lower_terminal_reinvestment_sigma,
               upper_terminal_reinvestment_sigma = upper_terminal_reinvestment_sigma
  )

  ### Prepare model

  model <- "
       data {
            /// Average industry beta
            real average_beta;
            /// Average industry effective tax
            real industry_effective_tax;
            /// Average industry Debt / Equity
            real average_de;
            /// Risk premium
            real risk_premium;
            /// Risk free rate
            real risk_free;
            /// Marginal tax
            real marginal_tax;
            /// Firm effective tax
            real firm_tax;
            /// Firm debt (short+long)
            real firm_debt;
            /// Firm equity
            real firm_equity;
            /// Firm cash and cash-like instruments
            real firm_cash;
            /// Firm debt spread (based on rating)
            real company_spread;
            /// Firm after-tax EBIT
            real after_tax_ebit;
            /// Firm net capital expenses
            real net_capex;
            /// Firm working capital
            real working_capital;
            /// Firm theoretical ROIC in five years
            real roic_target;
            /// Firm current ROIC
            real roic_initial;
            /// Firm shares outstanding
            real shares_out;
            /// Unlevered beta lower limit
            real lower_unbeta;
            /// Unlevered beta upper limit
            real upper_unbeta;
            /// Unlevered beta sigma lower limit
            real lower_unlevered_beta_sigma ;
            /// Unlevered beta sigma upper limit
            real upper_unlevered_beta_sigma ;
            /// Levered beta lower limit
            real lower_levbeta ;
            /// Levered beta upper limit
            real upper_levbeta ;
            /// Levered beta sigma lower limit
            real lower_levered_beta_sigma ;
            /// Levered beta sigma upper limit
            real upper_levered_beta_sigma ;
            /// Cost of debt lower limit
            real lower_cost_debt ;
            /// Cost of debt upper limit
            real upper_cost_debt ;
            /// Cost of debt sigma lower limit
            real lower_cost_debt_sigma ;
            /// Cost of debt sigma upper limit
            real upper_cost_debt_sigma ;
            /// Cost of capital lower limit
            real lower_cost_capital ;
            /// Cost of capital upper limit
            real upper_cost_capital ;
            /// Cost of capital sigma lower limit
            real lower_cost_capital_sigma ;
            /// Cost of capital upper lower limit
            real upper_cost_capital_sigma ;
            /// Cost of equity lower limit
            real lower_cost_equity ;
            /// Cost of equity upper limit
            real upper_cost_equity ;
            /// Cost of equity sigma lower limit
            real lower_cost_equity_sigma ;
            /// Cost of equity sigma upper limit
            real upper_cost_equity_sigma ;
            /// Growth lower limit
            real lower_growth ;
            /// Growth upper limit
            real upper_growth ;
            /// Growth sigma lower limit
            real lower_growth_sigma ;
            /// Growth sigma upper limit
            real upper_growth_sigma ;
            /// Reinvestment rate lower limit
            real lower_reinvestment_rate ;
            /// Reinvestment rate upper limit
            real upper_reinvestment_rate ;
            /// Reinvestment rate sigma lower limit
            real lower_reinvestment_sigma ;
            /// Reinvestment rate sigma upper limit
            real upper_reinvestment_sigma ;
            /// Terminal reinvestment rate lower limit
            real lower_terminal_reinvestment_rate ;
            /// Terminal reinvestment rate upper limit
            real upper_terminal_reinvestment_rate ;
            /// Terminal reinvestment rate sigma lower limit
            real lower_terminal_reinvestment_sigma ;
            /// Terminal reinvestment rate sigma upper limit
            real upper_terminal_reinvestment_sigma ;

          }

          parameters {
            real <lower=lower_unbeta, upper=upper_unbeta> unlevered_beta;
            real <lower=lower_unlevered_beta_sigma, upper=upper_unlevered_beta_sigma> unlevered_beta_sigma;
            real <lower=lower_levbeta, upper=upper_levbeta> levered_beta;
            real <lower=lower_levered_beta_sigma, upper=upper_levered_beta_sigma> levered_beta_sigma;

            real <lower=lower_cost_equity, upper=upper_cost_equity> cost_equity;
            real <lower=lower_cost_equity_sigma, upper=upper_cost_equity_sigma> cost_equity_sigma;
            real <lower=lower_cost_debt_sigma, upper=upper_cost_debt_sigma> cost_debt_sigma;
            real <lower=lower_cost_debt, upper=upper_cost_debt> cost_debt;
            real <lower=lower_cost_capital, upper=upper_cost_debt> cost_capital;
            real <lower=lower_cost_capital_sigma, upper=upper_cost_capital_sigma> cost_capital_sigma;
            real <lower=lower_reinvestment_sigma, upper=upper_reinvestment_sigma> reinvestment_sigma;
            real <lower=lower_reinvestment_rate, upper=upper_reinvestment_rate> reinvestment_rate;
            real <lower=lower_growth, upper=upper_growth> growth;
            real <lower=lower_growth_sigma, upper=upper_growth_sigma> growth_sigma;
            real <lower=lower_terminal_reinvestment_rate, upper=upper_terminal_reinvestment_rate> terminal_reinvestment_sigma;
            real <lower=lower_terminal_reinvestment_sigma, upper=upper_terminal_reinvestment_sigma> terminal_reinvestment_rate;



}

model {
            /// Calculate bottom-up beta
            unlevered_beta_sigma ~ exponential(10);
            levered_beta_sigma ~ exponential(10);
            unlevered_beta ~ normal(average_beta/(1+(1-industry_effective_tax)*average_de), unlevered_beta_sigma);
            levered_beta ~ normal(unlevered_beta*(1+(1-firm_tax)*(firm_debt/firm_equity)), levered_beta_sigma);

            /// Calculate cost of equity
            cost_equity_sigma ~ exponential(50);
            cost_equity ~ normal(risk_free + levered_beta * risk_premium, cost_equity_sigma);

            /// Calculate cost of debt
            cost_debt_sigma ~ exponential(50);
            cost_debt ~ normal(risk_free + company_spread, cost_debt_sigma);

            /// Calculate cost of capital (WACC)
            cost_capital_sigma ~ exponential(50);
            cost_capital ~ normal(cost_equity*(firm_equity/(firm_debt+firm_equity)) + cost_debt*(1-marginal_tax)*(firm_debt/(firm_debt+firm_equity)), cost_capital_sigma);

            /// Calculate reinvestment rate
            reinvestment_sigma ~ exponential(10);
            reinvestment_rate ~ normal((net_capex + working_capital)/after_tax_ebit, reinvestment_sigma);

            /// Calculate dynamic growth
            growth_sigma ~ exponential(10);
            growth ~ normal(roic_target*reinvestment_rate+(1+(roic_target-roic_initial)/roic_initial)^(1/5)-1, growth_sigma);

            /// Terminal reinvestment rate
            terminal_reinvestment_sigma ~ exponential(100);
            terminal_reinvestment_rate ~ normal(1 - (risk_free / roic_target), terminal_reinvestment_sigma);



}

generated quantities {

            real ebit_flow_1;
            real ebit_flow_2;
            real ebit_flow_3;
            real ebit_flow_4;
            real ebit_flow_5;

            real rr_1;
            real rr_2;
            real rr_3;
            real rr_4;
            real rr_5;

            real fcff_1;
            real fcff_2;
            real fcff_3;
            real fcff_4;
            real fcff_5;

            real terminal_ebit;
            real terminal_value;

            real npv_fcff_1;
            real npv_fcff_2;
            real npv_fcff_3;
            real npv_fcff_4;
            real npv_fcff_5;
            real npv_fcff_sum;

            real value_operating_assets;
            real value_equity;
            real value_per_share;
            real zero_value_per_share;


            /// Get EBITs flow
            ebit_flow_1 = after_tax_ebit*(1+growth)^1;
            ebit_flow_2 = after_tax_ebit*(1+growth)^2;
            ebit_flow_3 = after_tax_ebit*(1+growth)^3;
            ebit_flow_4 = after_tax_ebit*(1+growth)^4;
            ebit_flow_5 = after_tax_ebit*(1+growth)^5;

            /// Get terminal value
            /// Terminal EBIT at year 6
            terminal_ebit = ebit_flow_5*(1+risk_free);
            /// Calculate Terminal Value
            terminal_value = terminal_ebit*terminal_reinvestment_rate/(cost_capital-risk_free);

            /// Calculate reinvestment
            rr_1 = ebit_flow_1*reinvestment_rate;
            rr_2 = ebit_flow_2*reinvestment_rate;
            rr_3 = ebit_flow_3*reinvestment_rate;
            rr_4 = ebit_flow_4*reinvestment_rate;
            rr_5 = ebit_flow_5*reinvestment_rate;

            /// Calculate FCFF
            fcff_1 = ebit_flow_1-rr_1;
            fcff_2 = ebit_flow_2-rr_2;
            fcff_3 = ebit_flow_3-rr_3;
            fcff_4 = ebit_flow_4-rr_4;
            fcff_5 = ebit_flow_5-rr_5;

            /// Calculate NPV FCFF
            npv_fcff_1 = fcff_1/(1+cost_capital)^1;
            npv_fcff_2 = fcff_2/(1+cost_capital)^2;
            npv_fcff_3 = fcff_3/(1+cost_capital)^3;
            npv_fcff_4 = fcff_4/(1+cost_capital)^4;
            npv_fcff_5 = fcff_5/(1+cost_capital)^5;
            npv_fcff_sum = npv_fcff_1 + npv_fcff_2 + npv_fcff_3 + npv_fcff_4 + npv_fcff_5;

            /// Calculate equity value
            value_operating_assets = npv_fcff_sum + terminal_value / (1+cost_capital)^5;
            value_equity = value_operating_assets + firm_cash - firm_debt;

            /// Calculate value per share
            zero_value_per_share = 0;
            value_per_share = value_equity > 0 ? value_equity / shares_out : zero_value_per_share;

}

  "

  ### Fit the model
  fit_model <- stan(model_code = model, data = data,
                   iter = 5000 * 4, chains = 10, cores = 2,
                   seed = 110)

  ### Get tidy results
  tidy_params <- tidy(fit_model, conf.int=T, conf.level=0.95)

  return(list(model = fit_model,
              params = tidy_params))

}


#' Get the posterior distribution of value-per-share parameter (start-up firm)
#' @description
#' This function calculates all the relevant parameters and their posteriors
#' for the analysis of start-up firms. Specifically, this function
#' calculates value-per-share parameter posterior.
#' @param revenue_scale **Number** Variation in revenue:  **0.1** for firms w/ revenue (100-999M$);
#' **0.01** for firms w/ revenue (1000M-inf)
#' @param initial_beta **Number** Firm current beta
#' @param terminal_beta **Number** Firm beta in 10Y
#' @param initial_dc **Number** Firm current Debt-to-Capital ratio
#' @param terminal_dc **Number** Firm  Debt-to-Capital ratio in 10Y
#' @param cost_debt **Number** Firm current cost of debt
#' @param terminal_cost_debt **Number** Firm cost of debt in 10Y
#' @param current_revenue **Number** Firm current revenue
#' @param ebit **Number** Firm current EBIT
#' @param nol **Number** Firm current net operating loss
#' @param sales_capital **Number** Firm current Sales-to-Capital ratio
#' @param current_capex **Number** Firm current capital investments
#' @param initial_margin **Number** Firm current or hypothetical initial margin
#' @param final_margin **Number** Firm margin in 10Y
#' @param marginal_tax **Number** Current country tax rate
#' @param debt **Number** Firm current debt
#' @param cash **Number** Firm current cash
#' @param risk_free **Number** Current risk-free rate
#' @param risk_premium **Number** Current risk premium rate
#' @param stocks **Number** Firm current shares outstanding
#' @param growth_trend_y1 **Number** Growth current year to Y1
#' @param growth_trend_y2 **Number** Growth Y1 to Y2
#' @param growth_trend_y3 **Number** Growth Y2 to Y3
#' @param growth_trend_y4 **Number** Growth Y3 to Y4
#' @param growth_trend_y5 **Number** Growth Y4 to Y5
#' @param growth_trend_y6 **Number** Growth Y5 to Y6
#' @param growth_trend_y7 **Number** Growth Y6 to Y7
#' @param growth_trend_y8 **Number** Growth Y7 to Y8
#' @param growth_trend_y9 **Number** Growth Y8 to Y9
#' @param growth_trend_y10 **Number** Growth Y9 to Y10
#' @param growth_trend_terminal **Number** Terminal growth (should be less than cost of firm)
#' @return **List** Fitted STAN model and the medians of relevant parameters
#' @examples
#' analyze_start_up_firm(
#' revenue_scale = 0.1,
#' current_revenue = 871,
#' growth_trend_y1 = 0.5,
#' growth_trend_y2 = 0.5,
#' growth_trend_y3 = 1,
#' growth_trend_y4 = 1,
#' growth_trend_y5 = 0.7,
#' growth_trend_y6 = 0.4,
#' growth_trend_y7 = 0.3,
#' growth_trend_y8 = 0.2,
#' growth_trend_y9 = 0.1,
#' growth_trend_y10 = 0.1,
#' growth_trend_terminal = 0.01,
#' sales_capital=0.31,
#' current_capex = 97,
#' initial_margin = 0.05,
#' final_margin = 0.3,
#' ebit= 0,
#' nol = 127,
#' marginal_tax = 0.3,
#' initial_beta = 1,
#' terminal_beta= 0.8,
#' initial_dc = 0.65,
#' terminal_dc = 0.8,
#' risk_free = 0.028,
#' risk_premium = 0.06,
#' cost_debt = 0.1,
#' terminal_cost_debt = 0.065,
#' cash = 313,
#' debt = 1556,
#' stocks = 284)
#' @importFrom rstan stan
#' @importFrom broom.mixed tidy
#' @export
analyze_start_up_firm <- function(
    revenue_scale,
    current_revenue,
    growth_trend_y1,
    growth_trend_y2,
    growth_trend_y3,
    growth_trend_y4,
    growth_trend_y5,
    growth_trend_y6,
    growth_trend_y7,
    growth_trend_y8,
    growth_trend_y9,
    growth_trend_y10,
    growth_trend_terminal,
    sales_capital,
    current_capex,
    initial_margin,
    final_margin,
    ebit,
    nol,
    marginal_tax,
    initial_beta,
    terminal_beta,
    initial_dc,
    terminal_dc,
    risk_free,
    risk_premium,
    cost_debt,
    terminal_cost_debt,
    cash,
    debt,
    stocks
) {

  ### Prepare data inputs
  data <- list(revenue_scale = revenue_scale,
               current_revenue = current_revenue,
               growth_trend_y1 = growth_trend_y1,
               growth_trend_y2 = growth_trend_y2,
               growth_trend_y3 = growth_trend_y3,
               growth_trend_y4 = growth_trend_y4,
               growth_trend_y5 = growth_trend_y5,
               growth_trend_y6 = growth_trend_y6,
               growth_trend_y7 = growth_trend_y7,
               growth_trend_y8 = growth_trend_y8,
               growth_trend_y9 = growth_trend_y9,
               growth_trend_y10 = growth_trend_y10,
               growth_trend_terminal = growth_trend_terminal,
               sales_capital=sales_capital,
               current_capex = current_capex,
               initial_margin = initial_margin,
               final_margin = final_margin,
               ebit= ebit,
               nol = nol,
               marginal_tax = marginal_tax,
               initial_beta = initial_beta,
               terminal_beta= terminal_beta,
               initial_dc = initial_dc,
               terminal_dc = terminal_dc,
               risk_free = risk_free,
               risk_premium = risk_premium,
               cost_debt = cost_debt,
               terminal_cost_debt = terminal_cost_debt,
               cash = cash,
               debt = debt,
               stocks = stocks)

  ### Prepare model
  model <- "
            data {
              real revenue_scale; /// 0.1 w/ revenue [100-999M$]; 0.01 w/ [1000M-inf]
              real current_revenue;
              real growth_trend_y1;
              real growth_trend_y2;
              real growth_trend_y3;
              real growth_trend_y4;
              real growth_trend_y5;
              real growth_trend_y6;
              real growth_trend_y7;
              real growth_trend_y8;
              real growth_trend_y9;
              real growth_trend_y10;
              real growth_trend_terminal;
              real sales_capital;
              real current_capex;
              real initial_margin;
              real final_margin;
              real ebit;
              real nol;
              real marginal_tax;
              real initial_beta;
              real terminal_beta;
              real initial_dc;
              real terminal_dc;
              real risk_free;
              real risk_premium;
              real cost_debt;
              real terminal_cost_debt;
              real cash;
              real debt;
              real stocks;


          }

          parameters {
              real revenue_y1;
              real revenue_y2;
              real revenue_y3;
              real revenue_y4;
              real revenue_y5;
              real revenue_y6;
              real revenue_y7;
              real revenue_y8;
              real revenue_y9;
              real revenue_y10;
              real revenue_terminal;
              real <lower=10> sigma;

              real beta_initial;
              real <lower=0, upper=2> beta_y1;
              real <lower=0, upper=2> beta_y2;
              real <lower=0, upper=2> beta_y3;
              real <lower=0, upper=2> beta_y4;
              real <lower=0, upper=2> beta_y5;
              real <lower=0, upper=2> beta_y6;
              real <lower=0, upper=2> beta_y7;
              real <lower=0, upper=2> beta_y8;
              real <lower=0, upper=2> beta_y9;
              real <lower=0, upper=2> beta_y10;
              real <lower=0, upper=2> beta_terminal;
              real <lower=0, upper=0.5> sigma_beta;

              real <lower=0> dc_initial;
              real <lower=0.1, upper=1> dc_terminal;
              real <lower=0.1, upper=1> dc_y1;
              real <lower=0.1, upper=1> dc_y2;
              real <lower=0.1, upper=1> dc_y3;
              real <lower=0.1, upper=1> dc_y4;
              real <lower=0.1, upper=1> dc_y5;
              real <lower=0.1, upper=1> dc_y6;
              real <lower=0.1, upper=1> dc_y7;
              real <lower=0.1, upper=1> dc_y8;
              real <lower=0.1, upper=1> dc_y9;
              real <lower=0.1, upper=1> dc_y10;
              real <lower=0, upper=0.15> sigma_dc;

              real <lower=0> ce_initial;
              real <lower=0, upper=0.25> ce_terminal;
              real <lower=0, upper=0.25> ce_y1;
              real <lower=0, upper=0.25> ce_y2;
              real <lower=0, upper=0.25> ce_y3;
              real <lower=0, upper=0.25> ce_y4;
              real <lower=0, upper=0.25> ce_y5;
              real <lower=0, upper=0.25> ce_y6;
              real <lower=0, upper=0.25> ce_y7;
              real <lower=0, upper=0.25> ce_y8;
              real <lower=0, upper=0.25> ce_y9;
              real <lower=0, upper=0.25> ce_y10;
              real <lower=0, upper=0.05> sigma_ce;

              real <lower=0> initial_cd;
              real <lower=0, upper=0.2> terminal_cd;
              real <lower=0, upper=0.2> cd_y1;
              real <lower=0, upper=0.2> cd_y2;
              real <lower=0, upper=0.2> cd_y3;
              real <lower=0, upper=0.2> cd_y4;
              real <lower=0, upper=0.2> cd_y5;
              real <lower=0, upper=0.2> cd_y6;
              real <lower=0, upper=0.2> cd_y7;
              real <lower=0, upper=0.2> cd_y8;
              real <lower=0, upper=0.2> cd_y9;
              real <lower=0, upper=0.2> cd_y10;
              real <lower=0, upper=0.05> sigma_cd;



          }

          model {

              // Calculate revenues
              sigma ~ exponential(revenue_scale);
              revenue_y1 ~ normal(current_revenue*(1+growth_trend_y1), sigma);
              revenue_y2 ~ normal(revenue_y1*(1+growth_trend_y2), sigma);
              revenue_y3 ~ normal(revenue_y2*(1+growth_trend_y3), sigma);
              revenue_y4 ~ normal(revenue_y3*(1+growth_trend_y4), sigma);
              revenue_y5 ~ normal(revenue_y4*(1+growth_trend_y5), sigma);
              revenue_y6 ~ normal(revenue_y5*(1+growth_trend_y6), sigma);
              revenue_y7 ~ normal(revenue_y6*(1+growth_trend_y7), sigma);
              revenue_y8 ~ normal(revenue_y7*(1+growth_trend_y8), sigma);
              revenue_y9 ~ normal(revenue_y8*(1+growth_trend_y9), sigma);
              revenue_y10 ~ normal(revenue_y9*(1+growth_trend_y10), sigma);
              revenue_terminal ~ normal(revenue_y10*(1+growth_trend_terminal), sigma);

              /// Calculate beta
              sigma_beta ~ exponential(10);
              beta_initial ~ normal(initial_beta, sigma_beta);
              beta_y1 ~ normal(initial_beta, sigma_beta);
              beta_y2 ~ normal(initial_beta, sigma_beta);
              beta_y3 ~ normal(initial_beta, sigma_beta);
              beta_y4 ~ normal(initial_beta, sigma_beta);
              beta_y5 ~ normal(initial_beta, sigma_beta);
              beta_y6 ~ normal(beta_y5+((terminal_beta-beta_y5)/5)*(6-5), sigma_beta);
              beta_y7 ~ normal(beta_y6+((terminal_beta-beta_y6)/5)*(7-5), sigma_beta);
              beta_y8 ~ normal(beta_y7+((terminal_beta-beta_y7)/5)*(8-5), sigma_beta);
              beta_y9 ~ normal(beta_y8+((terminal_beta-beta_y8)/5)*(9-5), sigma_beta);
              beta_y10 ~ normal(beta_y9+((terminal_beta-beta_y9)/5)*(10-5), sigma_beta);
              beta_terminal ~ normal(terminal_beta, sigma_beta);

              /// Calculate Debt-to-Capital ratio
              sigma_dc ~ exponential(10);
              dc_initial ~ normal(initial_dc, sigma_dc);
              dc_y1 ~ normal(initial_dc, sigma_dc);
              dc_y2 ~ normal(initial_dc, sigma_dc);
              dc_y3 ~ normal(initial_dc, sigma_dc);
              dc_y4 ~ normal(initial_dc, sigma_dc);
              dc_y5 ~ normal(initial_dc, sigma_dc);
              dc_y6 ~ normal(dc_y5+(terminal_dc-dc_y5)/(10-6+1), sigma_dc);
              dc_y7 ~ normal(dc_y6+(terminal_dc-dc_y6)/(10-7+1), sigma_dc);
              dc_y8 ~ normal(dc_y7+(terminal_dc-dc_y7)/(10-8+1), sigma_dc);
              dc_y9 ~ normal(dc_y8+(terminal_dc-dc_y8)/(10-9+1), sigma_dc);
              dc_y10 ~ normal(dc_y9+(terminal_dc-dc_y9)/(10-10+1), sigma_dc);
              dc_terminal ~ normal(terminal_dc, sigma_dc);

              /// Calculate Cost of Equity
              sigma_ce ~ exponential(10);
              ce_initial ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y1 ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y2 ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y3 ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y4 ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y5 ~ normal(risk_free + initial_beta*risk_premium, sigma_ce);
              ce_y6 ~ normal(risk_free + beta_y6*risk_premium, sigma_ce);
              ce_y7 ~ normal(risk_free + beta_y7*risk_premium, sigma_ce);
              ce_y8 ~ normal(risk_free + beta_y8*risk_premium, sigma_ce);
              ce_y9 ~ normal(risk_free + beta_y9*risk_premium, sigma_ce);
              ce_y10 ~ normal(risk_free + beta_y10*risk_premium, sigma_ce);
              ce_terminal ~ normal(risk_free + beta_terminal*risk_premium, sigma_ce);

              /// Calculate Cost of Debt
              sigma_cd ~ exponential(10);
              initial_cd ~ normal(cost_debt, sigma_cd);
              cd_y1 ~ normal(cost_debt, sigma_cd);
              cd_y2 ~ normal(cost_debt, sigma_cd);
              cd_y3 ~ normal(cost_debt, sigma_cd);
              cd_y4 ~ normal(cost_debt, sigma_cd);
              cd_y5 ~ normal(cost_debt, sigma_cd);
              cd_y6 ~ normal(cd_y5+(terminal_cost_debt-cd_y5)/(10-6+1), sigma_cd);
              cd_y7 ~ normal(cd_y6+(terminal_cost_debt-cd_y6)/(10-7+1), sigma_cd);
              cd_y8 ~ normal(cd_y7+(terminal_cost_debt-cd_y7)/(10-8+1), sigma_cd);
              cd_y9 ~ normal(cd_y8+(terminal_cost_debt-cd_y8)/(10-9+1), sigma_cd);
              cd_y10 ~ normal(cd_y9+(terminal_cost_debt-cd_y9)/(10-10+1), sigma_cd);
              terminal_cd ~ normal(terminal_cost_debt, sigma_cd);




          }

          generated quantities {
              real reinvestment_y1;
              real reinvestment_y2;
              real reinvestment_y3;
              real reinvestment_y4;
              real reinvestment_y5;
              real reinvestment_y6;
              real reinvestment_y7;
              real reinvestment_y8;
              real reinvestment_y9;
              real reinvestment_y10;
              real reinvestment_terminal;

              real capex_y1;
              real capex_y2;
              real capex_y3;
              real capex_y4;
              real capex_y5;
              real capex_y6;
              real capex_y7;
              real capex_y8;
              real capex_y9;
              real capex_y10;
              real capex_terminal;
              real initial_capex;

              real margin_y1;
              real margin_y2;
              real margin_y3;
              real margin_y4;
              real margin_y5;
              real margin_y6;
              real margin_y7;
              real margin_y8;
              real margin_y9;
              real margin_y10;
              real margin_initial;
              real margin_terminal;

              real ebit_initial;
              real ebit_terminal;
              real ebit_y1;
              real ebit_y2;
              real ebit_y3;
              real ebit_y4;
              real ebit_y5;
              real ebit_y6;
              real ebit_y7;
              real ebit_y8;
              real ebit_y9;
              real ebit_y10;

              real nol_initial;
              real nol_y1;
              real nol_y2;
              real nol_y3;
              real nol_y4;
              real nol_y5;
              real nol_y6;
              real nol_y7;
              real nol_y8;
              real nol_y9;
              real nol_y10;
              real nol_terminal;
              real null_nol;

              real tax_y1;
              real tax_y2;
              real tax_y3;
              real tax_y4;
              real tax_y5;
              real tax_y6;
              real tax_y7;
              real tax_y8;
              real tax_y9;
              real tax_y10;
              real tax_terminal;
              real null_tax;

              real tax_ebit_y1;
              real tax_ebit_y2;
              real tax_ebit_y3;
              real tax_ebit_y4;
              real tax_ebit_y5;
              real tax_ebit_y6;
              real tax_ebit_y7;
              real tax_ebit_y8;
              real tax_ebit_y9;
              real tax_ebit_y10;
              real tax_ebit_terminal;

              real initial_fcff;
              real fcff_y1;
              real fcff_y2;
              real fcff_y3;
              real fcff_y4;
              real fcff_y5;
              real fcff_y6;
              real fcff_y7;
              real fcff_y8;
              real fcff_y9;
              real fcff_y10;
              real fcff_terminal;

              real initial_tax_rate;
              real tax_rate_y1;
              real tax_rate_y2;
              real tax_rate_y3;
              real tax_rate_y4;
              real tax_rate_y5;
              real tax_rate_y6;
              real tax_rate_y7;
              real tax_rate_y8;
              real tax_rate_y9;
              real tax_rate_y10;
              real tax_rate_terminal;

              real  initial_tcd;
              real  tcd_y1;
              real  tcd_y2;
              real  tcd_y3;
              real  tcd_y4;
              real  tcd_y5;
              real  tcd_y6;
              real  tcd_y7;
              real  tcd_y8;
              real  tcd_y9;
              real  tcd_y10;
              real  tcd_terminal;

              real  initial_cost_capital;
              real  cost_capital_y1;
              real  cost_capital_y2;
              real  cost_capital_y3;
              real  cost_capital_y4;
              real  cost_capital_y5;
              real  cost_capital_y6;
              real  cost_capital_y7;
              real  cost_capital_y8;
              real  cost_capital_y9;
              real  cost_capital_y10;
              real  cost_capital_terminal;

              real npv_fcff_terminal;

              real cumm_cost_cap_1;
              real cumm_cost_cap_2;
              real cumm_cost_cap_3;
              real cumm_cost_cap_4;
              real cumm_cost_cap_5;
              real cumm_cost_cap_6;
              real cumm_cost_cap_7;
              real cumm_cost_cap_8;
              real cumm_cost_cap_9;
              real cumm_cost_cap_10;

              real npv_fcff_y1;
              real npv_fcff_y2;
              real npv_fcff_y3;
              real npv_fcff_y4;
              real npv_fcff_y5;
              real npv_fcff_y6;
              real npv_fcff_y7;
              real npv_fcff_y8;
              real npv_fcff_y9;
              real npv_fcff_y10;
              real npv_fcff_sum;

              real npv_tv;

              real operating_assets;
              real firm_value;
              real equity_value;

              real zero_value_per_share;
              real value_per_share;






              /// Calculate reinvestment
              reinvestment_y1 = (revenue_y1-current_revenue)*sales_capital;
              reinvestment_y2 = (revenue_y2-revenue_y1)*sales_capital;
              reinvestment_y3 = (revenue_y3-revenue_y2)*sales_capital;
              reinvestment_y4 = (revenue_y4-revenue_y3)*sales_capital;
              reinvestment_y5 = (revenue_y5-revenue_y4)*sales_capital;
              reinvestment_y6 = (revenue_y6-revenue_y5)*sales_capital;
              reinvestment_y7 = (revenue_y7-revenue_y6)*sales_capital;
              reinvestment_y8 = (revenue_y8-revenue_y7)*sales_capital;
              reinvestment_y9 = (revenue_y9-revenue_y8)*sales_capital;
              reinvestment_y10 = (revenue_y10-revenue_y9)*sales_capital;
              reinvestment_terminal = (revenue_terminal-revenue_y10)*sales_capital;

              /// Calculate CapEx
              initial_capex = 0;
              capex_y1 = reinvestment_y1 + current_capex;
              capex_y2 = reinvestment_y2 + capex_y1;
              capex_y3 = reinvestment_y3 + capex_y2;
              capex_y4 = reinvestment_y4 + capex_y3;
              capex_y5 = reinvestment_y5 + capex_y4;
              capex_y6 = reinvestment_y6 + capex_y5;
              capex_y7 = reinvestment_y7 + capex_y6;
              capex_y8 = reinvestment_y8 + capex_y7;
              capex_y9 = reinvestment_y9 + capex_y8;
              capex_y10 = reinvestment_y10 + capex_y9;
              capex_terminal = reinvestment_terminal + capex_y10;

              /// Calculate margins
              margin_initial = initial_margin;
              margin_y1 = (initial_margin*1.5)/2.5+final_margin/2.5;
              margin_y2 = (margin_y1*1.5)/2.5+final_margin/2.5;
              margin_y3 = (margin_y2*1.5)/2.5+final_margin/2.5;
              margin_y4 = (margin_y3*1.5)/2.5+final_margin/2.5;
              margin_y5 = (margin_y4*1.5)/2.5+final_margin/2.5;
              margin_y6 = (margin_y5*1.5)/2.5+final_margin/2.5;
              margin_y7 = (margin_y6*1.5)/2.5+final_margin/2.5;
              margin_y8 = (margin_y7*1.5)/2.5+final_margin/2.5;
              margin_y9 = (margin_y8*1.5)/2.5+final_margin/2.5;
              margin_y10 = (margin_y9*1.5)/2.5+final_margin/2.5;
              margin_terminal = final_margin;

              /// Calculate EBIT
               ebit_initial = ebit;
               ebit_y1 = revenue_y1*margin_y1;
               ebit_y2 = revenue_y2*margin_y2;
               ebit_y3 = revenue_y3*margin_y3;
               ebit_y4 = revenue_y4*margin_y4;
               ebit_y5 = revenue_y5*margin_y5;
               ebit_y6 = revenue_y6*margin_y6;
               ebit_y7 = revenue_y7*margin_y7;
               ebit_y8 = revenue_y8*margin_y8;
               ebit_y9 = revenue_y9*margin_y9;
               ebit_y10 = revenue_y10*margin_y10;
               ebit_terminal = revenue_terminal*margin_terminal;

              /// Calculate nol
              nol_initial = nol;
              null_nol = 0;
              nol_y1 = nol_initial > ebit_y1 ? nol_initial - ebit_y1 : null_nol;
              nol_y2 = nol_y1 > ebit_y2 ? nol_y1 - ebit_y2 : null_nol;
              nol_y3 = nol_y2 > ebit_y3 ? nol_y2 - ebit_y3 : null_nol;
              nol_y4 = nol_y3 > ebit_y4 ? nol_y3 - ebit_y4 : null_nol;
              nol_y5 = nol_y4 > ebit_y5 ? nol_y4 - ebit_y5 : null_nol;
              nol_y6 = nol_y5 > ebit_y6 ? nol_y5 - ebit_y6 : null_nol;
              nol_y7 = nol_y6 > ebit_y7 ? nol_y6 - ebit_y7 : null_nol;
              nol_y8 = nol_y7 > ebit_y8 ? nol_y7 - ebit_y8 : null_nol;
              nol_y9 = nol_y8 > ebit_y9 ? nol_y8 - ebit_y9 : null_nol;
              nol_y10 = nol_y9 > ebit_y10 ? nol_y9 - ebit_y10 : null_nol;
              nol_terminal = nol_y10 > ebit_terminal ? nol_y10 - ebit_terminal : null_nol;

              /// Calculate Taxes
              null_tax = 0;
              tax_y1 = (ebit_y1 < 0 || ebit_y1 < nol_initial) ? null_tax : (ebit_y1-nol_initial)*marginal_tax;
              tax_y2 = (ebit_y2 < 0 || ebit_y2 < nol_y1) ? null_tax : (ebit_y2-nol_y1)*marginal_tax;
              tax_y3 = (ebit_y3 < 0 || ebit_y3 < nol_y2) ? null_tax : (ebit_y3-nol_y2)*marginal_tax;
              tax_y4 = (ebit_y4 < 0 || ebit_y4 < nol_y3) ? null_tax : (ebit_y4-nol_y3)*marginal_tax;
              tax_y5 = (ebit_y5 < 0 || ebit_y5 < nol_y4) ? null_tax : (ebit_y5-nol_y4)*marginal_tax;
              tax_y6 = (ebit_y6 < 0 || ebit_y6 < nol_y5) ? null_tax : (ebit_y6-nol_y5)*marginal_tax;
              tax_y7 = (ebit_y7 < 0 || ebit_y7 < nol_y6) ? null_tax : (ebit_y7-nol_y6)*marginal_tax;
              tax_y8 = (ebit_y8 < 0 || ebit_y8 < nol_y7) ? null_tax : (ebit_y8-nol_y7)*marginal_tax;
              tax_y9 = (ebit_y9 < 0 || ebit_y9 < nol_y8) ? null_tax : (ebit_y9-nol_y8)*marginal_tax;
              tax_y10 = (ebit_y10 < 0 || ebit_y10 < nol_y9) ? null_tax : (ebit_y10-nol_y9)*marginal_tax;
              tax_terminal = (ebit_terminal < 0 || ebit_terminal < nol_y10) ? null_tax : (ebit_terminal-nol_y10)*marginal_tax;

              /// Calculate After-Tax EBIT
              tax_ebit_y1 = ebit_y1 - tax_y1;
              tax_ebit_y2 = ebit_y2 - tax_y2;
              tax_ebit_y3 = ebit_y3 - tax_y3;
              tax_ebit_y4 = ebit_y4 - tax_y4;
              tax_ebit_y5 = ebit_y5 - tax_y5;
              tax_ebit_y6 = ebit_y6 - tax_y6;
              tax_ebit_y7 = ebit_y7 - tax_y7;
              tax_ebit_y8 = ebit_y8 - tax_y8;
              tax_ebit_y9 = ebit_y9 - tax_y9;
              tax_ebit_y10 = ebit_y10 - tax_y10;
              tax_ebit_terminal = ebit_terminal - tax_terminal;

              /// Calculate Tax Rate
              initial_tax_rate = 0;
              tax_rate_y1 = 1 - tax_ebit_y1 / ebit_y1;
              tax_rate_y2 = 1 - tax_ebit_y2 / ebit_y2;
              tax_rate_y3 = 1 - tax_ebit_y3 / ebit_y3;
              tax_rate_y4 = 1 - tax_ebit_y4 / ebit_y4;
              tax_rate_y5 = 1 - tax_ebit_y5 / ebit_y5;
              tax_rate_y6 = 1 - tax_ebit_y6 / ebit_y6;
              tax_rate_y7 = 1 - tax_ebit_y7 / ebit_y7;
              tax_rate_y8 = 1 - tax_ebit_y8 / ebit_y8;
              tax_rate_y9 = 1 - tax_ebit_y9 / ebit_y9;
              tax_rate_y10 = 1 - tax_ebit_y10 / ebit_y10;
              tax_rate_terminal = 1 - tax_ebit_terminal / ebit_terminal;

              /// Calculate FCFF
              initial_fcff = ebit;
              fcff_y1 = tax_ebit_y1 - reinvestment_y1;
              fcff_y2 = tax_ebit_y2 - reinvestment_y2;
              fcff_y3 = tax_ebit_y3 - reinvestment_y3;
              fcff_y4 = tax_ebit_y4 - reinvestment_y4;
              fcff_y5 = tax_ebit_y5 - reinvestment_y5;
              fcff_y6 = tax_ebit_y6 - reinvestment_y6;
              fcff_y7 = tax_ebit_y7 - reinvestment_y7;
              fcff_y8 = tax_ebit_y8 - reinvestment_y8;
              fcff_y9 = tax_ebit_y9 - reinvestment_y9;
              fcff_y10 = tax_ebit_y10 - reinvestment_y10;
              fcff_terminal = tax_ebit_terminal - reinvestment_terminal;

              /// Calculate After-tax Cost of Debt
              initial_tcd = initial_cd*(1-initial_tax_rate);
              tcd_y1 = cd_y1*(1-tax_rate_y1);
              tcd_y2 = cd_y2*(1-tax_rate_y2);
              tcd_y3 = cd_y3*(1-tax_rate_y3);
              tcd_y4 = cd_y4*(1-tax_rate_y4);
              tcd_y5 = cd_y5*(1-tax_rate_y5);
              tcd_y6 = cd_y6*(1-tax_rate_y6);
              tcd_y7 = cd_y7*(1-tax_rate_y7);
              tcd_y8 = cd_y8*(1-tax_rate_y8);
              tcd_y9 = cd_y9*(1-tax_rate_y9);
              tcd_y10 = cd_y10*(1-tax_rate_y10);
              tcd_terminal = terminal_cd*(1-tax_rate_terminal);

              /// Calculate Cost of Capital
              initial_cost_capital = ce_initial*(1-dc_initial)+initial_tcd*dc_initial;
              cost_capital_y1 = ce_y1*(1-dc_y1)+tcd_y1*dc_y1;
              cost_capital_y2 = ce_y2*(1-dc_y2)+tcd_y2*dc_y2;
              cost_capital_y3 = ce_y3*(1-dc_y3)+tcd_y3*dc_y3;
              cost_capital_y4 = ce_y4*(1-dc_y4)+tcd_y4*dc_y4;
              cost_capital_y5 = ce_y5*(1-dc_y5)+tcd_y5*dc_y5;
              cost_capital_y6 = ce_y6*(1-dc_y6)+tcd_y6*dc_y6;
              cost_capital_y7 = ce_y7*(1-dc_y7)+tcd_y7*dc_y7;
              cost_capital_y8 = ce_y8*(1-dc_y8)+tcd_y8*dc_y8;
              cost_capital_y9 = ce_y9*(1-dc_y9)+tcd_y9*dc_y9;
              cost_capital_y10 = ce_y10*(1-dc_y10)+tcd_y10*dc_y10;
              cost_capital_terminal = ce_terminal*(1-dc_terminal)+tcd_terminal*dc_terminal;

              /// Get terminal value FCFF
              npv_fcff_terminal = nol_terminal>0 ? (fcff_terminal/(cost_capital_terminal-growth_trend_terminal))+nol_terminal*marginal_tax : fcff_terminal/(cost_capital_terminal-growth_trend_terminal);

              /// Calculate cumulative cost of capital
              cumm_cost_cap_1 = 1+cost_capital_y1;
              cumm_cost_cap_2 = cumm_cost_cap_1*(1+cost_capital_y2);
              cumm_cost_cap_3 = cumm_cost_cap_2*(1+cost_capital_y3);
              cumm_cost_cap_4 = cumm_cost_cap_3*(1+cost_capital_y4);
              cumm_cost_cap_5 = cumm_cost_cap_4*(1+cost_capital_y5);
              cumm_cost_cap_6 = cumm_cost_cap_5*(1+cost_capital_y6);
              cumm_cost_cap_7 = cumm_cost_cap_6*(1+cost_capital_y7);
              cumm_cost_cap_8 = cumm_cost_cap_7*(1+cost_capital_y8);
              cumm_cost_cap_9 = cumm_cost_cap_8*(1+cost_capital_y9);
              cumm_cost_cap_10 = cumm_cost_cap_9*(1+cost_capital_y10);

              /// Calculate FCFF NPV
              npv_fcff_y1 = fcff_y1 / cumm_cost_cap_1;
              npv_fcff_y2 = fcff_y2 / cumm_cost_cap_2;
              npv_fcff_y3 = fcff_y3 / cumm_cost_cap_3;
              npv_fcff_y4 = fcff_y4 / cumm_cost_cap_4;
              npv_fcff_y5 = fcff_y5 / cumm_cost_cap_5;
              npv_fcff_y6 = fcff_y6 / cumm_cost_cap_6;
              npv_fcff_y7 = fcff_y7 / cumm_cost_cap_7;
              npv_fcff_y8 = fcff_y8 / cumm_cost_cap_8;
              npv_fcff_y9 = fcff_y9 / cumm_cost_cap_9;
              npv_fcff_y10 = fcff_y10 / cumm_cost_cap_10;
              npv_fcff_sum = npv_fcff_y1 + npv_fcff_y2 + npv_fcff_y3 + npv_fcff_y4 + npv_fcff_y5 + npv_fcff_y6 + npv_fcff_y7 + npv_fcff_y8 + npv_fcff_y9 + npv_fcff_y10;

              /// Calculate terminal FCFF NPV
              npv_tv = npv_fcff_terminal / cumm_cost_cap_10;

              /// Calculate Operating Assests
              operating_assets = npv_tv + npv_fcff_sum;

              /// Calculate value of firm
              firm_value = operating_assets + cash;

              /// Calculate value of equity
               equity_value = firm_value - debt;

              /// Calculate value / share
              zero_value_per_share = 0;
              value_per_share = equity_value > 0 ? equity_value / stocks : zero_value_per_share;
}
"

  ### Fit the model
  fit_model <- stan(model_code = model, data = data,
                    iter = 5000 * 4, chains = 4, cores = 2,
                    seed = 110)

  ### Get tidy results
  tidy_params <- tidy(fit_model, conf.int=T, conf.level=0.95)

  return(list(model = fit_model,
              params = tidy_params))

}
TracyRage/fun_valuation documentation built on Jan. 29, 2023, 8:41 a.m.