> > > geometric.mean1 <- function(x) prod(x)^(1/length(x)) > > > geometric.mean2 <- function(x) exp(mean(log(x))) > > > geometric.mean1(c(-5,-4,4,5)) > > [1] 4.472136 > > > geometric.mean2(c(-5,-4,4,5)) > > [1] NaN > > Warning message: > > In log(x) : NaNs produced
> comp.x <- as.complex(c(-5,-4,4,5)) > geometric.mean2(comp.x) > # [1] 0+4.472136i Obviously, there's a discrepancy between the answer of geometric.mean1 and geometric.mean2 with complex inputs. Having thought about it a little more, I think the problem is with my solution. The log of a complex number decomposes as log(z) = log(abs(z)) +1i*Arg(z). When you sum the second components, you need to take the answer modulo 2*pi, since the phase angles wrap around. Here's an alternative geometric mean function that takes that into account. geometric.mean3 <- function(x) { a <- mean(log(abs(x))) b <- 1i/length(x) c <- sum(Arg(x))%%(2*pi) exp(a+b*c) } geometric.mean3(comp.x) # [1] 4.472136+0i Regards, Richie. Mathematical Sciences Unit HSL ------------------------------------------------------------------------ ATTENTION: This message contains privileged and confidential inform...{{dropped:20}} ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.