This notebook will demonstrate some demand estimation methods. It focuses on the random coefficients logit model of demand for differentiated products of Berry, Levinsohn, & Pakes (1995).
Simulation
Preferences
There are
where
Market Shares
The market share of product
Profit Maximization
We will assume that firm's choose price, which will be the first element of
where
The firm's first order condition is
Note that rearranging this equation gives the familiar price equals marginal cost plus markup formula:
This is a markup since
Marginal Costs
We will assume that marginal costs are log linear:
where
Equilibrium
In equilibrium, each firm's price much satisfy the above first order condition given the other
Simulating Data
We will use the BLPDemand.jl package for computing and simulating the equilibrium. See the docs for that package for more information.
In the simulation, exogenous product characteristics and cost shifters are
To ensure that finite equilibrium prices exist, it is important that all consumers dislike higher prices, i.e.
To see the source for functions in BLPDemand.jl
or any other package, you can use the CodeTracking
package.
xxxxxxxxxx
using Revise, CodeTracking, BLPDemand, PlutoUI
Enter cell code...
xxxxxxxxxx
function simulateBLP(J, T, β::AbstractVector, σ::AbstractVector, γ::AbstractVector, S;
varξ=1, varω=1, randj=1.0, firmid=1:J, costf=:log)
K = length(β)
L = length(γ)
dat = Array{MarketData,1}(undef, T)
Ξ = Array{Vector,1}(undef,T)
Ω = Array{Vector,1}(undef,T)
for t in 1:T
Jt, fid = if randj < 1.0
inc = falses(J)
while sum(inc)==0
inc .= rand(J) .< randj
end
sum(inc), firmid[inc]
else
J, firmid
end
x = rand(K, Jt)
ξ = randn(Jt)*varξ
w = rand(L, Jt)
ν = randn(K, S)
ν[1,:] .= -rand(S) # make sure individuals' price coefficients are negative
ω = randn(Jt)*varω
c = costf == :log ? exp.(w'*γ + ω) : w'*γ + ω
p = eqprices(c, β, σ, ξ, x[2:end,:], ν, firmid=fid)
x[1,:] .= p
s = share(x'*β+ξ, σ, x, ν)
z = makeivblp(cat(x[2:end,:],w, dims=1), firmid=fid,
forceown=(length(firmid)!=length(unique(firmid))))
dat[t] = MarketData(s, x, w, fid, z, z, ν)
Ξ[t] = ξ
Ω[t] = ω
end
return(dat=dat, ξ=Ξ, ω=Ω)
end
xxxxxxxxxx
let
# get the function definition
str = simulateBLP(J, T, β, σ, γ, S)
# for nicer display in Pluto
str = "```julia\n"*str*"\n```\n"
Markdown.parse(str)
end
The hardest part of simulating the model is solving for equilibrium prices. This is done by eqprices
function, which uses the approach of Morrow and Skerlos (2011).
function eqprices(mc::AbstractVector,
β::AbstractVector, σ::AbstractVector,
ξ::AbstractVector,
x::AbstractMatrix, ν::AbstractMatrix;
firmid= 1:length(mc),
tol=sqrt(eps(eltype(mc))),
maxiter=10000, verbose=false)
iter = 0
dp = 10*tol
focnorm = 10*tol
p = mc*1.1
pold = copy(p)
samefirm = firmid.==firmid'
while (iter < maxiter) && ((dp > tol) || (focnorm > tol))
s, ds, Λ, Γ = dsharedp(β, σ, p, x, ν, ξ)
ζ = inv(Λ)*(samefirm.*Γ)*(p - mc) - inv(Λ)*s
focnorm = norm(Λ*(p-mc - ζ))
pold, p = p, pold
p .= mc .+ ζ
dp = norm(p-pold)
if verbose && (iter % 100 == 0)
iter, p, focnorm
end
iter += 1
end
if verbose
iter, p, focnorm
end
return(p)
end
We use the following parameters for simulating the data.
xxxxxxxxxx
begin
J = 5 # number of products
T = 100 # number of markets
β = [-0.1, # price coefficients
ones(2)...] # other product coefficients
σ = [0.5, ones(length(β)-1)...] # Σ = Diagonal(σ)
γ = ones(1) # marginal cost coefficients
S = 10 # number of Monte-Carlo draws per market and product to integrate out ν
sξ = 0.2 # standard deviation of demand shocks
sω = 0.2 # standard deviation of cost shocks
end;
xxxxxxxxxx
sim = simulateBLP(J, T, β, σ, γ, S, varξ=sξ, varω=sω);
NamedTuple{(:dat, :ξ, :ω),Tuple{Array{MarketData,1},Array{Array{T,1} where T,1},Array{Array{T,1} where T,1}}}
xxxxxxxxxx
typeof(sim)
We can see that simulateBLP
returns a named tuple. The first element of the tuple is an array of MarketData
which represents data that we would observe. The next two are the unobserved demand and cost shocks.
MarketData
is a struct
defined in BLPDemand.jl
.
Let's look at some summary statistics and figures describing the simulated data.
xxxxxxxxxx
using Statistics, DataFrames
min | max | mean | std dev | ||
---|---|---|---|---|---|
String | Real | Real | Float64 | Float64 | |
1 | "Number of Products" | 5 | 5 | 5.0 | 0.0 |
2 | "Shares" | 0.0274241 | 0.312975 | 0.132071 | 0.0505714 |
3 | "Prices" | 3.39449 | 9.52479 | 5.4538 | 0.88458 |
4 | "Other Characteristics" | 0.00183849 | 0.998827 | 0.509104 | 0.282729 |
5 | "Cost Shifters" | 0.0096932 | 0.999206 | 0.490112 | 0.281802 |
6 | "Demand Instruments" | 0.00183849 | 3.9834 | 1.99203 | 1.27632 |
7 | "Supply Instruments" | 0.00183849 | 3.9834 | 1.99203 | 1.27632 |
xxxxxxxxxx
begin
function describe(d::Array{MarketData})
T = length(d)
funcs = [minimum, maximum, mean, std]
cnames = ["min","max","mean","std dev"]
rnames = ["Number of Products", "Shares", "Prices",
"Other Characteristics",
"Cost Shifters",
"Demand Instruments",
"Supply Instruments"]
trans = [x->length(x.s),
x->x.s,
x->x.x[1,:],
x->x.x[2:end,:],
x->x.w,
x->x.zd,
x->x.zs]
df = DataFrame([[f(vcat(t.(d)...)) for t in trans] for f in funcs])
rename!(df, cnames)
insertcols!(df, 1,Symbol(" ") => rnames)
df
end
describe(sim.dat)
end
xxxxxxxxxx
using Plots
xxxxxxxxxx
let
Plots.gr(fmt="png")
j = 1
k =1
fig=scatter(vcat( (x->x.x[1,j]).(sim.dat)...),
vcat( (x->x.s[k]).(sim.dat)...),
ylabel="Share of Product $k", xaxis=:level)
plot!(fig, xlabel="Price of Product $j")
fig
end
xxxxxxxxxx
let
j = 1
k =1
scatter(vcat( (x->x[j]).(sim.ξ)...),
vcat( (x->x.s[k]).(sim.dat)...),
xlabel="ξ[$j]",
ylabel="Share of Product $k")
end
Estimation
It is conventional to group together all product and market specific terms entering consumers' utility as
Let
Define the share as a function of
where
Let
Define the inverse of this function as
The demand-side moment condition for this model can then be written as
Using the log-linear marginal specification, we can rearrange the first order condition above to isolate the cost shock:
and the supply side moments can be written as:
To more succintly denote the moments, define:
Then the combined moments conditions can be written as
To esitmate
Nested Fixed Point
The original BLP paper estimated
Choose
arbitrarilyDefine
forContinue until
is small enoughUse the final
as
This simple repeated application of a contraction mapping is robust, but not neccessarily the most efficient way to compute delta
in BLPDemand.jl
computes
The "nested" part of nested fixed point refers to the fact that minimizing the GMM objective function also involves some sort of iterative minimization algorithm. Each iteration of the minimization algorithm, we redo all the iterations needed to compute
Automatic Differentiation
We need to compute deriviatives of many of the functions above.
Iter Function value Gradient norm 0 1.158102e+04 8.015509e+05 * time: 0.009341955184936523 1 1.924357e+02 1.126686e+05 * time: 1.9586098194122314 2 7.571640e+00 3.806780e+02 * time: 1.974524974822998 3 7.569459e+00 1.405256e+01 * time: 1.998633861541748 4 4.394585e+00 1.448938e+03 * time: 2.0837879180908203 5 4.364341e+00 3.530266e+01 * time: 2.0992259979248047 6 4.364101e+00 3.047149e+00 * time: 2.1224489212036133 7 4.363403e+00 2.152880e+02 * time: 2.1677727699279785 8 4.169330e+00 6.884843e+02 * time: 2.213343858718872 9 4.108017e+00 1.350131e+03 * time: 2.2287039756774902 10 4.038903e+00 4.962200e+02 * time: 2.2513558864593506 11 4.032905e+00 5.101109e+01 * time: 2.2665657997131348 12 4.031522e+00 3.735515e+01 * time: 2.2816929817199707 13 4.031358e+00 4.919446e+00 * time: 2.3042078018188477 14 4.031356e+00 6.030557e+00 * time: 2.3707997798919678 15 4.031171e+00 7.907360e+00 * time: 2.4144129753112793 16 3.944447e+00 8.525036e+02 * time: 2.458922863006592 17 3.911783e+00 1.384805e+03 * time: 2.489116907119751 18 3.855410e+00 2.188737e+03 * time: 2.504194974899292 19 3.597449e+00 4.505988e+03 * time: 2.5271029472351074 20 3.345880e+00 3.317219e+03 * time: 2.588615894317627 21 3.304821e+00 2.178381e+03 * time: 2.603888988494873 22 3.235112e+00 6.233731e+00 * time: 3.4163057804107666 23 3.235005e+00 8.420931e+01 * time: 3.4542877674102783 24 1.595482e+00 1.829725e+03 * time: 3.515472888946533 25 1.487061e+00 5.183353e+02 * time: 3.5388197898864746 26 1.481471e+00 5.661871e+00 * time: 3.554438829421997 27 1.481462e+00 5.655291e+00 * time: 3.5779268741607666 28 6.369042e-01 2.907135e+02 * time: 3.639993906021118 29 4.882034e-01 9.423588e+02 * time: 3.6556828022003174 30 4.722599e-01 2.181082e+02 * time: 3.6712148189544678 31 4.692708e-01 1.569599e+01 * time: 3.68691086769104 32 4.692615e-01 1.957743e+00 * time: 3.7025837898254395 33 4.690967e-01 8.172367e+01 * time: 3.795501947402954 34 4.170150e-01 4.707579e+02 * time: 3.842383861541748 35 3.874091e-01 8.745371e+02 * time: 3.858219861984253 36 3.660467e-01 1.680291e+02 * time: 3.8745369911193848 37 3.565735e-01 5.990861e+02 * time: 3.8904759883880615 38 3.393281e-01 6.071597e+02 * time: 3.914761781692505 39 3.361840e-01 5.630346e+02 * time: 3.930722951889038 40 3.315947e-01 3.883355e+01 * time: 3.9465367794036865 41 3.270270e-01 1.243660e+02 * time: 3.9702279567718506 42 3.260627e-01 7.921322e+01 * time: 3.993623971939087 43 3.259680e-01 9.265922e-01 * time: 4.009253978729248 44 3.259491e-01 6.831564e+00 * time: 4.032655954360962 45 3.257824e-01 1.187813e+01 * time: 4.071793794631958 46 3.239176e-01 5.372098e+01 * time: 4.103302001953125 47 3.233085e-01 9.303561e+01 * time: 4.134528875350952 48 3.218731e-01 1.392104e+02 * time: 4.150173902511597 49 3.202316e-01 2.240442e+02 * time: 4.221021890640259 50 3.199122e-01 9.829724e+01 * time: 4.236719846725464 51 3.189274e-01 1.641617e+02 * time: 4.259667873382568 52 3.178248e-01 2.557791e+02 * time: 4.274986982345581 53 3.153498e-01 1.790588e+02 * time: 4.298233985900879 54 3.137514e-01 7.463333e+01 * time: 4.321682929992676 55 3.132983e-01 1.441394e+02 * time: 4.337328910827637 56 3.117996e-01 1.723170e+02 * time: 4.353243827819824 57 3.100110e-01 1.656003e+02 * time: 4.376643896102905 58 3.097470e-01 2.063646e+02 * time: 4.392545938491821 59 3.087138e-01 3.113353e+01 * time: 4.408326864242554 60 3.077516e-01 5.728675e+01 * time: 4.423904895782471 61 3.074488e-01 8.128606e+01 * time: 4.439549922943115 62 3.065080e-01 1.423380e+02 * time: 4.455223798751831 63 3.055215e-01 2.248325e+02 * time: 4.470853805541992 64 3.051409e-01 9.599818e+01 * time: 4.486663818359375 65 3.042253e-01 1.544814e+02 * time: 4.509979963302612 66 3.031998e-01 2.342677e+02 * time: 4.5255959033966064 67 3.011996e-01 6.464122e+01 * time: 4.548874855041504 68 3.007170e-01 1.480817e+02 * time: 4.564445972442627 69 2.992811e-01 2.081977e+02 * time: 4.579939842224121 70 2.986292e-01 1.651863e+01 * time: 4.595477819442749 71 2.975897e-01 1.756935e+02 * time: 4.654794931411743 72 2.966141e-01 1.860799e+02 * time: 4.678025960922241 73 2.961896e-01 2.527389e+01 * time: 4.693364858627319 74 2.953896e-01 1.213568e+02 * time: 4.716164827346802 75 2.949674e-01 1.823298e+02 * time: 4.7317869663238525 76 2.942106e-01 5.112320e+01 * time: 4.755225896835327 77 2.938091e-01 3.383827e+01 * time: 4.770978927612305 78 2.933637e-01 1.121973e+02 * time: 4.78657078742981 79 2.930515e-01 5.772480e+01 * time: 4.802248001098633 80 2.927370e-01 1.379276e+02 * time: 4.825741767883301 81 2.919313e-01 1.604749e+02 * time: 4.849093914031982 82 2.909408e-01 8.290502e+01 * time: 4.872331857681274 83 2.906202e-01 2.313698e+01 * time: 4.8879358768463135 84 2.904082e-01 2.540116e+01 * time: 4.903480768203735 85 2.902697e-01 7.055657e+01 * time: 4.918900966644287 86 2.902208e-01 2.897104e+01 * time: 4.942051887512207 87 2.899351e-01 7.757287e+01 * time: 4.972864866256714 88 2.891741e-01 1.095429e+02 * time: 4.99612283706665 89 2.873303e-01 1.093396e+02 * time: 5.019243001937866 90 2.871501e-01 8.660222e+01 * time: 5.561618804931641 91 2.832469e-01 1.004631e+02 * time: 5.633150815963745 92 2.828676e-01 1.803296e+02 * time: 5.655808925628662 93 2.801536e-01 9.969537e+01 * time: 5.678155899047852 94 2.793153e-01 1.709469e+02 * time: 5.701012849807739 95 2.774047e-01 3.129373e+01 * time: 5.724222898483276 96 2.772003e-01 3.137401e+01 * time: 5.739959001541138 97 2.766189e-01 4.000743e+01 * time: 5.755527973175049 98 2.762675e-01 8.963176e+01 * time: 5.77103590965271 99 2.757565e-01 1.249678e+02 * time: 5.794271945953369 100 2.749841e-01 4.656272e+01 * time: 5.8254148960113525 101 2.747144e-01 1.365616e+01 * time: 5.856243848800659 102 2.744100e-01 5.668909e+01 * time: 5.871713876724243 103 2.738863e-01 1.261332e+02 * time: 5.8871989250183105 104 2.735526e-01 8.584698e+01 * time: 5.902673959732056 105 2.733853e-01 1.487574e+02 * time: 5.928653955459595 106 2.726635e-01 1.475121e+02 * time: 5.951898813247681 107 2.726540e-01 1.478423e+02 * time: 5.967432975769043 108 2.718231e-01 1.674944e+02 * time: 5.9983909130096436 109 2.713714e-01 5.827077e+01 * time: 6.082246780395508 110 2.704240e-01 8.869285e+01 * time: 6.097794771194458 111 2.696814e-01 5.874190e+01 * time: 6.1130828857421875 112 2.695847e-01 1.109061e+02 * time: 6.13582181930542 113 2.692614e-01 1.373914e+02 * time: 6.158984899520874 114 2.685665e-01 1.016962e+02 * time: 6.1823248863220215 115 2.674801e-01 3.186458e+01 * time: 6.205618858337402 116 2.672910e-01 3.939303e+01 * time: 6.236764907836914 117 2.671380e-01 8.641395e+01 * time: 6.2525389194488525 118 2.669469e-01 1.401641e+02 * time: 6.268186807632446 119 2.659307e-01 9.682655e+01 * time: 6.299004793167114 120 2.657933e-01 2.445027e+00 * time: 6.314568996429443 121 2.653830e-01 8.146154e+01 * time: 6.337719917297363 122 2.652376e-01 1.213177e+02 * time: 6.353096961975098 123 2.643754e-01 6.505866e+00 * time: 6.376199960708618 124 2.643416e-01 3.507493e+01 * time: 6.391617774963379 125 2.639139e-01 1.085753e+02 * time: 6.414681911468506 126 2.634703e-01 5.002405e+01 * time: 6.437814950942993 127 2.630736e-01 4.175424e+01 * time: 6.512578964233398 128 2.628705e-01 6.504037e+01 * time: 6.528037786483765 129 2.625408e-01 6.599695e+00 * time: 6.5431458950042725 130 2.624482e-01 4.485678e+01 * time: 6.573255777359009 131 2.623290e-01 6.795676e+01 * time: 6.588785886764526 132 2.621349e-01 9.947932e+01 * time: 6.60447096824646 133 2.618118e-01 5.712859e+01 * time: 6.627702951431274 134 2.615590e-01 7.188437e+01 * time: 6.6508469581604 135 2.609004e-01 1.708055e+01 * time: 6.674138784408569 136 2.608418e-01 9.544046e+01 * time: 6.6975319385528564 137 2.604568e-01 6.821765e+01 * time: 6.720704793930054 138 2.602313e-01 3.181413e+00 * time: 6.751471996307373 139 2.601784e-01 2.324914e+01 * time: 6.766927003860474 140 2.600523e-01 7.148502e+01 * time: 6.782321929931641 141 2.599336e-01 9.816165e+01 * time: 6.805563926696777 142 2.598222e-01 2.320962e+01 * time: 6.828610897064209 143 2.595957e-01 5.797722e+01 * time: 6.851655960083008 144 2.594819e-01 7.526668e+01 * time: 6.867009878158569 145 2.591757e-01 1.099213e+02 * time: 6.882444858551025 146 2.589763e-01 1.645011e+00 * time: 6.9502928256988525 147 2.586469e-01 8.395346e+01 * time: 6.965851783752441 148 2.584391e-01 1.270971e+02 * time: 6.981046915054321 149 2.582333e-01 2.457122e+01 * time: 6.996275901794434 150 2.579269e-01 6.465468e+01 * time: 7.019422769546509 151 2.577715e-01 8.510171e+01 * time: 7.035075902938843 152 2.573741e-01 9.996391e+01 * time: 7.058332920074463 153 2.571380e-01 2.648307e+01 * time: 7.073880910873413 154 2.565805e-01 4.614501e+01 * time: 7.089401960372925 155 2.564930e-01 6.083702e+01 * time: 7.105105876922607 156 2.560428e-01 1.055427e+02 * time: 7.121107816696167 157 2.557200e-01 8.363318e+00 * time: 7.1442718505859375 158 2.555465e-01 4.675574e+01 * time: 7.15979790687561 159 2.552150e-01 8.612866e+01 * time: 7.182952880859375 160 2.551461e-01 1.961896e+01 * time: 7.198385000228882 161 2.550703e-01 2.241686e+01 * time: 7.2214179039001465 162 2.550081e-01 4.096941e+01 * time: 7.252126932144165 163 2.549200e-01 5.745625e+01 * time: 7.267636775970459 164 2.547861e-01 7.265191e+01 * time: 7.290639877319336 165 2.547138e-01 3.328488e+00 * time: 7.306104898452759 166 2.545572e-01 6.223203e+01 * time: 7.365140914916992 167 2.544506e-01 6.534258e+01 * time: 7.388667821884155 168 2.543978e-01 5.660676e+00 * time: 7.403896808624268 169 2.542638e-01 5.726138e+01 * time: 7.4265899658203125 170 2.541786e-01 7.346500e+01 * time: 7.449765920639038 171 2.540909e-01 2.711530e-01 * time: 7.465380907058716 172 2.539917e-01 5.472818e+01 * time: 7.488641977310181 173 2.539074e-01 6.552397e+01 * time: 7.51191782951355 174 2.538474e-01 6.253597e+00 * time: 7.527484893798828 175 2.537567e-01 4.882992e+01 * time: 7.55114483833313 176 2.536947e-01 7.286973e+01 * time: 7.574304819107056 177 2.536031e-01 4.886872e+00 * time: 7.589815855026245 178 2.535288e-01 4.883026e+01 * time: 7.613020896911621 179 2.534580e-01 5.921381e+01 * time: 7.636051893234253 180 2.534142e-01 7.817139e+00 * time: 7.651554822921753 181 2.533358e-01 3.895045e+01 * time: 7.674715995788574 182 2.532965e-01 5.555704e+01 * time: 7.690222978591919 183 2.532070e-01 1.414783e+01 * time: 7.713343858718872 184 2.531741e-01 3.861907e+01 * time: 7.728725910186768 185 2.530980e-01 5.127703e+01 * time: 7.794784784317017 186 2.530707e-01 8.024838e+00 * time: 7.81061577796936 187 2.530057e-01 2.296540e+01 * time: 7.833395957946777 188 2.529880e-01 2.947937e+01 * time: 7.848516941070557 189 2.529383e-01 4.144680e+01 * time: 7.863749980926514 190 2.528743e-01 1.430139e+00 * time: 7.887034893035889 191 2.528648e-01 7.833023e+00 * time: 7.9027509689331055 192 2.528002e-01 3.526563e+01 * time: 7.918940782546997 193 2.527776e-01 1.263031e+01 * time: 7.934583902359009 194 2.527621e-01 3.258094e+01 * time: 7.950143814086914 195 2.527274e-01 3.607939e+01 * time: 7.973707914352417 196 2.526942e-01 3.277102e+01 * time: 7.997054815292358 197 2.526658e-01 8.506579e+00 * time: 8.035525798797607 198 2.526525e-01 2.053922e+00 * time: 8.05101990699768 199 2.526220e-01 2.454851e+01 * time: 8.066417932510376 200 2.526176e-01 1.306052e+01 * time: 8.08192777633667 201 2.526100e-01 2.133432e+01 * time: 8.105268955230713 202 2.525970e-01 2.660964e+01 * time: 8.128410816192627 203 2.525681e-01 1.419395e+01 * time: 8.15154480934143 204 2.525510e-01 6.958683e+00 * time: 8.174622774124146 205 2.525473e-01 1.229533e+01 * time: 8.234369993209839 206 2.525381e-01 7.349240e+00 * time: 8.249811887741089 207 2.525330e-01 1.134161e+01 * time: 8.272371768951416 208 2.525287e-01 7.165329e+00 * time: 8.28751277923584 209 2.525275e-01 3.964161e+00 * time: 8.303059816360474 210 2.525269e-01 1.833966e+00 * time: 8.318589925765991 211 2.525264e-01 8.726435e-01 * time: 8.33425498008728 212 2.525262e-01 2.815254e+00 * time: 8.349865913391113 213 2.525260e-01 1.866213e+00 * time: 8.38074278831482 214 2.525257e-01 2.020357e+00 * time: 8.404403924942017 215 2.525253e-01 2.527619e-01 * time: 8.435282945632935 216 2.525238e-01 1.759484e+00 * time: 8.45849084854126 217 2.525182e-01 3.484391e+00 * time: 8.481624841690063 218 2.525171e-01 2.505418e-01 * time: 8.496988773345947 219 2.525129e-01 3.349608e+00 * time: 8.512557983398438 220 2.524942e-01 1.454801e+01 * time: 8.5433349609375 221 2.524651e-01 3.527870e+00 * time: 8.558886766433716 222 2.524624e-01 4.425320e+00 * time: 8.574318885803223 223 2.524616e-01 4.332724e+00 * time: 8.597463846206665 224 2.524607e-01 1.594704e+01 * time: 8.6648588180542 225 2.524555e-01 2.584182e+00 * time: 8.68783688545227 226 2.524503e-01 3.406157e+00 * time: 8.711942911148071 227 2.524496e-01 4.542937e+00 * time: 8.727239847183228 228 2.524469e-01 7.607586e+00 * time: 8.742854833602905 229 2.524437e-01 1.230285e+01 * time: 8.758599996566772 230 2.524366e-01 1.306009e+01 * time: 8.781839847564697 231 2.524324e-01 8.123500e+00 * time: 8.797380924224854 232 2.524061e-01 4.126091e+00 * time: 8.820743799209595 233 2.523856e-01 1.850825e+01 * time: 8.851924896240234 234 2.523527e-01 2.140838e+01 * time: 8.882749795913696 235 2.522392e-01 3.420429e+01 * time: 8.898308992385864 236 2.521573e-01 4.593372e+01 * time: 8.913831949234009 237 2.520087e-01 6.422411e+00 * time: 8.944560766220093 238 2.519650e-01 3.861112e+01 * time: 8.9753999710083 239 2.517994e-01 7.376328e+01 * time: 8.998568773269653 240 2.515322e-01 5.302435e+00 * time: 9.021621942520142 241 2.513456e-01 6.196495e+01 * time: 9.037197828292847 242 2.510036e-01 5.381627e+01 * time: 9.104031801223755 243 2.506111e-01 1.177536e+02 * time: 9.119385004043579 244 2.502757e-01 1.337410e+01 * time: 9.14196491241455 245 2.502440e-01 1.638485e+01 * time: 9.157287836074829 246 2.502344e-01 1.799992e+00 * time: 9.172859907150269 247 2.502319e-01 9.173540e+00 * time: 9.196141958236694 248 2.502276e-01 1.419444e+01 * time: 9.219385862350464 249 2.502211e-01 7.141728e+00 * time: 9.24256682395935 250 2.502169e-01 1.463395e+01 * time: 9.266063928604126 251 2.502117e-01 9.830643e-01 * time: 9.281617879867554 252 2.502081e-01 1.087000e+01 * time: 9.298495769500732 253 2.502042e-01 1.121336e+01 * time: 9.321640968322754 254 2.502041e-01 1.205783e+01 * time: 9.344727993011475 255 2.502017e-01 1.217670e-01 * time: 9.360190868377686 256 2.501985e-01 7.672462e+00 * time: 9.3833909034729 257 2.501967e-01 7.559002e+00 * time: 9.406499862670898 258 2.501966e-01 7.072219e+00 * time: 9.421987771987915 259 2.501957e-01 9.319400e-01 * time: 9.437367916107178 260 2.501943e-01 3.334921e+00 * time: 9.452796936035156 261 2.501938e-01 5.334688e+00 * time: 9.51064395904541 262 2.501932e-01 2.740513e-01 * time: 9.534624814987183 263 2.501928e-01 3.099231e+00 * time: 9.557366847991943 264 2.501926e-01 7.963243e-01 * time: 9.5726318359375 265 2.501925e-01 1.308775e+00 * time: 9.595669984817505 266 2.501925e-01 5.048317e-02 * time: 9.619057893753052 267 2.501924e-01 6.794882e-02 * time: 9.642277956008911 268 2.501924e-01 7.474938e-01 * time: 9.665480852127075 269 2.501924e-01 1.442685e-01 * time: 9.688922882080078 270 2.501924e-01 3.981050e-01 * time: 9.720008850097656 271 2.501922e-01 1.463974e+00 * time: 9.750826835632324 272 2.501921e-01 5.028560e-02 * time: 9.77402377128601 273 2.501919e-01 2.087718e+00 * time: 9.804776906967163 274 2.501894e-01 1.674360e+00 * time: 9.83558988571167 275 2.501829e-01 9.066367e+00 * time: 9.851081848144531 276 2.501674e-01 1.101074e+01 * time: 9.866505861282349 277 2.501642e-01 1.411714e+00 * time: 9.881941795349121 278 2.501636e-01 7.196715e+00 * time: 9.955275774002075 279 2.501610e-01 8.254154e-01 * time: 9.979021787643433 280 2.501608e-01 2.190481e+00 * time: 9.994337797164917 281 2.501603e-01 4.962324e+00 * time: 10.009703874588013 282 2.501598e-01 5.182638e-01 * time: 10.032745838165283 283 2.501595e-01 2.884059e+00 * time: 10.056116819381714 284 2.501594e-01 1.067690e+00 * time: 10.071696996688843 285 2.501594e-01 1.468252e+00 * time: 10.094895839691162 286 2.501592e-01 9.911741e-01 * time: 10.118231773376465 287 2.501591e-01 9.684999e-01 * time: 10.141735792160034 288 2.501590e-01 9.798744e-01 * time: 10.157241821289062 289 2.501590e-01 2.494077e-02 * time: 10.172800779342651 290 2.501590e-01 7.844264e-02 * time: 10.195939779281616 291 2.501590e-01 5.567220e-02 * time: 10.21941590309143 292 2.501590e-01 1.027418e-02 * time: 10.25025486946106 293 2.501590e-01 2.178961e-02 * time: 10.273340940475464 294 2.501590e-01 1.242358e-01 * time: 10.304064989089966 295 2.501585e-01 3.346181e+00 * time: 10.39514684677124 296 2.501416e-01 2.509670e+00 * time: 10.425709962844849 297 2.484456e-01 4.580117e+02 * time: 10.48698091506958 298 2.483429e-01 4.915112e+02 * time: 10.526407957077026 299 2.474250e-01 2.176344e+02 * time: 10.541956901550293 300 2.437584e-01 1.470661e+02 * time: 10.56555700302124 301 2.426810e-01 1.988756e+02 * time: 10.596614837646484 302 2.416667e-01 1.075403e+02 * time: 10.612271785736084 303 2.413484e-01 1.267112e+01 * time: 10.627819776535034 304 2.413441e-01 3.633878e+00 * time: 10.650941848754883 305 2.413380e-01 4.585203e+00 * time: 10.674152851104736 306 2.413365e-01 6.447549e-01 * time: 10.689729928970337 307 2.413365e-01 1.932337e-01 * time: 10.712978839874268 308 2.413364e-01 2.893140e-01 * time: 10.736071825027466 309 2.413364e-01 2.362366e-02 * time: 10.759217977523804 310 2.413364e-01 1.723668e-01 * time: 10.825915813446045 311 2.413364e-01 4.426027e-01 * time: 10.86402678489685 312 2.413364e-01 4.186628e-01 * time: 10.886993885040283 313 2.413364e-01 3.620181e-02 * time: 10.902659893035889 314 2.413364e-01 5.273786e-02 * time: 10.926074981689453 315 2.413364e-01 1.803126e-03 * time: 10.94936990737915 316 2.413364e-01 4.714602e-04 * time: 10.972757816314697 317 2.413364e-01 9.599359e-05 * time: 10.996540784835815 318 2.413364e-01 8.719291e-05 * time: 11.019848823547363 319 2.413364e-01 2.689496e-04 * time: 11.050747871398926 320 2.413364e-01 3.159250e-04 * time: 11.073993921279907 321 2.413364e-01 4.748693e-05 * time: 11.089479923248291 322 2.413364e-01 1.084864e-03 * time: 11.112883806228638 323 2.413364e-01 1.286809e-05 * time: 11.128447771072388 324 2.413364e-01 2.470713e-05 * time: 11.151625871658325 325 2.413364e-01 1.910783e-05 * time: 11.167285919189453 326 2.413364e-01 7.352720e-06 * time: 11.182723999023438 327 2.413364e-01 4.334510e-05 * time: 11.249237775802612 328 2.413364e-01 4.994040e-05 * time: 11.272461891174316 329 2.413364e-01 7.901246e-06 * time: 11.295106887817383 330 2.413364e-01 2.450247e-05 * time: 11.31037187576294 331 2.413364e-01 2.791747e-05 * time: 11.326072931289673 332 2.413364e-01 1.994570e-05 * time: 11.364902973175049 333 2.413364e-01 7.422739e-05 * time: 11.388206958770752 334 2.413364e-01 2.016650e-05 * time: 11.403850793838501 335 2.413364e-01 3.898515e-05 * time: 11.465949773788452 336 2.413364e-01 5.813111e-05 * time: 11.496924877166748 337 2.413364e-01 5.737829e-05 * time: 11.512472867965698 338 2.413364e-01 2.258345e-05 * time: 11.527966976165771 339 2.413364e-01 6.517463e-05 * time: 11.558870792388916 340 2.413364e-01 1.174185e-05 * time: 11.582137823104858 341 2.413364e-01 8.400931e-06 * time: 11.60533094406128 342 2.413364e-01 7.217852e-06 * time: 11.62084698677063 343 2.413364e-01 1.826584e-05 * time: 12.1454598903656 344 2.413364e-01 1.444287e-05 * time: 12.168283939361572 345 2.413364e-01 1.275383e-05 * time: 12.183957815170288 346 2.413364e-01 1.463366e-03 * time: 12.67297077178955 347 2.413364e-01 6.977897e-04 * time: 12.696410894393921 348 2.413364e-01 2.884721e-05 * time: 12.720035791397095 349 2.413364e-01 5.512581e-04 * time: 12.758677959442139 350 2.413364e-01 8.555417e-07 * time: 12.781937837600708 351 2.413364e-01 7.524316e-05 * time: 12.828342914581299 352 2.413364e-01 5.337661e-05 * time: 12.843871831893921 353 2.413364e-01 2.534011e-05 * time: 12.905558824539185 354 2.413364e-01 4.205067e-06 * time: 12.97214388847351 355 2.413364e-01 3.500206e-07 * time: 12.987884998321533
xxxxxxxxxx
begin
using Optim, LineSearches
PlutoUI.with_terminal() do
nfxp = estimateBLP(sim.dat, method=:NFXP, verbose=true,
optimizer = LBFGS(linesearch=LineSearches.HagerZhang()))
end
end
MPEC
MPEC is an alternative approach to computing estimates promoted by Judd and Su and applied to this model by Dube, Fox, and Su (2012). MPEC stands for "Mathematical Programming with Equilibrium Constraints." It is based on the observation that the estimation problem can be expressed as a constrained minimization problem
Note that this problem no longer requires compute
This is Ipopt version 3.13.2, running with linear solver mumps. NOTE: Other linear solvers might be more efficient (see Ipopt documentation). Number of nonzeros in equality constraint Jacobian...: 155509 Number of nonzeros in inequality constraint Jacobian.: 0 Number of nonzeros in Lagrangian Hessian.............: 59009 Total number of variables............................: 17516 variables with only lower bounds: 5003 variables with lower and upper bounds: 0 variables with only upper bounds: 0 Total number of equality constraints.................: 17509 Total number of inequality constraints...............: 0 inequality constraints with only lower bounds: 0 inequality constraints with lower and upper bounds: 0 inequality constraints with only upper bounds: 0 iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls 0 0.0000000e+00 5.38e+00 2.59e-03 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0 1 2.4902150e+01 9.87e+00 1.94e+02 -1.0 3.70e+00 0.0 5.96e-01 1.00e+00h 1 2 7.0778252e+00 3.72e+00 2.65e+02 -1.0 2.65e+00 - 8.01e-01 1.00e+00f 1 3 5.7238522e+00 1.80e+00 8.38e+01 -1.0 2.45e+00 - 1.00e+00 6.89e-01h 1 4 4.9730437e+00 1.65e+00 8.03e+01 -1.0 4.78e+00 - 1.00e+00 8.36e-02h 1 5 4.4563632e+00 2.71e-01 3.80e+01 -1.0 1.01e+00 - 1.00e+00 1.00e+00f 1 6 4.1119628e+00 4.64e-02 8.11e+01 -1.0 3.97e-01 - 4.59e-01 1.00e+00h 1 7 4.0797294e+00 2.28e-03 5.14e-02 -1.0 1.03e-01 -0.5 1.00e+00 1.00e+00h 1 8 4.0300757e+00 7.91e-04 6.33e-01 -2.5 5.11e-02 -1.0 8.51e-01 1.00e+00h 1 9 3.3007868e+00 2.49e-01 2.86e-01 -2.5 8.45e-01 - 7.22e-01 1.00e+00f 1 iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls 10 2.0409823e+00 8.57e-01 7.93e-01 -2.5 2.12e+01 - 9.03e-02 8.05e-02f 1 11 1.3077361e+00 8.14e-01 2.40e+00 -2.5 5.54e+00 - 6.76e-01 3.03e-01h 1 12 2.7037103e-01 4.10e+00 7.95e-01 -2.5 6.87e+00 - 7.13e-01 8.33e-01h 1 13 1.0600200e+00 4.68e+00 5.89e+01 -2.5 1.33e+01 - 8.28e-02 1.00e+00h 1 14 7.7575740e-01 2.59e-01 1.47e+00 -2.5 7.21e-01 -1.4 5.19e-01 1.00e+00h 1 15 6.9478453e-01 2.72e-02 6.32e-02 -2.5 9.22e-01 -1.9 1.00e+00 1.00e+00h 1 16 5.2893994e-01 1.23e-01 2.86e-02 -2.5 2.44e+00 -2.4 1.00e+00 1.00e+00h 1 17 3.3163234e-01 3.80e-01 8.92e-02 -2.5 4.07e+00 -2.9 1.00e+00 1.00e+00h 1 18 2.7053490e-01 3.12e-01 1.44e-01 -2.5 3.07e+00 -3.3 4.63e-01 1.00e+00h 1 19 2.5994722e-01 5.40e-02 1.27e-02 -2.5 1.80e+00 -2.9 1.00e+00 1.00e+00h 1 iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls 20 2.3970933e-01 4.86e-01 1.44e-01 -2.5 8.91e+00 -3.4 6.86e-01 1.00e+00H 1 21 2.3101273e-01 5.22e-02 1.70e-01 -2.5 1.29e+02 -3.9 1.93e-01 4.11e-02h 3 22 2.1548498e-01 8.06e-01 5.38e-01 -2.5 2.21e+01 -3.4 1.00e+00 1.00e+00H 1 23 2.8727140e-01 6.87e-01 7.96e-01 -2.5 9.06e+01 -3.9 1.88e-01 1.13e-01h 1 24 1.3111627e-01 1.98e+01 4.67e+00 -2.5 4.99e+01 - 1.00e+00 9.95e-01h 1 25 3.8830274e-01 1.38e+01 3.16e+01 -2.5 5.07e+01 - 6.15e-02 3.22e-01h 2 26 6.5921831e-01 1.06e+01 1.22e+02 -2.5 4.72e+01 -4.4 1.53e-01 1.00e+00H 1 27 1.3625812e+00 3.47e+00 8.93e+01 -2.5 1.35e+01 - 5.42e-01 1.00e+00h 1 28 1.6239477e+00 1.66e-01 7.13e+00 -2.5 1.56e+00 -1.3 1.00e+00 1.00e+00h 1 29 1.5611908e+00 2.64e-02 2.90e+00 -2.5 2.16e+00 -1.7 1.00e+00 1.00e+00h 1 iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls 30 1.0878528e+00 1.78e+00 2.26e+01 -2.5 2.64e+01 - 1.00e+00 5.00e-01f 2 31 5.9471167e-01 5.47e+00 8.52e+00 -2.5 4.95e+01 - 1.00e+00 4.93e-01h 1 32 3.9199789e-01 1.99e+00 4.89e+00 -2.5 2.44e+01 - 1.00e+00 1.00e+00h 1 33 1.9504844e-01 4.58e+00 3.63e+00 -2.5 6.01e+01 - 8.57e-01 4.76e-01h 1 34 9.9082472e-02 6.70e+00 3.99e+00 -2.5 4.70e+01 - 1.00e+00 1.00e+00h 1 35 1.1646569e-01 4.58e-02 1.27e+01 -2.5 2.43e+00 - 8.25e-02 1.00e+00h 1 36 1.1728633e-01 5.55e-01 2.58e-01 -2.5 1.48e+01 - 1.00e+00 1.00e+00h 1 37 1.3111244e-01 1.85e-01 1.29e-01 -2.5 7.65e+00 - 1.00e+00 1.00e+00h 1 38 1.3322783e-01 7.96e-04 1.03e-03 -2.5 3.36e-01 - 1.00e+00 1.00e+00h 1 39 6.3105600e-02 8.04e-01 1.22e+00 -3.8 8.68e+00 - 8.45e-01 1.00e+00h 1 iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls 40 5.8024469e-02 3.67e-01 2.18e-01 -3.8 1.08e+01 - 1.00e+00 1.00e+00h 1 41 5.8878589e-02 6.15e-03 7.51e-03 -3.8 1.00e+00 - 1.00e+00 1.00e+00h 1 42 5.8895170e-02 3.77e-07 4.33e-07 -3.8 1.68e-02 - 1.00e+00 1.00e+00h 1 43 5.7983183e-02 2.97e-02 3.38e-02 -5.7 3.00e+00 - 9.77e-01 1.00e+00h 1 44 5.8172630e-02 6.32e-04 1.01e-04 -5.7 4.02e-01 - 1.00e+00 1.00e+00h 1 45 5.8173082e-02 1.17e-08 4.42e-09 -5.7 1.22e-03 - 1.00e+00 1.00e+00h 1 46 5.8172911e-02 7.84e-06 6.78e-06 -8.6 4.80e-02 - 1.00e+00 1.00e+00h 1 47 5.8172953e-02 2.90e-11 4.83e-12 -8.6 8.44e-05 - 1.00e+00 1.00e+00h 1 Number of Iterations....: 47 (scaled) (unscaled) Objective...............: 5.8172953363477609e-02 5.8172953363477609e-02 Dual infeasibility......: 4.8316906031686813e-12 4.8316906031686813e-12 Constraint violation....: 2.8961721909581684e-11 2.8961721909581684e-11 Complementarity.........: 2.5059049512274208e-09 2.5059049512274208e-09 Overall NLP error.......: 2.5059049512274208e-09 2.5059049512274208e-09 Number of objective function evaluations = 62 Number of objective gradient evaluations = 48 Number of equality constraint evaluations = 62 Number of inequality constraint evaluations = 0 Number of equality constraint Jacobian evaluations = 48 Number of inequality constraint Jacobian evaluations = 0 Number of Lagrangian Hessian evaluations = 47 Total CPU secs in IPOPT (w/o function evaluations) = 20.889 Total CPU secs in NLP function evaluations = 4.698 EXIT: Optimal Solution Found.
x
PlutoUI.with_terminal() do
mpec = estimateBLP(sim.dat, method=:MPEC, verbose=true)
end