<p>I think the answer just comes down to rounding error. The reported values of <span class="math-container">$\delta$</span> are annualized. In the case of the CC1999 calibration, the annualized <span class="math-container">$\delta$</span> is <span class="math-container">$0.90$</span> and the implied monthly is <span class="math-container">$\delta = 0.991258$</span>. Because of the compounding over 12 periods (4 in the Wachter 2005/2006 case), the average risk-free rate is very sensitive to small changes in this value. Taking the other parameters as given and solving (11a) for the appropriate <span class="math-container">$\delta$</span> in each calibration leads to the following annualized values that are needed to reproduce the desired risk-free rates:</p>
<p><span class="math-container">\begin{align}
\delta &amp;= 0.8957829809431154 \text{ (instead of 0.90 in CC calibration)} \\
\delta &amp;= 0.9384246954559854 \text{ (instead of 0.93 in Wachter calibration)}
\end{align}</span></p>
<p>Below is the code to verify this.</p>
<pre><code># Campbell Cochrane parameters
ann_fact = 12 #annualization factor. Monthly
g = 1.89 / ann_fact / 100
sigma_v = 1.50 / np.sqrt(ann_fact) /100
gamma = 2.00
b = 0.00
phi = (0.87)**(1/ann_fact)
# delta = (0.90)**(1/ann_fact)
delta_CC = (np.exp(- 0.94/ann_fact/100 + (gamma * g - 1/2 * (gamma * (1-phi) - b)) ))**ann_fact
delta = (delta_CC)**(1/ann_fact)

# ## Wachter 2005 Parameters
# ann_fact = 4 #annualization factor. Quarterly
# parameterization_name = 'Wachter (2005)'
# ann_fact = ann_fact
# g = 2.20 / ann_fact / 100
# sigma_v = 0.86 / np.sqrt(ann_fact) / 100
# gamma = 2.00
# b = 0.011
# phi = (0.89)**(1/ann_fact)
# # delta = (0.93)**(1/ann_fact)
# delta_wachter = (np.exp(- 1.47/ann_fact/100 + (gamma * g - 1/2 * (gamma * (1-phi) - b)) ))**ann_fact
# delta = (delta_wachter)**(1/ann_fact)

