View source: R/policyMarketClearingPrice.R
policyMarketClearingPrice | R Documentation |
This policy is to make the market clear every period. In this case, the path of the economy is the spot equilibrium path. Generally, this function is passed to the function sdm2 as an argument to compute the spot equilibrium path.
policyMarketClearingPrice(time, A, state, ...)
time |
the current time. |
A |
a demand structure tree list (i.e. dstl, see demand_coefficient), a demand coefficient n-by-m matrix (alias demand structure matrix) or a function A(state) which returns an n-by-m matrix. |
state |
the current state. |
... |
optional arguments to be passed to the function sdm2. |
A list consisting of p, S and B which specify the prices, supplies and supply coefficient matrix after adjustment.
LI Wu (2019, ISBN: 9787521804225) General Equilibrium and Structural Dynamics: Perspectives of New Structural Economics. Beijing: Economic Science Press. (In Chinese)
Grandmont, J.M. (1977). Temporary General Equilibrium Theory. Econometrica 45, 535-572.
CGE::iep and sdm2
, gemTemporaryEquilibriumPath
.
The market clearing prices are the prices with a stickiness value equal to zero.
Therefore, this function can actually be replaced by makePolicyStickyPrice
in the calculation.
#### an iep of the example (see Table 2.1 and 2.2) of the canonical dynamic
#### macroeconomic general equilibrium model in Torres (2016).
ge <- gemCanonicalDynamicMacroeconomic_3_2(
policy.price = policyMarketClearingPrice,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 50,
z0 = c(0.5, 1)
)
par(mfrow = c(1, 2))
matplot(ge$ts.z, type = "o", pch = 20)
matplot(ge$ts.p, type = "o", pch = 20)
#### the same as above
ge <- gemCanonicalDynamicMacroeconomic_3_2(
policy.price = makePolicyStickyPrice(stickiness = 0),
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 50,
z0 = c(0.5, 1)
)
par(mfrow = c(1, 2))
matplot(ge$ts.z, type = "o", pch = 20)
matplot(ge$ts.p, type = "o", pch = 20)
#### TFP shock in the economy above (see Torres, 2016, section 2.8).
numberOfPeriods <- 200
discount.factor <- 0.97
depreciation.rate <- 0.06
beta1.firm <- 0.35
return.rate <- 1 / discount.factor - 1
set.seed(1)
alpha.shock <- rep(1, 100)
alpha.shock[101] <- exp(0.01)
for (t in 102:numberOfPeriods) {
alpha.shock[t] <- exp(0.95 * log(alpha.shock[t - 1]))
}
policyTechnologyChange <- function(time, A) {
A[[1]]$func <- function(p) {
result <- CD_A(
alpha.shock[time], rbind(beta1.firm, 1 - beta1.firm, 0),
c(p[1] * (return.rate + depreciation.rate), p[2:3])
)
result[3] <- p[1] * result[1] * return.rate / p[3]
result
}
}
InitialEndowments <- {
tmp <- matrix(0, 3, 2)
tmp[1, 1] <- tmp[2, 2] <- tmp[3, 2] <- 1
tmp
}
ge <- gemCanonicalDynamicMacroeconomic_3_2(
policy.supply = makePolicySupply(InitialEndowments),
policy.technology = policyTechnologyChange,
policy.price = policyMarketClearingPrice,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 200
)
c <- ge$A[1, 2] * ge$ts.z[, 2] # consumption
par(mfrow = c(2, 2))
matplot(ge$ts.z, type = "l")
x <- 100:140
plot(x, ge$ts.z[x, 1] / ge$ts.z[x[1], 1], type = "o", pch = 20)
plot(x, ge$ts.z[x, 2] / ge$ts.z[x[1], 2], type = "o", pch = 20)
plot(x, c[x] / c[x[1]], type = "o", pch = 20)
#### an iep of example 7.2 (a monetary economy) in Li (2019). See CGE::Example7.2.
interest.rate <- 0.25
dst.firm <- node_new("cc", #composite commodity
type = "FIN",
rate = c(1, interest.rate),
"cc1", "money"
)
node_set(dst.firm, "cc1",
type = "CD", alpha = 1, beta = c(0.5, 0.5),
"wheat", "labor"
)
dst.laborer <- Clone(dst.firm)
dst.money.lender <- Clone(dst.firm)
dstl <- list(dst.firm, dst.laborer, dst.money.lender)
B <- matrix(0, 3, 3)
B[1, 1] <- 1
S0Exg <- matrix(NA, 3, 3)
S0Exg[2, 2] <- 100
S0Exg[3, 3] <- 100
InitialEndowments <- {
tmp <- matrix(0, 3, 3)
tmp[1, 1] <- 10
tmp[2, 2] <- tmp[3, 3] <- 100
tmp
}
ge <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("wheat", "labor", "money"),
names.agent = c("firm", "laborer", "money.lender"),
numeraire = c(money = interest.rate),
numberOfPeriods = 20,
maxIteration = 1,
ts = TRUE,
policy = list(
makePolicySupply(S = InitialEndowments),
policyMarketClearingPrice
)
)
par(mfrow = c(1, 2))
matplot(ge$ts.z, type = "o", pch = 20)
matplot(ge$ts.p, type = "o", pch = 20)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.