knitr::opts_chunk$set(echo = TRUE)
Esta pacote tem o objetivo de possibilitar a definição e a execução de simulações de modelos de equilíbrio parcial e geral. A ideia é ser algo similar ao GAMS e GEMPACK.
A definição dos modelos segue a lógica discutida em A simple structure for CGE models by Xiao-guang Zhang.
Nessa abordagem, as variáveis exógenas e endógenas serão classificadas em dois tipos: definidas ou não-definidas. As variáveis exógenas, por definição, são definidas. As endógenas pode ser dos dois tipos. As variáveis definidas são aquelas que podem ser construídas a partir dos valores das demais variáveis, das chamadas equação de definição. Já as não-definidas são aquelas que os valores serão definidos a partir de condições de equilíbrio de mercado (MCCs).
O modelo de armington consiste no problema do consumidor que deve alocar sua renda em produtos de $N$ diferentes origens, que chamaremos de variedades. O consumidor tem uma função de utilidade do tipo CES com elasticidade de substituição. Dessa forma, o problema do consumidor é o seguinte:
$$ \max_{{c_1,...,c_n}}U = \left[\sum_{i=1}^N\alpha_i^\frac{1-\sigma}{\sigma} c_i^\frac{\sigma-1}{\sigma}\right]^\frac{\sigma}{\sigma-1}$$
$$ s.a. \sum_{i=1}^N p_ic_i = R,$$
onde $p_i = p_i^s(1+t_i)$ é o preço pago ao produtor adicionado de uma tarifa ad valorem $t_i$.
Resolvendo o problema do consumidor, chega-se a seguinte equação de demanda para a variedade $i$:
$$c_i = \left(\frac{\alpha_i p_i}{P}\right)^{-\sigma} Q$$ onde $Q=R/P$ e $P$ é o índice de preços da CES que tem a seguinte formula:
$$ P = \left[\sum_i (\alpha_i p_i)^{1-\sigma}\right]^\frac{1}{1-\sigma}$$
Adicionalmente, pode-se definir uma função de demanda total do tipo elasticidade constante:
$$Q = k^d P^{\eta}$$
onde $\eta < 0$ é elasticidade-preço da demanda.
Por fim, a oferta de cada variedade também é dada por uma função do tipo elasticidade constante:
$$ q_i = k^s \left(\frac{p_i}{1+t_i}\right)^{\epsilon_i}$$
Dessa forma, o sistema é formado por essas equações para as variáveis $Q$ (definida), $q_i$ (definida), $c_i$ (definida), $P$ (definida) e $p_i$ (não-definida):
$$Q = k^d P^{\eta}$$
$$ q_i = k^s \left(\frac{p_i}{1+t_i}\right)^{\epsilon_i}$$
$$c_i = \left(\frac{\alpha_i p_i}{P}\right)^{-\sigma} Q$$
$$ P = \left[\sum_i (\alpha_i p_i)^{1-\sigma}\right]^\frac{1}{1-\sigma}$$
$$c_i = q_i$$
Agora, vamos definir o modelo no R. Para isso, vamos escrever as equações em variações exatas. Isto é, a variação de uma variável $x$ entre o equilíbrio base e o novo equilíbrio ($x'$) é denotada por $\hat{x} = \frac{x'}{x}$.
Para construir o modelo, precisaremos definir os conjuntos de índices (por exemplo, o nome das regiões fornecedoras $i$), os parâmetros (acomoda parâmetros e variáveis exógenas), as variáveis e as equações.
library(emr) #load the package! library(tidyverse) params <- list() variables <- list() equations <- list() sets <- list()
Começando pelo conjunto de índices:
sets[['REG']] <-c("reg1", "reg2", "reg3")
Agora iremos definir os parâmetros:
params[["sigma"]] <- create_param( value = 4, indexes = list(sigma = "sigma"), desc = "elasticity of substitution" ) params[["eta"]] <- create_param( value = -1, indexes = list(eta = "eta"), desc = "price elasticity of total demand" ) params[["epsilon"]] <- create_param( value = c(1, 10, 10), indexes = sets['REG'], desc = "price elasticity of individuals supplies" ) params[["tau"]] <- create_param( value = c(1, 1, 1), indexes = sets['REG'], desc = "change in the tarrif power (1 + t)" ) # v0 will be used to compute shares params[["v0"]] <- create_param( value = c(60, 30, 10), indexes = sets['REG'], desc = "initial values" ) params
$$ \hat{P} = \left[\sum_i \pi_ip_i^{1-\sigma}\right]^\frac{1}{1-\sigma},$$
onde $\pi_i = \frac{v^0_i}{\sum_i v^0_i}$ é o share da variedade $i$ no dispêndio inicial. $v^0_i$ é o dispêndio inicial em cada variedade $i$.
variables[["P"]] <- create_variable( value = 1, indexes = list(P = "P"), type = "defined", desc = "change in price index" ) equations[["E_P"]] <- create_equation( "P = sum(v0/sum(v0) * p^(1-sigma))^(1/(1-sigma))", type = 'defining', desc = "change in demand for variety i" )
$$ \hat{Q} = \hat{P}^\eta $$
Inicialmente, é preciso definir as variáveis:
variables[["Q"]] <- create_variable( value = 1, indexes = list(Q = "Q"), type = "defined", desc = "change in total demand" )
E na sequência a equação:
equations[["E_Q"]] <- create_equation( "Q = P^eta", type = "defining", desc = "change in total demand" )
$$\hat{q}_i = \left(\frac{\hat{p_i}}{\hat{\tau_i}}\right)^{\epsilon_i} $$ onde $\hat{\tau_i} = \frac{1 + \hat{t_i}}{1 + t_i}$.
variables[["q"]] <- create_variable( value = 1, indexes = sets['REG'], type = "defined", desc = "change in supply by region" ) equations[["E_q"]] <- create_equation( "q[i] = (p[i]/tau[i])^epsilon[i]", indexes = 'i in REG', type = 'defining', desc = "change in supply by region" )
$$\hat{c}_i = \left(\frac{\hat{p}_i}{\hat{P}}\right)^{-\sigma} \hat{Q}$$
variables[["c"]] <- create_variable( value = 1, indexes = sets['REG'], type = "defined", desc = "change in demand for variety i" ) equations[["E_c"]] <- create_equation( "c[i] = (p[i]/P)^(-sigma) * Q", indexes = 'i in REG', type = 'defining', desc = "change in demand for variety i" )
$$ \hat{q}_i = \hat{c}_i $$
variables[["p"]] <- create_variable( value = 1, indexes = sets['REG'], type = "undefined", desc = "change in price (including tariff) of variety supplied by region i" ) equations[["E_p"]] <- create_equation( "c[i] - q[i]", indexes = 'i in REG', type = "mcc", desc = "equilibrium for variety i" )
armington_model <- list( sets = sets, params = params, variables = variables, equations = equations ) sol0 <- solve_emr(armington_model)
armington_model$params$tau$value['reg2'] <- 1.1 sol1 <- solve_emr(armington_model, method = "nleqslv") # Check the solution message sol1$sol$message # See the results for the internal prices enframe(sol1$variables$p) %>% ggplot(aes(x = name, y = value - 1)) + geom_col(width = 0.7) + scale_y_continuous(labels = scales::percent) + labs( x = "Region", y = "Change in Prices" )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.