`../../Rtrack_website/vignettes/Rtrack_MWM_metrics_description.Rmd`

`Rtrack_MWM_metrics_description.Rmd`

At the heart of Rtrack is the processing of the raw paths to yield descriptive metrics. Some of these metrics, such as ‘path length’ and ‘time in wall zone’ are easily explained. Others are less clear, are named differently by different authors and/or depend on varying parameters.

This document describes each of the metrics calculated by
`calculate_metrics`

and the parameters used in their
definition.

A core functionality of the Rtrack package is the calculation of
metrics from the path coordinates. The `rtrack_metrics`

object that is returned by `calculate_metrics`

contains the
results of these calculations which are used for prediction by the
machine learning model. This section explains the information contained
in the `rtrack_metrics`

object and describes the individual
metrics in detail.

This section contains information that has been passed to the
`calculate_metrics`

function and is embedded in the
`rtrack_metrics`

object for convenience.

This is the track id supplied either to `read_path`

or
`read_experiment`

and should be a unique identifier for the
track. This will be used to name track analysis output and to title the
plots generated by `plot_path`

or
`plot_density`

.

The `rtrack_arena`

object associated with this track. See
the function `read_arena`

for details.

Briefly, the Morris water maze arena is defined as a ‘pool’ that is divided into several, often overlapping, zones. The zones for this arena type are as follows:

- The
*pool*is defined as the circular arena in which the water maze was performed. The raw size, shape and centre point (to allow for path recording calibration) are set by the experimenter in the arena definition file/s (see the function`read_arena`

). The fraction of time spent in this zone should be 1 (excepting only small calibration errors). - The
*wall*is defined as a ring with the outer extent bounded by the pool/arena and the inner radius equal to 80 % of the arena radius (i.e. the wall zone width is 10 % of the pool/arena diameter). - The
*far wall*is defined as a ring with the outer extent bounded by the wall (see above) and the inner radius bounded by the annulus (see below). - The
*annulus*is defined as a ring, centred on the centre of the pool/arena, with a width such that the entire goal exactly fits inside it. In other words, the inner radius of the annulus is the minimal distance between the edge of the goal zone and the arena centre, and the outer radius is the maximal distance between the edge of the goal zone and the arena centre. - The
*goal*is the target platform. This is required, even for a probe trial where the platform is not physically present. The size and position are defined by the experimenter in the arena definition file/s (see the function`read_arena`

). - The
*old goal*is the previous position the target platform was in before a reversal. This is optional and will not be present during training/acquisition or a probe trial. The size and position (if present) are defined by the experimenter in the arena definition file/s (see the function`read_arena`

). - The quadrants. The north quadrant is the quarter of the arena area
that is centred on the goal. The other quadrants are defined based on
this.
*The quadrant definitions thus change when the goal is moved (such as during a reversal).*

This section contains all the metrics, including those calculated for all time points (such as distance from goal and heading error).

The length of the path. This is in whatever units the path was measured in (millimetres, inches, pixels).

Zone crossings are the number of times the path crossed (i.e. entered and exited once) a particular zone. This is measured by calculating the intersection of the path and the zone polygon and identifying the transitions between ‘inside’ and ‘outside’ of the zone. Half of these transitions will be entries which is equivalent to the number of crossings (this value is in fact rounded up in case the track ends in a goal zone, as expected for the goal, which should be counted as a ‘crossing’).

The fraction of the arena covered by the path. This is measured by calculating the area of the minimal polygon enclosing the path (i.e. the ‘silhouette’; actually the ‘convex hull’ in technical terms) as a fraction of the area of the arena.

The angle between each point in the path and the x-axis. This is also
used to generate the `turning`

and
`absolute.turning`

metrics by calculating the difference in
angles between adjacent points.

The initial path is the section of the path from the start to a length equal to the direct distance between the start and the centre of the goal.

The angle between each point of the initial path and the direct line from start to goal.

The distance between each point of the initial path and the corresponding point on the direct path from start to goal.

The distance between the last point of the initial path and the centre of the goal.

