In this tutorial, you will learn about what is geometric mean, when to use geometric mean and how to calculate geometric mean in R.

## What is geometric mean?

Geometric mean is a measure of central tendency. It is useful in averaging rate of changes when ratio changes are more important that the absolute changes.

Let $x_i, i=1,2, \cdots , n$ be $n$ positive observations

then the geometric mean of $X$ is denoted by $GM$ and is is defined as

` $$ \begin{aligned} GM &=\big(\prod_{i=1}^n x_i\big)^{1/n}\\ &=\sqrt[n]{x_1\times x_2\times \cdots \times x_n} \end{aligned} $$ `

Thus, the geometric mean is the $n^{th}$ root of the product of all the observations.

## When to use geometric mean?

Geometric mean is often used in averaging the data about rates and ratios. Geometric mean is commonly used measure of central tendency in finance to calculate average rate of interest, average growth rate or average return on financial portfolio.

## How to calculate geometric mean in R?

As such there is no specific function available in `base`

package. But you can define your own function for geometric mean or use `geometric.mean()`

function from `psych`

package.

### Geometric mean using user-defined function

Let us create a user-defined function to calculate geometric mean as follows:

```
Geometric.Mean <- function(x, na.rm = TRUE) {
if (na.rm == FALSE & any(is.na(x))) {
avg <- NA
} else{
avg <- exp(mean(log(x), na.rm = TRUE))
}
return(avg)
}
```

### Using `geometric.mean()`

function from `psych`

package

One can use the `geometric.mean()`

function from `psych`

package. First you need to install the `psych`

package using `install.packages("psych")`

. Once the package is installed, then load the package using `library(psych)`

.

The syntax of the `geometric.mean()`

function is

`geometric.mean(x,na.rm=TRUE)`

where,

**x :**a vector, matrix or data.frame,**na.rm :**`na.rm=TRUE`

(default) remove`NA`

values before processing.

For more information about `psych`

package check this link psych package.

Note that, geometric mean is not particularly useful if there are elements that are less than or equal to zero ($\leq 0$).

## Numerical example on geometric mean using R

### Example 1: Geometric Mean Using R

The annual percentage growth rate of profits of a company from year 2010 to 2014 are as follows:

Year 2010 2011 2012 2013 2014 Growth rate (in %) 30 40 76 69 95 Calculate the average annual percentage growth rate of profit.

#### Geometric mean using formula

Geometric mean is the $n^{th}$ root of the product of all the observations. That is

`$$GM =\big(\prod_{i=1}^n x_i\big)^{1/n}$$`

```
# create a data vector
x <- c(30, 40,76, 69, 95)
# compute no. of observations in x
n <- length(x)
# calculate geometric mean
GM <- (prod(x)) ** (1 / n)
GM
```

`[1] 56.92637`

The average annual percentage growth rate of profit is 56.9263721.

#### Geometric mean using user-defined function

Earlier we have defined the function for geometric mean as `Geometric.Mean(x)`

. Let us calculate the geometric mean using user-defined function `Geometric.Mean(x)`

.

```
# create a data vector
x <- c(30, 40,76, 69, 95)
Geometric.Mean(x)
```

`[1] 56.92637`

The average annual percentage growth rate of profit is 56.9263721.

#### Geometric mean using `psych`

package

One can use `geometric.mean()`

function from `psych`

package to calculate geometric mean.

```
# load the package
library(psych)
# use the function to compute geometric mean
geometric.mean(x)
```

`[1] 56.92637`

The average annual percentage growth rate of profit is 56.9263721.

### Example 2: Geometric Mean using R with `NA`

's

Calculate the geometric mean of data

`10,25,36,23,NA,17`

.

#### Geometric mean using formula

Geometric mean is the $n^{th}$ root of the product of all the observations. Using the formula

`$$GM =\big(\prod_{i=1}^n x_i\big)^{1/n}$$`

```
# create a data vector
x <- c(10,25,36,23,NA,17)
# compute no. of observations in x
n <- length(x[!is.na(x)])
# calculate geometric mean
GM <- (prod(x,na.rm=TRUE)) ** (1 / n)
GM
```

`[1] 20.38374`

The geometric mean of given data is 20.3837392.

Note that the default value of `na.rm`

is `FALSE`

in `prod()`

function. Therefore, to remove `NA`

values before processing use the argument `na.rm=TRUE`

. Also to get the length of `x`

without `NA`

use a logical NOT with `is.na(x)`

.

#### Geometric mean using user-defined function

Use the user-defined function `Geometric.Mean(x)`

with additional argument `na.rm=TRUE`

.

```
# create a data vector
x <- c(10,25,36,23,NA,17)
Geometric.Mean(x)
```

`[1] 20.38374`

The geometric mean of given data is 20.3837392.

Note that the default value of `na.rm`

is `TRUE`

in our user-defined function `Geometric.Mean()`

function. Therefore, no need to specify the argument `na.rm=TRUE`

.

#### Geometric mean using `psych`

package

Use `geometric.mean()`

function from `psych`

package to calculate geometric mean.

```
# load the package
library(psych)
# use the function to compute harmonic mean
geometric.mean(x)
```

`[1] 20.38374`

The geometric mean of given data is 20.3837392.

Note that the default value of `na.rm`

is `TRUE`

in `geometric.mean()`

function from `psych`

package. Therefore, the `NA`

values are removed before processing.

## Endnote

In this tutorial, you learned about what is geometric mean and how to compute geometric mean for the data using R.

To learn more about descriptive statistics using R, please refer to the following tutorials:

Harmonic mean using R

Descriptive Statistics using R

Hopefully you enjoyed this tutorial on geometric mean using R.