Real States appraisals based in the involutive method

Building Area

Overall Sales Value calculation

Investment cash flow

Sales Cash Flow

Net Cash Flow

Cash Flow table

Net Present Value

Sensibilidade aa TMA

Sensibilidade-custo do VPL

Sensibilidade-venda do VPL

Sensibilidade-BDI do Incorporador

Sensibilidade-BDI do Construtor

Sensibilidade-Fluxo de Vendas

Simulação com o Método de Monte Carlo

involutivo_estatico(vgv, cc, bdi_c, bdi_i, cor)

AREA_CONSTRUIDA(area_terreno, IA, np)

VGV(area_construida, valor_unitario)

FCI(cc, wc, bdi_c, index = seq(0, length(wc) - 1))

FCV(vgv, wv, index = seq(0, length(wv) - 1))

FCL(fcv, fci, bdi_i, cor)

FC(fcv, fci, bdi_i, cor, tma)

VPL(fcl, tma)

sensibilidade_tma(range, fcl)

sensibilidade_custo(range, cc, wc, vgv, wv, bdi_i, bdi_c, cor, tma)

sensibilidade_venda(range, cc, wc, vgv, wv, bdi_i, bdi_c, cor, tma)

sensibilidade_bdi_i(range, cc, wc, vgv, wv, bdi_i, bdi_c, cor, tma)

sensibilidade_bdi_c(range, cc, wc, vgv, wv, bdi_i, bdi_c, cor, tma)

sensibilidade_vv(range, cc, wc, vgv, wv, bdi_i, bdi_c, cor, tma)

vpl_sim(Nsim, ranges, variables, distribution = "uniform", params,
  dependencia = diag(length(ranges)))

Arguments

vgv

Overall Sales Value

cc

Constructions Costs

bdi_c

Constructors Budget Difference Income

bdi_i

Developers Budget Difference Income

cor

Brokerage fee

area_terreno

land area

IA

rate of land use

np

floors

area_construida

Building area (sq. meters)

valor_unitario

unit selling value ($/sq. meters)

wc

vector of weights of the total constructions costs over periods

index

a vector with the periods in which are made the expenses

wv

vector of weights of the total expected sales over periods

fcv

the expected sales cash flow

fci

the expected investment cash flow

tma

the attractiveness rate

fcl

the Net Cash Flow of the project

range

range of variation

Nsim

Número de simulações

ranges

Intervalos de variação de cada variável

variables

Variáveis utilizadas para o computo do VPL

distribution

Distribuição a priori a ser utilizada para gerar as variáveis

params

parâmtros a serem utilizados pelas distribuições a priori.

dependencia

matriz de covariância entre as variáveis

Value

the maximum building area

The Overall Sales Value

a vector containing the expected investment cash flow

a vector containing the expected sales cash flow

the expected Net Cash Flow

the net present value of the project

Examples