This is an application of the Shannon entropy measure to spatial paths. In Rtrack, it is estimated by calculating a density map with a 50 \(\times\) 50 grid (and a bandwidth of 1/50) which is clipped to the bounds of the arena. This gives a computationally fast estimate of \(p\); the likelihood of the path passing through any one of the grid cells. The entropy is then calculated using Shannon’s equation: \(-\sum(p\times log(p))\). This value is then normalised by dividing by the log of the total number of grid cells present in the arena (so that the final value ranges between 0 and 1). A roaming entropy of 1 means that the path covers the entire arena and it is impossible to predict a point on the path. A roaming entropy of 0 occurs when the entire path is within one grid cell. Lower entropy values indicate a more predictable path. The idea behind the roaming entropy measure is demonstrated at http://www.brandmaier.de/roamingentropy/.

The summary metrics are derived from the core metrics above, but are each only a single value. Where metrics have been calculated for every timepoint, the value given here is either a sum, where appropriate, or the median together with the upper and lower quartiles.

This vector of (normalised) values is used for strategy calling using
the machine learning model implemented in `call_strategy`

.
These are not useful for further analysis on their own.

This is a selection of summary metrics that make sense for downstream
analysis. These values use the same units as the raw input data. That
is, the distances are in whatever units the track acquisition software
used (this may be centimetres, inches or even just pixels from the video
analysis—you will need to check with your acquisition software if you
are unsure of what these are). Times are in the units specified in the
arena description file. These will be ( *must* be!) the units of
the timestamps in the raw acquisition data. Most of these values are
*medians* of the metrics calculated for each point on the path^{1}.

The total length of the path. This is just the sum of the distance between each point and the next point in the path.

The total time the subject spent in the arena. This is not necessarily the same as the maximum trial duration; e.g. in cases where the subject finds the platform early.

The median `velocity`

. The speed of movement at each time
interval. In path units per second.

The median distance of each point on the path from the centre of the old goal.

The median of the angles between the direct path from start to goal and each section of the initial path (see above).

The distance between the last point of the initial path and the centre of the goal.

The distance between the last point of the initial path and the
centre of the old goal. This is the same as
`initial.trajectory.error`

(and uses the same initial path)
but records the distance to the old goal (if present). If no old goal
has been defined, this value is `NA`

.

The search efficiency (see efficiency above).

The roaming entropy (see roaming.entropy above).

The time at which the subject first crossed the goal zone (see latency.to.zone above). This will be
`NA`

if the goal was not reached.

The time at which the subject first crossed the old goal zone (see latency.to.zone above). This will be
`NA`

if the old goal was not reached or if there was no old
goal present.

Time in the wall zone (see Arena zones above for a definition of this zone).

Time in the wall zone (see Arena zones above for a definition of this zone).

Time in the wall zone (see Arena zones above for a definition of this zone).

Time in the wall zone (see Arena zones above for a definition of this zone).

Time in the wall zone (see Arena zones above for a definition of this zone).

Time in the north quadrant (centred on the goal position; see Arena zones above for a definition of this zone).

Time in the east quadrant (see Arena zones above for a definition of this zone).

Time in the south quadrant (see Arena zones above for a definition of this zone).

Time in the west quadrant (see Arena zones above for a definition of this zone).

The number of times the path crossed the goal zone (see goal.crossings above).

The number of times the path crossed the old goal zone (see goal.crossings above).

Below is an overview of the hierarchy of the
`rtrack_metrics`

object together with the names and classes
of each component. Where the class is not part of the R base package, it
is given in square brackets after the class name.

