Reputation: 4200
I am calculating the geometric mean of a row in MS Excel by using the GEOMEAN(...)
command.
What is the geometric mean: The row could be A1:A10
. A geometric mean with
GEOMEAN(A1:A10)
is the product of all 10 cell values (multiplied together) after which the 10th root is taken (mathematically: nth_root(A_1 x A_2 x ... x A_n)
).
The issue: The command GEOMEAN(A1:A10)
works fine as long as no cells contain negative values (actually just as long as the product ends up positive). If one cell has a negative value, then taking the root is mathematically an invalid action and Excel gives an error.
The solution: I can work-around this by adding a large enough number such as +1000000
to each value before doing GEOMEAN(A1:A10)
and afterwards subtracting -1000000
from the result. This is a mathematical approximation to the pure geometrical mean.
The question: But how do I add +1000000
to each value in Excel? A solution would be to create a whole new extra row where the number is added, and then doing GEOMEAN
on this row and subtracting the number from the result. But I would really like to avoid creating a new row, since I have many long data sets to perform this command on.
Is there a way to add the number inside the command itself? To add it onto each value before it is multiplied? Something along the lines of:
GEOMEAN(A1:A10+1000000)-1000000
Based on the answer from and discussion with @ImaginaryHuman072889
It turns out that a working command that avoids any work-around is:
IFERROR(GEOMEAN(A1:A10);-GEOMEAN(ABS(A1:A10)))
If an error are cought by the IFERROR
, then we know that a negative result would have appeared, so this is constructed manually in that case.
BUT: This does not take into account the case mentioned by @ImaginaryHuman072889, though, because Excel seems to forbid any negative numbers involved and not just if the inner product is negative. For example, both GEOMEAN(-2,-2)
as well as GEOMEAN(-2,-2,-2)
give errors in Excel, even though they both should be mathematically valid, giving the results 2
and -2
, respectively. To overcome this Excel-issue, we can simply write out the exact same command line manually:
IFERROR(PRODUCT(A1:A10)^(1/COUNTA(A1:A10));-(PRODUCT(ABS(A1:A10))^(1/COUNTA(A1:A10)))))
I add this solution to aid any by-comers who have the same issue. This mathematically works, but the fact that -2
and -2
have the geometrical mean 2
does seem a bit odd and not at all like any useful value of a "mean". It is still mathematically legal as far as I can find (WolframAlpha has no issue with it and the Wikipedia article never mentions a sign).
Upvotes: 0
Views: 1875
Reputation: 5185
Your "workaround" of doing this:
GEOMEAN(A1:A10+1000000)-1000000
Is completely wrong. This is absolutely not equal to GEOMEAN(A1:A10)
.
Simple counter-example:
GEOMEAN({2,8})
returns the value of 4, which is the geometric mean of 2 and 8.
GEOMEAN({2,8}+1)-1
is equal to GEOMEAN({3,9})-1
which is approximately 4.196.
What is a valid workaround is if you multiply each value inside GEOMEAN
by a certain value, then divide the result by that value.
Simple example:
GEOMEAN({2,8}*3)/3
is equal to GEOMEAN({6,24})/3
which is 4.
However, this method of multiplying by a constant does not help your situation, since this won't get rid of negative values.
Mathematically speaking, the geometric mean of a positive number and a negative number is an imaginary number, which is presumably why Excel cannot handle it.
Example:
2*-8 = -16
sqrt(-16) = 4i
Therefore, 4i is the geometric mean of 2 and -8. Notice how it has the same magnitude as GEOMEAN({2,8})
, just that it is an imaginary number.
All that said... here is what I recommend you doing:
I suggest you return two results, one result is the magnitude of the geometric mean and the other is the phase of the geometric mean.
Formula for magnitude:
= GEOMEAN(ABS(A1:A10))
(Note, this is an array formula, so you'd have to press Ctrl+Shift+Enter instead of just Enter after typing this formula.) The use of ABS
converts all negative numbers to positive before the GEOMEAN
calculation, guaranteeing a positive geometric mean.
Formula for phase, I would just do something like this:
= IF(PRODUCT(A1:A10)>=0,"Real","Imaginary")
Which obviously returns Real
if the geometric mean is a real number and returns Imaginary
if the geometric mean is an imaginary number.
EDIT
Technically speaking, some of what I said wasn't completely precise, although the magnitude formula above still stands.
Some things I want to clarify:
PRODUCT(data)
is positive (or zero), then the geometric mean of data
is positive (or zero).PRODUCT(data)
is negative and if the number of entries in data
is odd, then the geometric mean of data
is negative (but still real).PRODUCT(data)
is negative and if the number of entries in data
is even, then the geometric mean of data
is imaginary.That said... if you want these formulas to be a bit more technically accurate, I would modify to this:
Adjusted formula for magnitude:
= GEOMEAN(ABS(A1:A10))*IF(AND(PRODUCT(A1:A10)<0,MOD(COUNT(A1:A10),2)=1),-1,1)
Adjusted formula for phase:
= IF(AND(PRODUCT(A1:A10)<0,MOD(COUNT(A1:A10),2)=0),"Imaginary","Real")
If the geometric mean is real, it returns the precise geometric mean (whether it is positive or negative), and if the geometric mean is imaginary, it returns a positive real value with the correct magnitude.
Upvotes: 2
Reputation: 4200
So, I just found the answer - although I have no idea why this works.
Doing GEOMEAN(A1:A10+1000000)-1000000
is actually possible. But by pressing enter
and error #VALUE
is displayed. You must click control+shift+enter
to have the actual result displayed.
According to this: https://www.mrexcel.com/forum/excel-questions/264366-calculating-geometric-mean-some-negative-values.html
If anyone has an explanation for this, I am very interested.
Upvotes: 0