* Simulate Commodity Supply

* Classical Microeconomics

* Let's think of the typical firm in classical microeconomics

* Max{x} {Profit funciton =p*f(x)-w*x)}

* In order for there to be an interior solution: f'(x)>0, f''(x)<0

* There is an infinite number of functions that have this property.

* Let's choose a typical one.

* 0

* f(x) = x^(alpha)

* so f'(x) = alpha*x^(alpha-1)

* and Profit funciton' =p*alpha*x^(alpha-1) -w=0

* x^(alpha-1)=w/(p*alpha)

* x=(w/(p*alpha))^(1/(alpha-1))

* Let's imagine a 1000 cities

* Each has a different market price and different input price

clear

set obs 1000

set seed 101

* Declare the parameter of interest

global alpha=.8

gen p = (runiform()+2.3)+1

* hist p

gen w = rnormal()^2+1

* hist w

* Here are two different right skewed distributions of prices

* Firm produced based on:

gen x=(w/(p*$alpha))^(1/($alpha-1))

sum x

* Generate the output as a result of the inputs

* Plus some stochastic production shocks

gen y=x^$alpha*(runiform()+.5)

* A more challenging fit would be:

* gen y=x^$alpha*(runiform()^3*4)

sum y, detail

* Most firms produce between 2.5 and 52 units

* Firms make profit:

gen profit = p*y - w*x

sum profit

* First thing, can we recover the marginal product of x

* ln(y) = alpha*ln(x)+ln(runiform()+.5)

* E(ln(y)) = alpha*E(ln(x)) + E(ln(runiform()+.5))

* E(ln(runiform()+.5))<0 since E(runiform()+.5)=1 and ln(1)=0

* by Jensen's inequality E(ln(runiform()+.5))<0

* However, that should not throw off our estimates of alpha

gen lny=ln(y)

gen lnx=ln(x)

reg lny lnx

di _b[lnx] "is pretty close to $alpha"

* We could also try to estimate this by non-linear least squares

nl (y=x^{alpha})

* This seems to do a pretty good job as well.

* We might however be interested in seeing how supply responds to changes

* in prices.

* let's try a simple OLS

reg y p w

predict y_hat

label var y_hat

line y_hat y, sort

* does not quite look right

* This seems to be a pretty good fit. Let's try a different approach

gen lnp = ln(p)

gen lnw = ln(w)

reg lny lnp lnw

predict lny_hat

* I want to graph both lny_hat and y_hat on the same graph

* But I will need to unitize everything (distributions to

* start at 0 and end at 1

foreach v in lny_hat lny y_hat y {

sum `v'

gen unit_`v'=(`v'-r(min))/(r(max)-r(min))

}

label var unit_lny_hat "ln_y_hat unitized"

label var unit_y_hat "y_hat unitized"

two (connected unit_lny_hat unit_lny, sort msize(vsmall) color(black)) ///

(connected unit_y_hat unit_y, sort msize(vsmall) color(green)) , ///

ytitle("Unitized Y or lnY")

* Elasticities however, work even better. Why is that?

* look first how x is generated

* x=(w/(p*$alpha))^(1/($alpha-1))

* now y=x^$alpha*(runiform()+.5)

* y=(w/(p*$alpha))^(1/($alpha-1))^$alpha*(runiform()+.5)

* y=(w/(p*$alpha))^(1/($alpha-1))*$alpha*(runiform()+.5)

* lny=(1/($alpha-1))*$alpha*(runiform()+.5)ln(w/(p*$alpha))

* lny=(1/($alpha-1))*$alpha*(runiform()+.5){ln(w) - ln(p) - ln($alpha)}

* plim(lny)=(1/($alpha-1))*$alpha*plim((runiform()+.5))plim({ln(w) - ln(p) - ln($alpha)})

* plim(lny)=(1/($alpha-1))*$alpha*plim({ln(w) - ln(p) - ln($alpha)})

* plim(lny)=(1/($alpha-1))*$alpha*[E{ln(w) - E(ln(p)) - ln($alpha)]

di "Therefore (1/($alpha-1))*$alpha = " (1/($alpha-1))*$alpha " ~ " -_b[lnp] " ~ " _b[lnw]

di "And (1/($alpha-1))*$alpha)*-ln($alpha) = " (1/($alpha-1)*$alpha)*-ln($alpha) " ~ " _b[_cons] " ?"

## No comments:

## Post a Comment