STO1 Competitive storage model
This model is a standard competitive storage model with supply reaction. Its setting is close to Wright and Williams (1982).
Contents
Model's structure
Response variables Storage (
), Planned production (
) and Price (
).
State variable Availability (
).
Shock Productivity shocks (
).
Parameters Unit physical storage cost (
), Depreciation share (
), Interest rate (
), Scale parameter for the production cost function (
), Inverse of supply elasticity (
) and Demand price elasticity (
).
Equilibrium equations



Transition equation

Writing the model
The model is defined in a Yaml file: sto1.yaml.
Create the model object
Mu = 1; sigma = 0.05;
model = recsmodel('sto1.yaml',struct('Mu',Mu,'Sigma',sigma^2,'order',7));
Deterministic steady state (equal to first guess)
State variables:
A
_
1
Response variables:
S H P
_ _ _
0 1 1
Expectations variables:
EP EPe
__ ___
1 1
Define approximation space
[interp,s] = recsinterpinit(40,model.sss*0.7,model.sss*1.5);
Find a first guess through the perfect foresight solution
interp = recsFirstGuess(interp,model,s,model.sss,model.xss,struct('T',5));
Solve for rational expectations
interp = recsSolveREE(interp,model);
Successive approximation
Major Minor Lipschitz Residual
0 0 7.18E-02 (Input point)
1 1 0.7774 4.27E-02
2 1 0.6246 2.88E-02
3 1 0.5941 1.22E-02
4 1 0.6840 3.88E-03
5 1 0.7230 1.08E-03
6 1 0.7359 2.84E-04
7 1 0.7394 7.41E-05
8 1 0.7408 1.92E-05
9 1 0.7412 4.97E-06
10 1 0.7412 1.29E-06
11 1 0.7412 3.33E-07
12 1 0.7432 8.58E-08
13 1 0.8677 1.86E-08
14 1 1.0000 0.00E+00
Solution found - Residual lower than absolute tolerance
Plot the decision rules
recsDecisionRules(model,interp,[],[],[],struct('simulmethod','solve')); subplot(2,2,1) xlabel('Availability') ylabel('Storage') subplot(2,2,2) xlabel('Availability') ylabel('Planned production') subplot(2,2,3) xlabel('Availability') ylabel('Price')
Simulate the model
[ssim,~,~,stat] = recsSimul(model,interp,model.sss(ones(1000,1),:),200); subplot(2,2,1) xlabel('Availability') ylabel('Frequency') subplot(2,2,2) xlabel('Storage') ylabel('Frequency') subplot(2,2,3) xlabel('Planned production') ylabel('Frequency') subplot(2,2,4) xlabel('Price') ylabel('Frequency')
Statistics from simulated variables (excluding the first 20 observations):
Moments
Mean StdDev Skewness Kurtosis Min Max pLB pUB
________ _________ ________ ________ _______ _______ ______ ___
A 1.0162 0.051825 0.019719 2.9954 0.79312 1.2528 NaN NaN
S 0.015508 0.021954 1.6549 5.5816 0 0.17869 23.972 0
H 1.001 0.0080711 -1.4145 4.3785 0.9553 1.0072 0 0
P 1.0164 0.20256 1.8699 7.7434 0.69929 3.1864 0 0
Correlation
A S H P
________ ________ ________ _______
A 1 0.86642 -0.87774 -0.9043
S 0.86642 1 -0.99794 -0.578
H -0.87774 -0.99794 1 0.59579
P -0.9043 -0.578 0.59579 1
Autocorrelation
T1 T2 T3 T4 T5
_______ ________ _________ __________ __________
A 0.21258 0.041476 0.005918 -0.0079829 -0.0089553
S 0.24111 0.051096 0.0054768 -0.0092697 -0.010646
H 0.23996 0.050647 0.0056397 -0.0090575 -0.010316
P 0.11904 0.016731 0.002795 -0.0061893 -0.0071728
Assess solution accuracy
recsAccuracy(model,interp,ssim);
Accuracy of the solution
Equilibrium equation error (in log10 units)
Max Mean
-2.2986 -3.1471
-2.7699 -3.7235
-3.3881 -4.3433