`cmean()`

# Introduction

Cumulative mean is a statistical measure that calculates the mean of a set of numbers up to a certain point in time or after a certain number of observations. It is also known as a running average or moving average.

Cumulative mean can be useful in a variety of contexts. For example:

Tracking progress: Cumulative mean can be used to track progress over time. For instance, a teacher might use it to track the average test scores of her students throughout the school year.

Analyzing trends: Cumulative mean can help identify trends in data. For example, a business might use it to track the average revenue generated by a new product over the course of several months.

Smoothing data: Cumulative mean can be used to smooth out fluctuations in data. For instance, a meteorologist might use it to calculate the average temperature over the course of a year, which would help to smooth out the effects of daily temperature fluctuations.

In summary, cumulative mean is a useful statistical measure that can help track progress, analyze trends, and smooth out fluctuations in data.

# Function

The function we will review is `cmean()`

from the `{TidyDensity}`

R package. Let’s take a look at it.

The only argument is `.x`

which is a numeric vector as this is a vectorized function. Let’s see it in use.

# Example

First let’s load in **TidyDensity**

`library(TidyDensity)`

Ok now let’s make some data. For this we are going to use the simple `rnorm()`

function.

```
<- rnorm(100)
x
head(x)
```

`[1] -0.8293250 -1.2983499 2.2782337 -0.1521549 0.6859169 0.3809020`

Ok, now that we have our vector, let’s run it through the function and see what it outputs and then we will graph it.

```
<- cmean(x)
cmx head(cmx)
```

```
[1] -0.8293249774 -1.0638374319 0.0501862766 -0.0003990095 0.1368641726
[6] 0.1775371452
```

Now let’s graph it.

`plot(cmx, type = "l")`

Ok nice, so can we do this on grouped data or lists of data? Of course! First let’s use a for loop to generate a list of **rnorm()** values.

```
# Initialize an empty list to store the generated values
<- list()
my_list
# Generate values using rnorm(5) in a for loop and store them in the list
for (i in 1:5) {
<- rnorm(100)
my_list[[i]]
}
# Print the generated list
::map(my_list, head) purrr
```

```
[[1]]
[1] -0.8054353 -0.4596541 -0.2362475 1.1486398 -0.7242154 0.5184610
[[2]]
[1] 0.3243327 0.7170802 -0.5963424 -1.0307104 0.3388504 0.5717486
[[3]]
[1] 1.7360816 -1.0359467 -0.3206138 -1.2157684 -0.8841356 0.1856481
[[4]]
[1] -1.1401642 -0.4437817 -0.2555245 -0.1809040 -0.2131763 -0.1251750
[[5]]
[1] 0.08835903 -1.79153379 -2.15010900 0.67344844 1.06125849 0.99848796
```

Now that we have our list object let’s go ahead and plot the values out after we pass the data through `cmean()`

.

```
library(purrr)
|>
my_list map(\(x) x |> cmean() |> plot(type = "l"))
```

```
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
[[5]]
NULL
```

From here I think it is easy to see how one could do this on gruoped data as well with dplyr’s **group_by()**.