gemQuasilinearPureExchange_2_2: A Pure Exchange Economy with a Quasilinear Utility Function

View source: R/gemQuasilinearPureExchange_2_2.R

gemQuasilinearPureExchange_2_2R Documentation

A Pure Exchange Economy with a Quasilinear Utility Function

Description

An example of a pure exchange economy with a quasilinear utility function (Karaivanov, see the reference).

Usage

gemQuasilinearPureExchange_2_2(
  A,
  Endowment = matrix(c(3, 4, 7, 0), 2, 2, TRUE),
  policy = NULL
)

Arguments

A

a demand structure tree list, a demand coefficient 2-by-2 matrix (alias demand structure matrix) or a function A(state) which returns a 2-by-2 matrix (see sdm2).

Endowment

a 2-by-2 matrix.

policy

a policy function (see sdm2).

Details

Suppose there are only two goods (bananas and fish) and 2 consumers (Annie and Ben) in an exchange economy. Annie has a utility function x_1^(1/3) * x_2^(2/3) where x_1 is the amount of fish she eats and x_2 is the amount of bananas she eats. Annie has an endowment of 3 kilos of fish and 7 bananas. Ben has a utility function x_1 + 1.5 * log(x_2) and endowments of 4 kilos of fish and 0 bananas. Assume the price of bananas is 1. See the reference for more details.

Value

A general equilibrium.

References

http://www.sfu.ca/~akaraiva/CE_example.pdf

Examples


demand_consumer2 <- function(w, p) {
  QL_demand(w = w, p = p, alpha = 1.5, type = "log")
}

A <- function(state) {
  a1 <- CD_A(1, rbind(1 / 3, 2 / 3), state$p)
  a2 <- demand_consumer2(state$w[2], state$p)
  cbind(a1, a2)
}

ge.mat <- gemQuasilinearPureExchange_2_2(A = A)
ge.mat

## Use a dstl and a policy function to compute the general equilibrium above.
dst.consumer1 <- node_new("util",
                          type = "CD", alpha = 1, beta = c(1 / 3, 2 / 3),
                          "fish", "banana"
)
dst.consumer2 <- node_new("util",
                          type = "Leontief", a = c(1, 1),
                          "fish", "banana"
)

dstl <- list(dst.consumer1, dst.consumer2)

policy.quasilinear <- function(A, state) {
  wealth <- t(state$p) %*% state$S
  A[[2]]$a <- demand_consumer2(wealth[2], state$p)
}

ge.dstl <- gemQuasilinearPureExchange_2_2(
  A = dstl,
  policy = policy.quasilinear
)
ge.dstl

#### Another example. Now Ben has a utility function x_1 + sqrt(x_2).
demand_consumer2 <- function(w, p) {
  QL_demand(w = w, p = p, alpha = 1, beta = 0.5, type = "power")
}

A <- function(state) {
  a1 <- CD_A(1, rbind(1 / 3, 2 / 3), state$p)
  a2 <- demand_consumer2(state$w[2], state$p)
  cbind(a1, a2)
}

ge.2_2 <- gemQuasilinearPureExchange_2_2(A = A)
ge.2_2

## another computation method for the economy above
A <- function(state) {
  a1 <- CD_A(1, rbind(1 / 3, 2 / 3, 0, 0), state$p)
  a2 <- c(0, 0, 1, 0)
  a3 <- c(1, 0, 0, 0) # firm 1
  a4 <- CD_A(1, rbind(0, 1 / 2, 0, 1 / 2), state$p) # firm 2
  cbind(a1, a2, a3, a4)
}

ge.4_4 <- sdm2(
  A = A,
  B = {
    B <- matrix(0, 4, 4)
    B[3, 3] <- 1
    B[3, 4] <- 1
    B
  },
  S0Exg = {
    S0Exg <- matrix(NA, 4, 4)
    S0Exg[1:2, 1] <- c(3, 7)
    S0Exg[1:2, 2] <- c(4, 0)
    S0Exg[4, 1:2] <- c(0, 1)
    S0Exg
  },
  names.commodity = c("fish", "banana", "util2", "land"),
  names.agent = c("Annie", "Ben", "firm1", "firm2"),
  numeraire = "banana"
)
ge.4_4

#### another example
n.fish.demander <- 21
wealth <- 20 # the wealth (or income) of each fish demander
fish.supply <- 12
aggregare.demand <- function(p) {
  result <- 0
  for (alpha in seq(5, 15, length.out = n.fish.demander)) {
    result <- result + QL_demand(w = wealth, p = p, alpha = alpha, beta = 1, type = "min")
  }
  result
}

ge <- sdm2(
  A = function(state) {
    a1 <- aggregare.demand(state$p / state$p[1])
    a2 <- c(1, 0)
    cbind(a1, a2)
  },
  B = matrix(0, 2, 2),
  S0Exg = matrix(c(
    n.fish.demander * wealth, 0,
    0, fish.supply
  ), 2, 2, TRUE),
  names.commodity = c("gold", "fish"),
  names.agent = c("fish.demander", "fish.supplier"),
  numeraire = "gold",
  p0 = c(1, 1) # p0 = c(1, 9.25)
)

ge$p
ge$z
ge$D
ge$S

aggregare.demand.fish <- c()
p2.set <- seq(0, 16, 0.01)
for (p2 in p2.set) {
  aggregare.demand.fish <- c(
    aggregare.demand.fish,
    aggregare.demand(c(1, p2))[2]
  )
}

plot(aggregare.demand.fish,
     p2.set,
     xlab = "demand for fish", ylab = "price of fish", pch = 20
)
abline(v = fish.supply)
grid()
points(ge$D[2, 1], ge$p[2], pch = 8, col = "red")


GE documentation built on Nov. 8, 2023, 9:07 a.m.