bar_S = sigma_v * np.sqrt(gamma/(1 - phi - b/gamma))
bar_s = np.log(bar_S)
s_max = bar_s + 1/2 * (1 - bar_S**2)
Smax = np.exp(s_max)
print(&quot;Smax &quot;, Smax) # CC1999 should be 0.0939
r_f = (-np.log(delta) + gamma * g - 1/2 * (gamma * (1-phi) - b))
print(&quot;Average risk-free rate&quot;, r_f * ann_fact * 100)
# CC1999 should be 0.94 %
# Wachter 2005 should be 1.47 %
<span class="math-container">```</span>
</code></pre>

CC BY-SA 4.0
2021-04-09T19:32:05.983Z
2021-04-09T21:29:43.360Z
2021-04-09T21:29:43.360Z
jmbejara
<p>I might be making a really simple mistake somewhere, but I thought I'd ask anyway. I'm trying to replicate the results in <a href="https://www.sciencedirect.com/science/article/pii/S154461230500053X" rel="nofollow noreferrer">Wachter 2005, &quot;Solving models with external habit&quot;</a>. (You can also find the <a href="https://repository.upenn.edu/cgi/viewcontent.cgi?article=1153&amp;context=fnce_papers" rel="nofollow noreferrer">prepublication version here</a> for free.) However, I'm getting a slightly different result for some quantities and I'm wondering if I'm interpreting the parameters correctly. In particular, when I input the parameters listed in Table 1, I get a different average risk-free rate in both the &quot;CC value&quot; case and the &quot;Wachter value&quot; case.</p>
<p><a href="https://i.sstatic.net/Z95Ck.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/Z95Ck.png" alt="enter image description here" /></a></p>
<p>From Tables 2 and 3, we see that the &quot;CC value&quot; case should give an average risk-free rate, <span class="math-container">$E[r^f]$</span>, of <span class="math-container">$0.94\%$</span> and the
&quot;Wachter value&quot; case should give <span class="math-container">$1.47\%$</span>.</p>
<p>The value of the average risk-free rate can be derived analytically, and is given in equation (11):
<span class="math-container">$$
E[r^f_t] = - \log \delta + \gamma g - \frac{\gamma (1-\phi) - b}{2}. \tag{11a}
$$</span>
When I substitute in the parameter values from Table 1, I get
<span class="math-container">$0.47\%$</span> for the CC parameterization and
<span class="math-container">$2.47\%$</span> for the Wachter parameterization.</p>
<p>I wonder if I am annualizing correctly? I'm somewhat confident that I'm inputting the parameters correctly, because the paper does show that for the Campbell Cochrane calibration (CC values), a derived parameter called <span class="math-container">$S_{\text{max}}$</span> should be equal to <span class="math-container">$0.0939$</span>,
where</p>
<p><span class="math-container">\begin{align}
\bar S &amp;= \sigma_\nu \sqrt{\frac{\gamma}{1-\phi - b/\gamma}} \tag{5}\\
s_{\text{max}} &amp;= \bar s + \frac 12 (1 - \bar S^2), \tag{6}
\end{align}</span></p>
<p>Lower case letters denote the natural log of the capitalized variable. When I substitute in the &quot;CC values&quot;, I get <span class="math-container">$S_{\text{max}} = 0.09384$</span>. So, this seems correct. The paper implicitely reports this parameter in a footnote:
<a href="https://i.sstatic.net/X3cTc.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/X3cTc.png" alt="enter image description here" /></a></p>
<p><strong>Any thoughts as to why I'm getting different values for the average risk-free rate?</strong></p>
<p>I've included Python code below to show what I'm doing.</p>
<pre><code># Campbell Cochrane parameters
ann_fact = 12 #annualization factor. Monthly
g = 1.89 / ann_fact / 100
sigma_v = 1.50 / np.sqrt(ann_fact) /100
gamma = 2.00
b = 0.00
phi = (0.87)**(1/ann_fact)
delta = (0.90)**(1/ann_fact)

# ## Wachter 2005 Parameters
# ann_fact = 4 #annualization factor. Quarterly
# parameterization_name = 'Wachter (2005)'
# ann_fact = ann_fact
# g = 2.20 / ann_fact / 100
# sigma_v = 0.86 / np.sqrt(ann_fact) / 100
# gamma = 2.00
# b = 0.011
# phi = (0.89)**(1/ann_fact)
# delta = (0.93)**(1/ann_fact)

bar_S = sigma_v * np.sqrt(gamma/(1 - phi - b/gamma))
bar_s = np.log(bar_S)
s_max = bar_s + 1/2 * (1 - bar_S**2)
Smax = np.exp(s_max) 
print(&quot;Smax &quot;, Smax) # CC1999 should be 0.0939
r_f = (-np.log(delta) + gamma * g - 1/2 * (gamma * (1-phi) - b))
print(&quot;Average risk-free rate&quot;, r_f * ann_fact * 100)
# CC1999 should be 0.94 %
# Wachter 2005 should be 1.47 %
</code></pre>

CC BY-SA 4.0
2021-04-08T19:33:37.023Z
the equation 11 in the paper has also $b(\bar{s}− s_t)$ term, this term drops in CC calibration because of $b=0$ but not in the Wachter calibration. I do not have PC at hand to test it right now but perhaps that is the source of problem given that it seems that CC gives correct value but the second one does not?
1muflon1
CC BY-SA 4.0
2021-04-08T20:02:39.457Z
@1muflon1 Thanks for checking on this! $\bar s$ is the unconditional average of $s_t$, so this term becomes zero when taking the expectation of the risk-free rate. The CC value for Smax is correct, but the CC value for the risk-free rate is off by a factor of 2.
jmbejara
CC BY-SA 4.0
2021-04-08T20:03:31.657Z
I have notice, however, that the average risk-free rate is VERY sensitive to the choice of $\delta$. My guess at this point is that the issue is arising from the paper reporting a rounded value of $\delta$. The choice of parameters is simply chosen to match the ave. risk-free rate in the data exactly. This, together with the sensitivity, means some parameters should be chosen to a precision of lots of decimal places.
jmbejara
CC BY-SA 4.0
2021-04-08T20:05:15.993Z
by the way if that term becomes zero then whats the point of the values for $s_t$ in the grid? I looked at the paper and they mention that $\bar{s_t} \approx s_t$ but is it possible they actually used it in their calculations?
1muflon1
CC BY-SA 4.0
2021-04-08T20:08:24.467Z
@1muflon1 The risk-premium, the price-dividend ratio, and more, depends on $s_t$. The conditional risk-free rate can change too in the Wachter calibration. The CC calibration is chosen so that the risk-free rate is constant, for simplicity.
jmbejara
CC BY-SA 4.0
2021-04-08T20:38:12.597Z
I think you might be right about $\delta$ I looked into the [Wachter](https://www.sciencedirect.com/science/article/pii/S0304405X05001388?casa_token=ytEAJ0DthBkAAAAA:DHQRwChWT9VNpfTeaBs_BJVW91GFusDbXtnDG-6DJgQiRSgjF8tkcgfOle5Tn6wWmfWtbcC-uxY) and indeed discount rates there are different (0.98) and also the habit persistence is  0.97 but when I plugged them still the result is wrong, something is fishy there. The paper is also dated 2006 and in your reference 2005 but the journal is the same so either its a mistake or maybe paper was also edited and republished or at the time was just accepted
1muflon1
CC BY-SA 4.0
2021-04-09T01:35:40.570Z
@1muflon1 I'll need to look a little more closely. Very interesting. The 2006 paper is a different paper. The 2005 paper is about the solution method used to solve the kind of model in the 2006 paper.
jmbejara
<asset-pricing><replication>
Replicate average risk-free rate in Wachter 2005, "Solving models with external habit"
jmbejara
# Replicate average risk-free rate in Wachter 2005, "Solving models with external habit"

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

I might be making a really simple mistake somewhere, but I thought I'd ask anyway. I'm trying to replicate the results in [Wachter 2005, "Solving models with external habit"](https://www.sciencedirect.com/science/article/pii/S154461230500053X). (You can also find the [prepublication version here](https://repository.upenn.edu/cgi/viewcontent.cgi?article=1153&context=fnce_papers) for free.) However, I'm getting a slightly different result for some quantities and I'm wondering if I'm interpreting the parameters correctly. In particular, when I input the parameters listed in Table 1, I get a different average risk-free rate in both the "CC value" case and the "Wachter value" case.

[![enter image description here](https://i.sstatic.net/Z95Ck.png)](https://i.sstatic.net/Z95Ck.png)

From Tables 2 and 3, we see that the "CC value" case should give an average risk-free rate, $E[r^f]$, of $0.94\%$ and the
"Wachter value" case should give $1.47\%$.

The value of the average risk-free rate can be derived analytically, and is given in equation (11):
$$
E[r^f\_t] = - \log \delta + \gamma g - \frac{\gamma (1-\phi) - b}{2}. \tag{11a}
$$
When I substitute in the parameter values from Table 1, I get
$0.47\%$ for the CC parameterization and
$2.47\%$ for the Wachter parameterization.

I wonder if I am annualizing correctly? I'm somewhat confident that I'm inputting the parameters correctly, because the paper does show that for the Campbell Cochrane calibration (CC values), a derived parameter called $S\_{\text{max}}$ should be equal to $0.0939$,
where

\begin{align}
\bar S &= \sigma\_\nu \sqrt{\frac{\gamma}{1-\phi - b/\gamma}} \tag{5}\\
s\_{\text{max}} &= \bar s + \frac 12 (1 - \bar S^2), \tag{6}
\end{align}

Lower case letters denote the natural log of the capitalized variable. When I substitute in the "CC values", I get $S\_{\text{max}} = 0.09384$. So, this seems correct. The paper implicitely reports this parameter in a footnote:
[![enter image description here](https://i.sstatic.net/X3cTc.png)](https://i.sstatic.net/X3cTc.png)

**Any thoughts as to why I'm getting different values for the average risk-free rate?**

I've included Python code below to show what I'm doing.

```
# Campbell Cochrane parameters
ann_fact = 12 #annualization factor. Monthly
g = 1.89 / ann_fact / 100
sigma_v = 1.50 / np.sqrt(ann_fact) /100
gamma = 2.00
b = 0.00
phi = (0.87)**(1/ann_fact)
delta = (0.90)**(1/ann_fact)

