calc_PSD {samplr} | R Documentation |
Power Spectral Density Calculator
Description
This function estimates the log power spectral density against the log frequency, and calculates a slope \alpha
.
Usage
calc_PSD(chain, max_freq = 0.1, filter_freq = TRUE, plot = FALSE)
Arguments
chain |
Matrix of n x d dimensions, n = iterations, d = dimensions sequence |
max_freq |
The maximum frequency to be considered in PSD if |
filter_freq |
Boolean. Whether PSD only considers the frequencies between 0 and |
plot |
Boolean. Whether to return a plot or the elements used to make it. |
Details
A number of studies have reported that cognitive activities contain a long-range slowly decaying autocorrelation. In the frequency domain, this is expressed as S(f)
~ 1/f^{-\alpha}
, with f
being frequency, S(f)
being spectral power, and \alpha
\epsilon
[0.5,1.5]
is considered 1/f
scaling. See See Zhu et al. (2018) for a comparison of Levy Flight and PSD measures for different samplers in multimodal representations.
The default frequency range in PSD analysis extends from 0 to 0.1, which is specified by max_freq
. It is because the logarithmic spectral power density tends to flatten beyond a frequency of 0.1. As a result, some researchers (e.g., Gilden et al. 1995; Zhu et al. 2022) estimate the value of \alpha
using only frequencies below 0.1. When filter_freq
is set to FALSE
, the frequency range will be from 0 to the Nyquist frequency.
Value
Returns a list with log frequencies, log PSDs, and slope and intercept estimates.
References
Gilden D, Thornton T, Mallon M (1995).
“1f Noise in Human Cognition.”
Science, 267(5205), 1837–1839.
ISSN 0036-8075, 1095-9203, doi:10.1126/science.7892611.
Zhu J, León-Villagrá P, Chater N, Sanborn AN (2022).
“Understanding the Structure of Cognitive Noise.”
PLoS Computational Biology, 18(8), e1010312.
doi:10.1371/journal.pcbi.1010312.
Zhu J, Sanborn AN, Chater N (2018).
“Mental Sampling in Multimodal Representations.”
Advances in Neural Information Processing Systems, 31, 5748–5759.
Examples
set.seed(1)
chain1 <- sampler_mh(1, "norm", c(0,1), diag(1))
calc_PSD(chain1[[1]], plot= TRUE)