# NOT RUN {
dst.firm <- node_set("output", NA,
type = "Leontief", a = c(0.5, 1),
"prod", "lab"
)
dst.consumer <- node_set("utility", NA, type = "Leontief", a = 1, "prod")
dstl <- list(dst.firm, dst.consumer)
B <- matrix(c(
1, 0,
0, 0
), 2, 2, TRUE)
S0Exg <- matrix(c(
NA, NA,
NA, 100
), 2, 2, TRUE)
## variable dst and technology progress
policy.TP <- function(time, state, dstl) {
if (time >= 200) {
dstl[[1]]$a <- c(0.5, 0.8)
} else {
dstl[[1]]$a <- c(0.5, 1)
}
state
}
ge.TP <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.TP,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000
)
matplot(ge.TP$ts.z, type = "l")
plot(ge.TP$ts.p[, 1] / ge.TP$ts.p[, 2], type = "l")
## variable supply coefficient matrix and technology progress
policy.TP <- function(time, state) {
if (time >= 200) {
state$B[1, 1] <- 2
} else {
state$B[1, 1] <- 1
}
state
}
ge.TP <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.TP,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000
)
matplot(ge.TP$ts.z, type = "l")
plot(ge.TP$ts.p[, 1] / ge.TP$ts.p[, 2], type = "l")
## variable dst and disequilibrium
policy.DE <- function(time, dstl) {
if (time >= 200) {
dstl[[1]]$a[2] <- dstl[[1]]$a[2] * 0.999
} else {
dstl[[1]]$a[2] <- 1
}
}
ge.DE <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.DE,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000
)
matplot(ge.DE$ts.z, type = "l")
plot(ge.DE$ts.p[, 1] / ge.DE$ts.p[, 2], type = "l")
## structural equilibria and structural transition
policy.SE <- function(time, state, dstl) {
dstl[[1]]$a[2] <- structural_function(state$last.z[1], c(105, 125), 1, 0.5)
}
ge.low.level <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.SE,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000,
z0 = c(100, 100)
)
matplot(ge.low.level$ts.z, type = "l")
ge.high.level <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.SE,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000,
z0 = c(150, 100)
)
matplot(ge.high.level$ts.z, type = "l")
policy.ST <- function(time, state, dstl) {
dstl[[1]]$a[2] <- structural_function(state$last.z[1], c(105, 125), 1, 0.5)
if (time >= 200 && time <= 210) state$S[2, 2] <- 125 # Introduce foreign labor.
state
}
ge.ST <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("prod", "lab"),
names.agent = c("firm", "consumer"),
policy = policy.ST,
ts = TRUE,
maxIteration = 1,
numberOfPeriods = 1000,
z0 = c(100, 100)
)
matplot(ge.ST$ts.z, type = "l")
#### economic cycles and an interest rate policy for the firm
dst.firm <- node_set("agent", NA,
type = "FIN",
rate = c(1, 0.25),
"cc1", "money"
)
node_set(dst.firm, "cc1",
type = "Leontief",
a = 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)
policy.interest.rate <- function(time, state, dstl, state.history) {
upsilon <- NA
if (time >= 600) {
upsilon <- state.history$z[time - 1, 1] / mean(state.history$z[(time - 50):(time - 1), 1])
dstl[[1]]$rate[2] <- max(0.25 + 0.5 * log(upsilon), 0)
} else {
dstl[[1]]$rate[2] <- 0.25
}
state$current.policy.data <- c(time, dstl[[1]]$rate[2], upsilon)
state
}
B <- matrix(0, 3, 3)
B[1, 1] <- 1
S0Exg <- matrix(NA, 3, 3)
S0Exg[2, 2] <- 100
S0Exg[3, 3] <- 100
de <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("wheat", "labor", "money"),
names.agent = c("firm", "laborer", "money.lender"),
p0 = rbind(0.625, 0.375, 0.25),
z0 = rbind(95, 100, 100),
priceAdjustmentVelocity = 0.3,
numberOfPeriods = 1000,
maxIteration = 1,
trace = FALSE,
ts = TRUE
)
matplot(de$ts.z, type = "l")
ge.policy <- sdm2(
A = dstl, B = B, S0Exg = S0Exg,
names.commodity = c("wheat", "labor", "money"),
names.agent = c("firm", "laborer", "money.lender"),
p0 = rbind(0.625, 0.375, 0.25),
z0 = rbind(95, 100, 100),
priceAdjustmentVelocity = 0.3,
numberOfPeriods = 1000,
maxIteration = 1,
trace = FALSE,
ts = TRUE,
policy = policy.interest.rate
)
matplot(ge.policy$ts.z, type = "l")
#### Example 9.3 in Li (2019): fixed-ratio price adjustment method
#### and disequilibrium (business cycles) in a pure production economy
fixedRatioPriceAdjustmentFunction <- function(p, q) {
thresholdForPriceAdjustment <- 0.99
priceAdjustmentVelocity <- 0.02
result <- ifelse(q <= thresholdForPriceAdjustment,
p * (1 - priceAdjustmentVelocity),
p
)
return(prop.table(result))
}
de.Sraffa <- sdm2(
A = matrix(c(
56 / 115, 6,
12 / 575, 2 / 5
), 2, 2, TRUE),
B = diag(2),
maxIteration = 1,
numberOfPeriods = 100,
p0 = rbind(1 / 15, 1),
z0 = rbind(575, 20),
priceAdjustmentFunction = fixedRatioPriceAdjustmentFunction,
ts = TRUE
)
matplot(growth_rate(de.Sraffa$ts.z), type = "l")
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab