STO4 Competitive storage with price-band backed by public storage

This model is an extension of Miranda and Helmberger (1988) to include a capacity constraint on the public stock level (see also Gouel 2013).

Model's structure

Response variables Speculative storage ($S^{\mathrm{S}}$), Increase in public stock level ($\Delta S^{\mathrm{G}+}$), Decrease in public stock level ($\Delta S^{\mathrm{G}-}$), Planned production ($H$) and Price ($P$).

State variable Availability ($A$) and Public stock ($S^{\mathrm{G}}$).

Shock Productivity shocks ($\epsilon$).

Parameters Unit physical storage cost ($k$), Interest rate ($r$), Scale parameter for the production cost function ($h$), Inverse of supply elasticity ($\mu$), Demand price elasticity ($\alpha$), Floor price ($P^{\mathrm{F}}$), Ceiling price ($P^{\mathrm{c}}$) and Capacity constraint on public stock ($\bar{S}^{\mathrm{G}}$).

Equilibrium equations

$$S^{\mathrm{S}}_{t}: S^{\mathrm{S}}_{t}\ge 0 \quad \perp \quad P_{t}+k-\frac{\mathrm{E}_{t}\left(P_{t+1}\right)}{1+r}\ge 0,$$

$$H_{t}: \frac{1}{1+r}\mathrm{E}_{t}\left(P_{t+1}\epsilon_{t+1}\right)=h {H_{t}}^{\mu},$$

$$P_{t}: A_{t}+\Delta S^{\mathrm{G}-}_{t}={P_{t}}^{\alpha}+S^{\mathrm{S}}_{t}+\Delta S^{\mathrm{G}+}_{t},$$

$$\Delta S^{\mathrm{G}+}_{t}:0\le\Delta S^{\mathrm{G}+}_{t}\le\bar{S}^{\mathrm{G}}-S^{\mathrm{G}}_{t-1} \quad \perp \quad P_{t}-P^{\mathrm{F}},$$

$$\Delta S^{\mathrm{G}-}_{t}:0\le\Delta S^{\mathrm{G}-}_{t}\le S^{\mathrm{G}}_{t-1} \quad \perp \quad P^{\mathrm{c}}-P_{t}.$$

Transition equation

$$A_{t}: A_{t}=S^{\mathrm{S}}_{t-1}+H_{t-1}\epsilon_{t},$$

$$S^{\mathrm{G}}_{t}: S^{\mathrm{G}}_{t}= S^{\mathrm{G}}_{t-1}+\Delta S^{\mathrm{G}+}_{t-1}-\Delta S^{\mathrm{G}-}_{t-1}.$$

Writing the model

The model is defined in a Yaml file: sto4.yaml.

Create the model object

Mu                = 1;
sigma             = 0.05;
model = recsmodel('sto4.yaml',struct('Mu',Mu,'Sigma',sigma^2,'order',7));
Deterministic steady state (equal to first guess)
 State variables:
    A    Sg 
    _    ___

    1    0.4

 Response variables:
    S    H    P    DSgp    DSgm
    _    _    _    ____    ____

    0    1    1    0       0   

 Expectations variables:
    EP    EPe
    __    ___

    1     1  

Sgbar = model.params(end-1);

Multiple steady states

In this model, there is no stock depreciation. This assumption implies that there are multiple steady states: as long as the steady-state price is between the floor and ceiling prices, any public stock level between 0 and $\bar{S}^{\mathrm{G}}$ is a steady state. Actually, the steady-state response variables are unique, only the public stock level is indeterminate as we can see in the examples below:

[sss1,xss1] = recsSS(model,[1 0],model.xss);
Deterministic steady state (equal to first guess)
 State variables:
    A    Sg
    _    __

    1    0 

 Response variables:
    S    H    P    DSgp    DSgm
    _    _    _    ____    ____

    0    1    1    0       0   

 Expectations variables:
    EP    EPe
    __    ___

    1     1  

[sss2,xss2] = recsSS(model,[1 0.2],model.xss);
Deterministic steady state (equal to first guess)
 State variables:
    A    Sg 
    _    ___

    1    0.2

 Response variables:
    S    H    P    DSgp    DSgm
    _    _    _    ____    ____

    0    1    1    0       0   

 Expectations variables:
    EP    EPe
    __    ___

    1     1  

Define approximation space

