Skip to content
All library documents

Comparing Annualized Log Returns with Calendar-Year Returns

Article Quant Q&A · Author: fx_trdr

Summary

The document compares two ways to summarize an asset’s historical return and volatility. One method averages daily log returns and scales the mean and standard deviation to an annual horizon; the other calculates each calendar year’s simple return and then takes the arithmetic mean and standard deviation across years. The reported examples show substantially different estimates for both measures.

The explanation attributes the gap mainly to the distinct quantities being measured: the log-return calculation approximates long-run compound growth, while the yearly calculation summarizes the arithmetic distribution of calendar-year returns. It suggests log returns for portfolio mean-variance computations when the aim is to estimate compound growth, but leaves the interpretation of log-space volatility unresolved. The comparison also has practical limits: partial years, differing return definitions, and serial dependence can affect estimates, and annualized daily volatility is not generally identical to the standard deviation of observed annual returns.

Key ideas

  • Annualized mean daily log return approximates compound growth over time.
  • Calendar-year simple returns yield an arithmetic mean and dispersion across yearly outcomes.
  • These calculations measure different return statistics and can produce materially different estimates.
  • Exponentiating the annualized log-return mean does not convert log-return volatility into simple-return volatility.
  • The source raises, but does not resolve, how to interpret the log-space standard deviation.

Tags

Full text
# annualized vs annual returns


# annualized vs annual returns












For the purposes of MPT, to compute return of an asset, one typically uses the daily log return of the assets and then anualizes it and the same goes for stddev

```
    mean = mean(daily log returns)*252
    stddev = stddev(daily log returns)*sqrt(252)
```

Now, I've several years worth of data. So I also compute this in a different way as well to compare:

I compute the annual return for each year separately (i.e., non overlapping, calendar year)

```
    annual return = (P365 - P1)/P1
```

And then the mean

```
    mean = mean(annual returns for each year)
    stddev = stddev(annual returns)
```

Now, when I compare the restults from these two, there seems to be large differences. For instance, I get a (mean, stddev) of (13%, 26%) by the first method compared to (22%, 52%) in the second method. Doing an exp(mean) in the first method to compare the results doesn't make much of a difference.

In code:

```
First method:
In [2294]: np.log(t2.a.pct_change()+1).mean()*252                                                                                                  
Out[2294]: 0.13256313708025944

In [2295]: np.exp(np.log(t2.a.pct_change()+1).mean()*252)                                                                                          
Out[2295]: 1.1417511006444343

In [2296]: np.log(t2.a.pct_change()+1).std()*np.sqrt(252)                                                                                          
Out[2296]: 0.2666418976278336

Second method:
In [2299]: t2.a.groupby(t2.a.index.year).apply(lambda x:(x[-1] - x[0])/x[0]).mean()                                                             
Out[2299]: 0.2223071697039014

In [2300]: t2.a.groupby(t2.a.index.year).apply(lambda x:(x[-1] - x[0])/x[0]).std()                                                              
Out[2300]: 0.5251807718593228
```

Question: Are we likely to see such large differences between annualized returns and the annual returns...esp the volatility part? Or am I going wrong somewhere?

Thank you for your time.

## Answer by fx_trdr (score 1)

https://quant.stackexchange.com/a/62021

So, I suppose, in method one, what I'm getting is the geometric mean and geometric standard deviaton. The data that I had used spanned 25 years, [1996-2020]. Transforming the daily returns to log, taking the arithmetic mean in log space, and then multiplying by the number of observations in a year, then reversing the log, essentaily, gives me an approximation of the CAGR over the 25 years.

While in the second method, what I have is arithmetic mean of yearly returns and arithmetic std devation. So these are obviously different.

Given that the purpose in this case is to get a sense of what my CAGR will be over the years for any given asset and the standard devation thereof, I suppose it is prudent to use the log returns, for MPT computations.

Please correct me if I am wrong.

So, the mean of ~14.17 by method 1 is a CAGR. But I'm having trouble with the practical intuition behind this log space std deviation. How do I get it out of log space? Do I simply exponentiate it? Even if I did that I'd be left with a geometric std devation. If it was an arithematic std devation, I get a sense of the spread, if the CAGR were normally distributed. But with a geometric standard deviation, which is dimensionless, I wonder how do I interpret that in terms of how much the CAGR varies.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.