# ## Wachter 2005 Parameters
# ann_fact = 4 #annualization factor. Quarterly
# parameterization_name = 'Wachter (2005)'
# ann_fact = ann_fact
# g = 2.20 / ann_fact / 100
# sigma_v = 0.86 / np.sqrt(ann_fact) / 100
# gamma = 2.00
# b = 0.011
# phi = (0.89)**(1/ann_fact)
# delta = (0.93)**(1/ann_fact)

bar_S = sigma_v * np.sqrt(gamma/(1 - phi - b/gamma))
bar_s = np.log(bar_S)
s_max = bar_s + 1/2 * (1 - bar_S**2)
Smax = np.exp(s_max) 
print("Smax ", Smax) # CC1999 should be 0.0939
r_f = (-np.log(delta) + gamma * g - 1/2 * (gamma * (1-phi) - b))
print("Average risk-free rate", r_f * ann_fact * 100)
# CC1999 should be 0.94 %
# Wachter 2005 should be 1.47 %

```

**Tags:** asset-pricing, replication

> **Comments:**
> **username_1**: the equation 11 in the paper has also $b(\bar{s}− s_t)$ term, this term drops in CC calibration because of $b=0$ but not in the Wachter calibration. I do not have PC at hand to test it right now but perhaps that is the source of problem given that it seems that CC gives correct value but the second one does not?  
> **username_0**: @username_1 Thanks for checking on this! $\bar s$ is the unconditional average of $s_t$, so this term becomes zero when taking the expectation of the risk-free rate. The CC value for Smax is correct, but the CC value for the risk-free rate is off by a factor of 2.  
> **username_0**: I have notice, however, that the average risk-free rate is VERY sensitive to the choice of $\delta$. My guess at this point is that the issue is arising from the paper reporting a rounded value of $\delta$. The choice of parameters is simply chosen to match the ave. risk-free rate in the data exactly. This, together with the sensitivity, means some parameters should be chosen to a precision of lots of decimal places.  
> **username_1**: by the way if that term becomes zero then whats the point of the values for $s_t$ in the grid? I looked at the paper and they mention that $\bar{s_t} \approx s_t$ but is it possible they actually used it in their calculations?  
> **username_0**: @username_1 The risk-premium, the price-dividend ratio, and more, depends on $s_t$. The conditional risk-free rate can change too in the Wachter calibration. The CC calibration is chosen so that the risk-free rate is constant, for simplicity.  
> **username_1**: I think you might be right about $\delta$ I looked into the [Wachter](https://www.sciencedirect.com/science/article/pii/S0304405X05001388?casa_token=ytEAJ0DthBkAAAAA:DHQRwChWT9VNpfTeaBs_BJVW91GFusDbXtnDG-6DJgQiRSgjF8tkcgfOle5Tn6wWmfWtbcC-uxY) and indeed discount rates there are different (0.98) and also the habit persistence is  0.97 but when I plugged them still the result is wrong, something is fishy there. The paper is also dated 2006 and in your reference 2005 but the journal is the same so either its a mistake or maybe paper was also edited and republished or at the time was just accepted  
> **username_0**: @username_1 I'll need to look a little more closely. Very interesting. The 2006 paper is a different paper. The 2005 paper is about the solution method used to solve the kind of model in the 2006 paper.  

---

## 1 answers

### Answer by username_0 on 2021-04-09. Score: 1

I think the answer just comes down to rounding error. The reported values of $\delta$ are annualized. In the case of the CC1999 calibration, the annualized $\delta$ is $0.90$ and the implied monthly is $\delta = 0.991258$. Because of the compounding over 12 periods (4 in the Wachter 2005/2006 case), the average risk-free rate is very sensitive to small changes in this value. Taking the other parameters as given and solving (11a) for the appropriate $\delta$ in each calibration leads to the following annualized values that are needed to reproduce the desired risk-free rates:

\begin{align}
\delta &= 0.8957829809431154 \text{ (instead of 0.90 in CC calibration)} \\
\delta &= 0.9384246954559854 \text{ (instead of 0.93 in Wachter calibration)}
\end{align}

Below is the code to verify this.

```
# Campbell Cochrane parameters
ann_fact = 12 #annualization factor. Monthly
g = 1.89 / ann_fact / 100
sigma_v = 1.50 / np.sqrt(ann_fact) /100
gamma = 2.00
b = 0.00
phi = (0.87)**(1/ann_fact)
# delta = (0.90)**(1/ann_fact)
delta_CC = (np.exp(- 0.94/ann_fact/100 + (gamma * g - 1/2 * (gamma * (1-phi) - b)) ))**ann_fact
delta = (delta_CC)**(1/ann_fact)

# ## Wachter 2005 Parameters
# ann_fact = 4 #annualization factor. Quarterly
# parameterization_name = 'Wachter (2005)'
# ann_fact = ann_fact
# g = 2.20 / ann_fact / 100
# sigma_v = 0.86 / np.sqrt(ann_fact) / 100
# gamma = 2.00
# b = 0.011
# phi = (0.89)**(1/ann_fact)
# # delta = (0.93)**(1/ann_fact)
# delta_wachter = (np.exp(- 1.47/ann_fact/100 + (gamma * g - 1/2 * (gamma * (1-phi) - b)) ))**ann_fact
# delta = (delta_wachter)**(1/ann_fact)

bar_S = sigma_v * np.sqrt(gamma/(1 - phi - b/gamma))
bar_s = np.log(bar_S)
s_max = bar_s + 1/2 * (1 - bar_S**2)
Smax = np.exp(s_max)
print("Smax ", Smax) # CC1999 should be 0.0939
r_f = (-np.log(delta) + gamma * g - 1/2 * (gamma * (1-phi) - b))
print("Average risk-free rate", r_f * ann_fact * 100)
# CC1999 should be 0.94 %
# Wachter 2005 should be 1.47 %
```

```


---