```
metrics : rtrack_metrics [Rtrack]
id : character
arena : rtrack_arena [Rtrack]
id : character
type : character
description : data.frame
type : character
time.units : character
arena.bounds : character
goal : character
(old.goal : character) **this component is optional and may be missing**
correction : list
t : numeric
x : numeric
y : numeric
r : numeric
pool : list
shape : character
x : numeric
y : numeric
radius : numeric
goal : list
shape : character
x : numeric
y : numeric
radius : numeric
old.goal : list
shape : character
x : numeric
y : numeric
radius : numeric
zones : list
pool : PackedSpatVector [terra]
wall : PackedSpatVector [terra]
far.wall : PackedSpatVector [terra]
annulus : PackedSpatVector [terra]
goal : PackedSpatVector [terra]
old.goal : PackedSpatVector [terra]
n.quadrant : PackedSpatVector [terra]
e.quadrant : PackedSpatVector [terra]
s.quadrant : PackedSpatVector [terra]
w.quadrant : PackedSpatVector [terra]
goal.corridor : PackedSpatVector [terra]
area : list
pool : numeric
wall : numeric
far.wall : numeric
annulus : numeric
goal : numeric
old.goal : numeric
n.quadrant : numeric
e.quadrant : numeric
s.quadrant : numeric
w.quadrant : numeric
path : rtrack_path
id : character
raw.t : numeric
raw.x : numeric
raw.y : numeric
t : numeric
x : numeric
y : numeric
path.length : numeric
velocity : numeric
total.time : numeric
goal.crossings : numeric
old.goal.crossings : numeric
coverage : numeric
angle.from.xaxis : numeric
outliers : numeric
initial.path : numeric
initial.heading.error : numeric
initial.displacement.error : numeric
initial.trajectory.error : numeric
efficiency : numeric
roaming.entropy : numeric
alpha : numeric
heading.error : numeric
velocity.in.zone : numeric
latency.to.zone : numeric
time.in.zone : numeric
features : numeric
path.length : numeric
lower.velocity : numeric
median.velocity : numeric
upper.velocity : numeric
total.time : numeric
coverage : numeric
turning : numeric
absolute.turning : numeric
lower.angle : numeric
median.angle : numeric
upper.angle : numeric
lower.d.centroid : numeric
median.d.centroid : numeric
upper.d.centroid : numeric
lower.d.goal : numeric
median.d.goal : numeric
upper.d.goal : numeric
lower.d.old.goal : numeric
median.d.old.goal : numeric
upper.d.old.goal : numeric
lower.d.origin : numeric
median.d.origin : numeric
upper.d.origin : numeric
centroid.goal.displacement : numeric
centroid.old.goal.displacement : numeric
median.initial.heading.error : numeric
initial.trajectory.error : numeric
initial.reversal.error : numeric
efficiency : numeric
roaming.entropy : numeric
velocity.in.wall.zone : numeric
velocity.in.far.wall.zone : numeric
velocity.in.annulus.zone : numeric
velocity.in.goal.zone : numeric
velocity.in.old.goal.zone : numeric
velocity.in.n.quadrant : numeric
velocity.in.e.quadrant : numeric
velocity.in.s.quadrant : numeric
velocity.in.w.quadrant : numeric
latency.to.wall.zone : numeric
latency.to.far.wall.zone : numeric
latency.to.annulus.zone : numeric
latency.to.goal.zone : numeric
latency.to.old.goal.zone : numeric
latency.to.n.quadrant : numeric
latency.to.e.quadrant : numeric
latency.to.s.quadrant : numeric
latency.to.w.quadrant : numeric
time.in.wall.zone : numeric
time.in.far.wall.zone : numeric
time.in.annulus.zone : numeric
time.in.goal.zone : numeric
time.in.old.goal.zone : numeric
time.in.n.quadrant : numeric
time.in.e.quadrant : numeric
time.in.s.quadrant : numeric
time.in.w.quadrant : numeric
wall.zone.crossings : numeric
far.wall.zone.crossings : numeric
annulus.zone.crossings : numeric
goal.zone.crossings : numeric
old.goal.zone.crossings : numeric
n.quadrant.crossings : numeric
e.quadrant.crossings : numeric
s.quadrant.crossings : numeric
w.quadrant.crossings : numeric
summary : numeric
path.length : numeric
total.time : numeric
velocity : numeric
distance.from.goal : numeric
distance.from.old.goal : numeric
initial.heading.error : numeric
initial.trajectory.error : numeric
initial.reversal.error : numeric
efficiency : numeric
roaming.entropy : numeric
latency.to.goal : numeric
latency.to.old.goal : numeric
time.in.wall.zone : numeric
time.in.far.wall.zone : numeric
time.in.annulus.zone : numeric
time.in.goal.zone : numeric
time.in.old.goal.zone : numeric
time.in.n.quadrant : numeric
time.in.e.quadrant : numeric
time.in.s.quadrant : numeric
time.in.w.quadrant : numeric
goal.crossings
old.goal.crossings
```

Most of the metrics are not normally distributed and therefore so-called parametric statistics may not be appropriate. For this reason, Rtrack defaults to using non-parametric descriptive statistics such as median and the upper/lower quartiles.↩︎