# Circular mean

(Redirected from Mean of circular quantities)

In mathematics and statistics, a circular mean or angular mean is a mean designed for angles and similar cyclic quantities, such as times of day, and fractional parts of real numbers.

This is necessary since most of the usual means may not be appropriate on angle-like quantities. For example, the arithmetic mean of 0° and 360° is 180°, which is misleading because 360° equals 0° modulo a full cycle.[1] As another example, the "average time" between 11 PM and 1 AM is either midnight or noon, depending on whether the two times are part of a single night or part of a single calendar day.

The circular mean is one of the simplest examples of directional statistics and of statistics of non-Euclidean spaces. This computation produces a different result than the arithmetic mean, with the difference being greater when the angles are widely distributed. For example, the arithmetic mean of the three angles 0°, 0°, and 90° is (0° + 0° + 90°) / 3 = 30°, but the vector mean is arctan(1/2) = 26.565°. Moreover, with the arithmetic mean the circular variance is only defined ±180°.

## Definition

Since the arithmetic mean is not always appropriate for angles, the following method can be used to obtain both a mean value and measure for the variance of the angles:

Convert all angles to corresponding points on the unit circle, e.g., ${\displaystyle \alpha }$ to ${\displaystyle (\cos \alpha ,\sin \alpha )}$. That is, convert polar coordinates to Cartesian coordinates. Then compute the arithmetic mean of these points. The resulting point will lie within the unit disk but generally not on the unit circle. Convert that point back to polar coordinates. The angle is a reasonable mean of the input angles. The resulting radius will be 1 if all angles are equal. If the angles are uniformly distributed on the circle, then the resulting radius will be 0, and there is no circular mean. (In fact, it is impossible to define a continuous mean operation on the circle.) In other words, the radius measures the concentration of the angles.

Given the angles ${\displaystyle \alpha _{1},\dots ,\alpha _{n}}$ a common formula of the mean using the atan2 variant of the arctangent function is

${\displaystyle {\bar {\alpha }}=\operatorname {atan2} \left({\frac {1}{n}}\sum _{j=1}^{n}\sin \alpha _{j},{\frac {1}{n}}\sum _{j=1}^{n}\cos \alpha _{j}\right)=\operatorname {atan2} \left(\sum _{j=1}^{n}\sin \alpha _{j},\sum _{j=1}^{n}\cos \alpha _{j}\right)}$

### Using complex arithmetic

An equivalent definition can be formulated using complex numbers:

${\displaystyle {\bar {\alpha }}=\arg \left({\frac {1}{n}}\sum _{j=1}^{n}\exp(i\cdot \alpha _{j})\right)=\arg \left(\sum _{j=1}^{n}\exp(i\cdot \alpha _{j})\right)}$.

In order to match the above derivation using arithmetic means of points, the sums would have to be divided by ${\displaystyle n}$. However, the scaling does not matter for ${\displaystyle \operatorname {atan2} }$ and ${\displaystyle \arg }$, thus it can be omitted.

This may be more succinctly stated by realizing that directional data are in fact vectors of unit length. In the case of one-dimensional data, these data points can be represented conveniently as complex numbers of unit magnitude ${\displaystyle z=\cos(\theta )+i\,\sin(\theta )=e^{i\theta }}$, where ${\displaystyle \theta }$ is the measured angle. The mean resultant vector for the sample is then:

${\displaystyle {\overline {\mathbf {\rho } }}={\frac {1}{N}}\sum _{n=1}^{N}z_{n}.}$

The sample mean angle is then the argument of the mean resultant:

${\displaystyle {\overline {\theta }}=\operatorname {Arg} ({\overline {\mathbf {\rho } }}).}$

The length of the sample mean resultant vector is:

${\displaystyle {\overline {R}}=|{\overline {\mathbf {\rho } }}|}$

and will have a value between 0 and 1. Thus the sample mean resultant vector can be represented as:

${\displaystyle {\overline {\mathbf {\rho } }}={\overline {R}}\,e^{i{\overline {\theta }}}.}$

Similar calculations are also used to define the circular variance.

## Properties

