<p>I have estimated a number of key parameters in a model by the Simulated Method of Moments. So far, I have computed asymptotic standard errors (that rely on computing numerical derivatives, where we move individual parameters by just a bit and calculate the new vector of moments). According to Ruge-Murcia (2012), asymptotic standard errors are conservative and tend to overstate true standard errors. I am therefore interested in computing the precision of my estimates by bootstrapping (computing time is no issue in my case).</p>
<p>There is not much information out there how to perform bootstraps for SMM though. Any thoughts?</p>
<p>Here is a toy example:</p>
<p>Parameters to estimate:</p>
<ul>
<li>standard deviation of a time series shock <span class="math-container">$\epsilon = [\epsilon_1, \epsilon_2, ... , \epsilon_T]$</span>, <span class="math-container">$\sigma_{\epsilon}$</span></li>
<li>some elasticity <span class="math-container">$\omega$</span></li>
</ul>
<p>To make sure that I use the same shock in all iterations of the SMM, I draw the shock series <span class="math-container">$\epsilon$</span> from a N(0,1) once, and use this vector in all iterations in my SMM.</p>
<p><strong>The objective function includes the following computations:</strong></p>
<p>vof = objective(<span class="math-container">$\omega, \sigma_{\epsilon}$</span>)</p>
<ol>
<li><span class="math-container">$A = fn(\omega$</span>) (has no closed form solution, I have to solve for
it. A is a <span class="math-container">$2 \times 2$</span> matrix)</li>
<li><span class="math-container">$\epsilon_t = \sigma_{\epsilon}*\epsilon_t$</span> (here I rescale the N(0,1)
shock by the candidate for the shock variance)</li>
<li><span class="math-container">$y_t = A y_{t-1} +
\epsilon_t$</span> (GDP is a vector AR(1) process, <span class="math-container">$y_t$</span> is a vector with 2 growth series)</li>
<li>gmom = cov(<span class="math-container">$y_t$</span>) (the moments to match are the variances and covariances of <span class="math-container">$y_t$</span>)</li>
<li>vof = (gmom - momm) * W * (gmom - momm)' (computes the deviations of the model implied moments vs the moments in the data, gives the value of the objective)</li>
</ol>
<p>My intuition tells me that I should</p>
<ul>
<li>estimate the SMM once and save <span class="math-container">$\hat{\omega}$</span> and <span class="math-container">$\hat{\sigma_{\epsilon}}$</span></li>
<li>Now I shuffle <span class="math-container">$\epsilon_t$</span> and rerun the SMM procedure</li>
<li>I do this a lot of times, saving each time the new estimates of <span class="math-container">${\omega}$</span> and <span class="math-container">$\sigma_{\epsilon}$</span> and compute standard deviations over the parameter estimates.</li>
</ul>
<p>Is this it?</p>
<p>Extra question:</p>
<ul>
<li>What are the extra steps if <span class="math-container">$\epsilon_t$</span> is serially correlated; i.e. <span class="math-container">$\epsilon_t = \beta * \epsilon_{t-1} + \mu_t$</span>?</li>
</ul>

CC BY-SA 4.0
2021-09-12T17:04:33.907Z
I'm no expert in MSM, but my guess would be that you should use bootstraps of the data to get variation in the moments of the data (momm).
tdm
CC BY-SA 4.0
2021-09-13T00:38:24.310Z
I see an issue with points 1 and 3. If A is "a $1 \times 2$ vector" 3. does not make sense. In order for $Ay_{t-1}$ to exist $y_{t-1}$ must be a vector of two. Otherwise they dont multiply. On the other hand if they multiply the result ($y_t$) is a real number and not a vector
Grada Gukovic
CC BY-SA 4.0
2021-09-15T14:13:34.553Z
That's of course correct, I edited the question. After all, it is a toy example...
EconRider
<dsge><structural-estimation>
Bootstrapping standard errors in SMM estimation
EconRider
# Bootstrapping standard errors in SMM estimation

(Asked by: username_0 on 2021-09-08)

I have estimated a number of key parameters in a model by the Simulated Method of Moments. So far, I have computed asymptotic standard errors (that rely on computing numerical derivatives, where we move individual parameters by just a bit and calculate the new vector of moments). According to Ruge-Murcia (2012), asymptotic standard errors are conservative and tend to overstate true standard errors. I am therefore interested in computing the precision of my estimates by bootstrapping (computing time is no issue in my case).

There is not much information out there how to perform bootstraps for SMM though. Any thoughts?

Here is a toy example:

Parameters to estimate:

* standard deviation of a time series shock $\epsilon = [\epsilon\_1, \epsilon\_2, ... , \epsilon\_T]$, $\sigma\_{\epsilon}$
* some elasticity $\omega$

To make sure that I use the same shock in all iterations of the SMM, I draw the shock series $\epsilon$ from a N(0,1) once, and use this vector in all iterations in my SMM.

**The objective function includes the following computations:**

vof = objective($\omega, \sigma\_{\epsilon}$)

1. $A = fn(\omega$) (has no closed form solution, I have to solve for
   it. A is a $2 \times 2$ matrix)
2. $\epsilon\_t = \sigma\_{\epsilon}\*\epsilon\_t$ (here I rescale the N(0,1)
   shock by the candidate for the shock variance)
3. $y\_t = A y\_{t-1} +
   \epsilon\_t$ (GDP is a vector AR(1) process, $y\_t$ is a vector with 2 growth series)
4. gmom = cov($y\_t$) (the moments to match are the variances and covariances of $y\_t$)
5. vof = (gmom - momm) \* W \* (gmom - momm)' (computes the deviations of the model implied moments vs the moments in the data, gives the value of the objective)

My intuition tells me that I should

* estimate the SMM once and save $\hat{\omega}$ and $\hat{\sigma\_{\epsilon}}$
* Now I shuffle $\epsilon\_t$ and rerun the SMM procedure
* I do this a lot of times, saving each time the new estimates of ${\omega}$ and $\sigma\_{\epsilon}$ and compute standard deviations over the parameter estimates.

Is this it?

Extra question:

* What are the extra steps if $\epsilon\_t$ is serially correlated; i.e. $\epsilon\_t = \beta \* \epsilon\_{t-1} + \mu\_t$?

**Tags:** dsge, structural-estimation
> **Comments:**
> **username_1**: I'm no expert in MSM, but my guess would be that you should use bootstraps of the data to get variation in the moments of the data (momm).  
> **username_2**: I see an issue with points 1 and 3. If A is "a $1 \times 2$ vector" 3. does not make sense. In order for $Ay_{t-1}$ to exist $y_{t-1}$ must be a vector of two. Otherwise they dont multiply. On the other hand if they multiply the result ($y_t$) is a real number and not a vector  
> **username_0**: That's of course correct, I edited the question. After all, it is a toy example...  

---

## 0 answers