[interp,s] = recsinterpinit(20,[0.74 0],[1.4 Sgbar]);

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,x] = recsSolveREE(interp,model,s);
Successive approximation
  Major	 Minor	Lipschitz	 Residual
      0	     0	         	 1.50E-01 (Input point)
      1	     1	  0.8672	 6.27E-02
      2	     1	  0.6394	 2.84E-02
      3	     1	  0.6901	 8.93E-03
      4	     1	  0.7305	 2.41E-03
      5	     1	  0.7453	 6.14E-04
      6	     1	  0.7509	 1.53E-04
      7	     1	  0.7528	 3.78E-05
      8	     1	  0.7535	 9.32E-06
      9	     1	  0.7537	 2.30E-06
     10	     1	  0.7540	 5.67E-07
     11	     1	  0.7598	 1.40E-07
     12	     1	  0.9398	 3.24E-08
     13	     1	  1.0000	 0.00E+00
Solution found - Residual lower than absolute tolerance

Simulate the model

options.stat = 1;
recsSimul(model,interp,repmat([1 0],1E3,1),200,[],options);
subplot(3,3,1)
xlabel('Availability')
ylabel('Frequency')
subplot(3,3,2)
xlabel('Public stock')
ylabel('Frequency')
subplot(3,3,3)
xlabel('Speculative storage')
ylabel('Frequency')
subplot(3,3,4)
xlabel('Planned production')
ylabel('Frequency')
subplot(3,3,5)
xlabel('Price')
ylabel('Frequency')
subplot(3,3,6)
xlabel('Increase in public stock level')
ylabel('Frequency')
subplot(3,3,7)
xlabel('Decrease in public stock level')
ylabel('Frequency')
Statistics from simulated variables (excluding the first 20 observations):
 Moments
              Mean        StdDev      Skewness     Kurtosis      Min        Max       pLB       pUB  
            _________    _________    _________    ________    _______    _______    ______    ______

    A           1.004     0.050486    0.0050016    2.9912      0.78697     1.2316       NaN       NaN
    Sg        0.13528       0.1159      0.67697    2.4411            0        0.4       NaN       NaN
    S       0.0040365    0.0075183       3.7378    27.244            0     0.1444    35.415         0
    H         0.99999    0.0039457      0.54691    6.3107      0.96172     1.0097         0         0
    P           1.007      0.12142       2.1476    13.615      0.74116     2.8374         0         0
    DSgp    0.0092738     0.019729       2.8634    12.165            0    0.20619    38.557    1.0844
    DSgm    0.0089268     0.018965       2.7876    11.426            0    0.19424    26.427    9.2961

 Correlation
                A           Sg           S           H           P          DSgp         DSgm  
            _________    _________    ________    ________    ________    _________    ________

    A               1    -0.052898     0.57932    -0.52389    -0.81646      0.71504    -0.69501
    Sg      -0.052898            1    -0.10746    -0.51905    -0.09671    -0.048125     0.15038
    S         0.57932     -0.10746           1    -0.47524    -0.47195      0.28753    -0.24819
    H        -0.52389     -0.51905    -0.47524           1     0.58195     -0.36285      0.1295
    P        -0.81646     -0.09671    -0.47195     0.58195           1     -0.40827     0.42106
    DSgp      0.71504    -0.048125     0.28753    -0.36285    -0.40827            1    -0.21875
    DSgm     -0.69501      0.15038    -0.24819      0.1295     0.42106     -0.21875           1

 Autocorrelation
               T1           T2            T3           T4            T5    
            ________    __________    __________    _________    __________

    A       0.041787      -0.02014     -0.015863     -0.02007     -0.016676
    Sg       0.93562       0.87078       0.81071      0.75463        0.7032
    S        0.16836      0.067865      0.049235     0.035641      0.030582
    H        0.49457       0.37386       0.31506      0.26788       0.23226
    P       0.079151      0.018209      0.015877      0.01248     0.0091157
    DSgp     0.02324    -0.0068244    -0.0071192    -0.013707     -0.010108
    DSgm    0.015919    -0.0061996    -0.0038683    -0.010361    -0.0059664

References

Gouel, C. (2013). Rules versus discretion in food storage policies. American Journal of Agricultural Economics, 95(4), 1029-1044.

Miranda, M. J. and Helmberger, P. G. (1988). The effects of commodity price stabilization programs. The American Economic Review, 78(1), 46-58.