# commons-issues mailing list archives

##### Site index · List index
Message view
Top
From "Larry Diamond (JIRA)" <j...@apache.org>
Subject [jira] Commented: (MATH-323) Add Semivariance calculation
Date Wed, 23 Dec 2009 22:05:32 GMT
```
[ https://issues.apache.org/jira/browse/MATH-323?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12794241#action_12794241
]

Larry Diamond commented on MATH-323:
------------------------------------

Hi Phil.  No worries - its the holiday season and it's an all volunteer project.  I find you
and Luc to be very responsive all things given.

I actually find the process of contributing to the project very straightforward - it's intimidating
until you try, but you both have been very easy to work with.

This link will help somewhat - http://thecuriousinvestor.com/2007/10/03/sortino-ratio/

1.  Some of the tests will occur twice in some of the functions.  I copied the four methods
for variance to create the semi-variance methods - I'm having second thoughts about that since
I really would only call the one that takes the array or possibly the array and the mean.
I've never needed to compute semi-variance for a part of an array.
I'm very flexible on this - I went for consistency rather than the best performance possible
- feel free to make changes as you see fit.

2.  The Sortino ratio uses the downward standard deviation, which is the square root of the
semivariance.  You definitely would want to keep the values above the mean and collapse them
rather than exclude them altogether.
A simple explanation of the Sortino Ratio is probably in order to explain why.
The Sortino Ratio comes from the Sharpe Ratio.  The Sharpe Ratio is used to rate how much
reward you're getting for the risk you're taking.  Standard Deviation is the divisor.  Higher
is better.
One criticism of the Sharpe Ratio is that returns in excess of the mean increase your standard
deviation, but you don't getting big rewards from time to time - those periods shouldnt count.
An example helps here
-1
0
1
2
2
20

That 20% return is nice (I'd like a 20% monthly return too!) but that 20% makes your standard
deviation higher and your Sharpe Ratio lower.
But nobody minds an occassional blowout return - that doesnt increase the risk of the fund
in the view of people who prefer the Sortino Ratio.
Mean = 4, Variance = 52.333, Std Dev = 7.234

But for the semivariance calculation, that 20 becomes a 4 and stays in the set, so semivariance
becomes 9.666 and the downward standard deviation becomes 3.109.  Dropping out the 20% isn't
appropriate because it's part of your return.

That's a big difference in how your performance looks - 7.234 / 3.109 = 2.326.  Your fund
now looks 2.3 times better than it did before!

That "other" parameter is often called the "minimum acceptable return".  Some people prefer
to look at only when you lost money or would fail to meet some regular performance metric.
Pension managers get estimates on what they need to make that year and will look for people
who have the best chance of making that return.

Instead of looking at the mean, they have a minimum return that they want to measure off of.
So, from the example above, let's say that the pension manager has a minimum acceptable return
of 2%.
In that case, the 2% and 20% returns dont add into the semivariance so you get a semivariance
of 8.333
This is where that zero initially came from.

Okay, now here's the little curveball that initially sounds bad but really turns into something
easy:
Some years, you lose money.  The mean is below zero.  In those cases, that minimum acceptable
return is "sometimes" the minimum of the mean and zero.  Rather than putting in code that
automatically checks the mean and replaces the minimum acceptable return, if we have code
that takes in the double array and the MAR, I think we're fine.

Okay, now that I've made a really long JIRA comment, what's the next step?

Should I rewrite as a UnivariateStatistic?  Should I just make the semivariance code two methods
- one that takes the array and one that takes the array and a MAR?  Or has this entry been
so long I've made you want to hit the eggnog?

> ----------------------------
>
>                 Key: MATH-323
>                 URL: https://issues.apache.org/jira/browse/MATH-323
>             Project: Commons Math
>          Issue Type: New Feature
>    Affects Versions: 2.1
>            Reporter: Larry Diamond
>            Assignee: Phil Steitz
>            Priority: Minor
>             Fix For: 2.1
>
>         Attachments: patch.txt, patch2.txt, StatUtils.java, StatUtils.java, StatUtilsTest.java,
StatUtilsTest.java
>
>
> I've added semivariance calculations to my local build of commons-math and I would like
to contribute them.
> Semivariance is described a little bit on http://en.wikipedia.org/wiki/Semivariance ,
but a real reason you would use them is in finance in order to compute the Sortino ratio rather
than the Sharpe ratio.
> http://en.wikipedia.org/wiki/Sortino_ratio gives an explanation of the Sortino ratio
and why you would choose to use that rather than the Sharpe ratio.  (There are other ways
to measure the performance of your portfolio, but I wont bore everybody with that stuff)
> I've already got the coding completed along with the test cases and building using mvn
site.
> The only two files I've modified is src/main/java/org/apache/commons/stat/StatUtils.java
and src/test/java/org/apache/commons/math/stat/StatUtilsTest.java

--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

```
Mime
View raw message