ac <- AREA_CONSTRUIDA(630, 2.5, 5) vgv <- VGV(20*94.5, 7000) wc <- c(5.67, 6.63, 7.24, 7.55, 10.76, 13.26, 14.72, 13.16, 14.18, 6.84)/100 bdi_c <- 31.46/100 cc <- 3523496.76 fci_provavel <- FCI(cc = cc, wc = wc, bdi_c = bdi_c) wv <- c(0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2)/20 fcv_provavel <- FCV(vgv = vgv, wv = wv) bdi_i <- 23.5223/100 cor <- 5/100 fcl_provavel <- FCL(fcv_provavel, fci_provavel, bdi_i = bdi_i, cor = cor) tma <- 1.91/100 FC(fcv_provavel, fci_provavel, bdi_i = bdi_i, cor = cor, tma = tma)
#> # A tibble: 14 x 8 #> Periodo FCV FCI Corretagem BDI_Incorporador FCL fator_VP #> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> #> 1 0 0. -2.63e5 0 0 -2.63e5 1 #> 2 1 0. -3.07e5 0 0 -3.07e5 0.981 #> 3 2 6.62e5 -3.35e5 -33075 -155600. 1.37e5 0.963 #> 4 3 6.62e5 -3.50e5 -33075 -155600. 1.23e5 0.945 #> 5 4 6.62e5 -4.98e5 -33075 -155600. -2.56e4 0.927 #> 6 5 6.62e5 -6.14e5 -33075 -155600. -1.41e5 0.910 #> 7 6 1.32e6 -6.82e5 -66150 -311200. 2.64e5 0.893 #> 8 7 1.32e6 -6.10e5 -66150 -311200. 3.36e5 0.876 #> 9 8 1.32e6 -6.57e5 -66150 -311200. 2.89e5 0.860 #> 10 9 1.32e6 -3.17e5 -66150 -311200. 6.29e5 0.843 #> 11 10 1.32e6 0. -66150 -311200. 9.46e5 0.828 #> 12 11 1.32e6 0. -66150 -311200. 9.46e5 0.812 #> 13 12 1.32e6 0. -66150 -311200. 9.46e5 0.797 #> 14 13 1.32e6 0. -66150 -311200. 9.46e5 0.782 #> # ... with 1 more variable: FCL_descontado <dbl>
vpl_provavel <- VPL(fcl_provavel, tma = tma) range_tma <- c(1.2, 2.6)/100 s_tma <- sensibilidade_tma(range_tma, fcl_provavel) s_tma
#> # A tibble: 3 x 4 #> Situacao TMA VPL Variacao #> <chr> <dbl> <dbl> <dbl> #> 1 Pessimista 0.026 3593421. -0.0760 #> 2 Provavel 0.019 3888946. 0 #> 3 Otimista 0.012 4209472. 0.0824
require(ggplot2)
#> Carregando pacotes exigidos: ggplot2
ggplot(s_tma, aes(x = TMA, y = VPL)) + geom_line() + geom_point() + scale_x_continuous(labels = scales::percent) + scale_y_continuous(labels = reais()) + labs(title = "Sensibilidade à TMA")
range_custos <- c(.9, 1.1) s_custo <- sensibilidade_custo(range = range_custos, cc = cc, wc = wc, vgv = vgv, wv = wv, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma) s_custo
#> # A tibble: 3 x 4 #> Situacao CC VPL Variacao #> <chr> <dbl> <dbl> <dbl> #> 1 Pessimista 3171147. 4305807. 0.108 #> 2 Provavel 3523497. 3884554. 0 #> 3 Otimista 3875846. 3463300. -0.108
ggplot(s_custo, aes(x = CC, y = VPL)) + geom_line() + geom_point() + scale_x_continuous(labels = reais()) + scale_y_continuous(labels = reais()) + labs(title = "Sensibilidade à variação dos Custos de Construção")
range_vgv <- c(.9, 1.1) s_vgv <- sensibilidade_venda(range = range_vgv, cc = cc, wc = wc, vgv = vgv, wv = wv, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma) s_vgv
#> Situacao Vendas VPL Variacao #> 1 Pessimista 11907000 3074845 -0.2084432 #> 2 Provavel 13230000 3884554 0.0000000 #> 3 Otimista 14553000 4694262 0.2084432
ggplot(s_vgv, aes(x = Vendas, y = VPL)) + geom_point() + geom_line() + scale_x_continuous(labels = reais()) + scale_y_continuous(labels = reais()) + labs(title = "Sensibilidade à variação dos Preços de Venda")
range_bdi_i <- c(0.9, 1.1) s_bdi_i <- sensibilidade_bdi_i(range_bdi_i, cc = cc, wc = wc, vgv = vgv, wv = wv, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma) s_bdi_i
#> # A tibble: 3 x 4 #> Situacao BDI_Incorporador VPL Variacao #> <chr> <dbl> <dbl> <dbl> #> 1 Pessimista 0.259 3618090. -0.0686 #> 2 Provavel 0.235 3884554. 0 #> 3 Otimista 0.212 4151017. 0.0686
range_bdi_c <- c(0.9, 1.1) s_bdi_c <- sensibilidade_bdi_c(range = range_bdi_c, cc = cc, wc = wc, vgv = vgv, wv = wv, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma ) s_bdi_c
#> # A tibble: 3 x 4 #> Situacao BDI_Construtor VPL Variacao #> <chr> <dbl> <dbl> <dbl> #> 1 Pessimista 0.346 3783742. -0.0260 #> 2 Provavel 0.315 3884554. 0 #> 3 Otimista 0.283 3985365. 0.0260
wv_otimista <- c(0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)/20 wv_pessimista <- c(0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)/20 range_vv <- list(Pessimista = wv_pessimista, Provavel = wv, Otimista = wv_otimista) s_vv <- sensibilidade_vv(range_vv, cc = cc, wc = wc, vgv = vgv, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma) s_vv
#> # A tibble: 3 x 4 #> Situacao VV VPL Variacao #> <chr> <chr> <dbl> <dbl> #> 1 Pessimista Pessimista 3440235. -0.114 #> 2 Provavel Provavel 3884554. 0 #> 3 Otimista Otimista 4162031. 0.0714
ggplot(s_vv, aes(x = Situacao, y = VPL)) + geom_col() + scale_y_continuous(labels = reais()) + labs(title = "Sensibilidade à variação da velocidade de vendas")
## Simulacao de Monte Carlo com distribuição uniforme e dependencia total set.seed(1) ranges <- list(vgv = c(min = 0.9, max = 1.1), cc = c(min = 0.9, max = 1.1), bdi_i = c(min = 0.9, max = 1.1), bdi_c = c(min = 0.9, max = 1.1) ) variables <- list(vgv = vgv, wv = wv, cc = cc, wc = wc, bdi_i = bdi_i, bdi_c = bdi_c, cor = cor, tma = tma) dependencia100 <- matrix(data = c(1, -1, -1, -1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1), nrow = 4, byrow = TRUE, dimnames = list(names(ranges), names(ranges))) Nsim <- 500 vpl_unif100 <- vpl_sim(Nsim, ranges = ranges, variables = variables, distribution = "uniform", dependencia = dependencia100) m_unif100 <- mean(vpl_unif100$vpl) std_unif100 <- sd(vpl_unif100$vpl) hist(vpl_unif100$vpl, freq = FALSE)
curve(dnorm(x, mean = m_unif100, sd = std_unif100), col = "darkblue", lwd = 2, add = TRUE, yaxt = "n")
summary(vpl_unif100$vpl)
#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 2306997 3144064 3837678 3907803 4691988 5499130
# Its possible to compute the probabilities based in the simulations: mean(vpl_unif100$vpl < 0.85*m_unif100) # probability that VPL < 85% of the mean
#> [1] 0.298
# Or compute the probabilities based on the normal curve with mean and sd # equals to that of the simulation. pnorm(0.85*m_unif100, mean = m_unif100, sd = std_unif100)
#> [1] 0.2621137
## Simulacao de Monte Carlo com distribuição uniforme e dependencia 50% dependencia50 <- matrix(data = c(1, -.5, -.5, -.5, -.5, 1, .5, .5, -.5, .5, 1, .5, -.5, .5, .5, 1), nrow = 4, byrow = TRUE, dimnames = list(names(ranges), names(ranges))) vpl_unif50 <- vpl_sim(Nsim, ranges = ranges, variables = variables, distribution = "uniform", dependencia = dependencia50) m_unif50 <- mean(vpl_unif50$vpl) std_unif50 <- sd(vpl_unif50$vpl) hist(vpl_unif50$vpl, freq = FALSE)
curve(dnorm(x, mean = m_unif50, sd = std_unif50), col = "darkblue", lwd = 2, add = TRUE, yaxt = "n")
summary(vpl_unif50$vpl)
#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 2340738 3278590 3884752 3905475 4539139 5407827
## Simulacao de Monte Carlo com dist. uniforme e variáveis 100% independentes dependencia0 <- diag(4) dimnames(dependencia0) <- list(names(ranges), names(ranges)) vpl_unif <- vpl_sim(Nsim, ranges = ranges, variables = variables, distribution = "uniform", dependencia = dependencia0) m_unif <- mean(vpl_unif$vpl) std_unif <- sd(vpl_unif$vpl) hist(vpl_unif$vpl, freq = FALSE)
curve(dnorm(x, mean = m_unif, sd = std_unif), col = "darkblue", lwd = 2, add = TRUE, yaxt = "n")
summary(vpl_unif$vpl)
#> Min. 1st Qu. Median Mean 3rd Qu. Max. #> 2462830 3491126 3878295 3887083 4308942 5271889
## Simulacao de Monte Carlo com distribuição beta e dependencia 100% params <- list(vgv = c(shape1 = 2, shape2 = 2), cc = c(shape1 = 2, shape2 = 2), bdi_i = c(shape1 = 2, shape2 = 2), bdi_c = c(shape1 = 2, shape2 = 2) ) vpl_beta <- vpl_sim(Nsim, ranges = ranges, variables = variables, distribution = "beta", params = params, dependencia = dependencia100) m_beta <- mean(vpl_beta$vpl) std_beta <- sd(vpl_beta$vpl) ggplot(vpl_beta, aes(vpl)) + geom_histogram(aes(y =..density..), col="red", fill="green", alpha=.2) + stat_function( fun = dnorm, args = list(mean = m_beta, sd = std_beta) )
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.