The circular mean, ${\displaystyle {\bar {\alpha }}}$

${\displaystyle {\bar {\alpha }}={\underset {\beta }{\operatorname {argmin} }}\sum _{j=1}^{n}d(\alpha _{j},\beta ),{\text{ where }}d(\varphi ,\beta )=1-\cos(\varphi -\beta ).}$
The distance ${\displaystyle d(\varphi ,\beta )}$ is equal to half the squared Euclidean distance between the two points on the unit circle associated with ${\displaystyle \varphi }$ and ${\displaystyle \beta }$.

## Example

A simple way to calculate the mean of a series of angles (in the interval [0°, 360°)) is to calculate the mean of the cosines and sines of each angle, and obtain the angle by calculating the inverse tangent. Consider the following three angles as an example: 10, 20, and 30 degrees. Intuitively, calculating the mean would involve adding these three angles together and dividing by 3, in this case indeed resulting in a correct mean angle of 20 degrees. By rotating this system anticlockwise through 15 degrees the three angles become 355 degrees, 5 degrees and 15 degrees. The arithmetic mean is now 125 degrees, which is the wrong answer, as it should be 5 degrees. The vector mean ${\textstyle {\bar {\theta }}}$ can be calculated in the following way, using the mean sine ${\textstyle {\bar {s}}}$ and the mean cosine ${\textstyle {\bar {c}}\not =0}$:

${\displaystyle {\bar {s}}={\frac {1}{3}}(\sin(355^{\circ })+\sin(5^{\circ })+\sin(15^{\circ }))={\frac {1}{3}}(-0.087+0.087+0.259)\approx 0.086}$
${\displaystyle {\bar {c}}={\frac {1}{3}}(\cos(355^{\circ })+\cos(5^{\circ })+\cos(15^{\circ }))={\frac {1}{3}}(0.996+0.996+0.966)\approx 0.986}$
${\displaystyle {\bar {\theta }}=\left.{\begin{cases}\arctan \left({\frac {\bar {s}}{\bar {c}}}\right)&{\bar {s}}>0,\ {\bar {c}}>0\\\arctan \left({\frac {\bar {s}}{\bar {c}}}\right)+180^{\circ }&{\bar {c}}<0\\\arctan \left({\frac {\bar {s}}{\bar {c}}}\right)+360^{\circ }&{\bar {s}}<0,\ {\bar {c}}>0\end{cases}}\right\}=\arctan \left({\frac {0.086}{0.986}}\right)=\arctan(0.087)=5^{\circ }.}$

## Implementation

In this python code we use day hours to find circular average of them:

import math

def circular_mean(hours):
# Convert hours to radians
# To convert from hours to degrees, we need to
# multiply hour by 360/24 = 15.
radians = [math.radians(hour * 15) for hour in hours]

# Calculate the sum of sin and cos values

# Calculate the circular mean using arctan2
mean_rad = math.atan2(sin_sum, cos_sum)

# Convert the mean back to hours
mean_hour = (math.degrees(mean_rad) / 15) % 24

return mean_hour

# Example usage:
hours = [0, 12, 18]
mean_hour = circular_mean(hours)
print("First Circular mean:", round(mean_hour, 2))

hours = [0, 12]
mean_hour = circular_mean(hours)
print("Second Circular mean:", round(mean_hour, 2))

hours = [0, 0, 12, 12, 24]
mean_hour = circular_mean(hours)
print("Third Circular mean:", round(mean_hour, 2))


## Generalizations

### Spherical mean

A series of N independent unit vectors ${\displaystyle x_{i}}$ are drawn from a von Mises–Fisher distribution. The maximum likelihood estimates of the mean direction ${\displaystyle \mu }$ is simply the normalized arithmetic mean, a sufficient statistic:[2]

${\displaystyle \mu ={\bar {x}}/{\bar {R}},{\text{where }}{\bar {x}}={\frac {1}{N}}\sum _{i}^{N}x_{i},{\text{and }}{\bar {R}}=\|{\bar {x}}\|,}$

### Weighted spherical mean

A weighted spherical mean can be defined based on spherical linear interpolation.[3]