Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

set up documentation using Documenter.jl #4

Merged
merged 3 commits into from
May 23, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/Manifest.toml
docs/build
4 changes: 4 additions & 0 deletions docs/make.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
using Documenter
using LatSpec

makedocs(sitename="LatSpec.jl")
10 changes: 10 additions & 0 deletions docs/src/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# LatSpec.jl Documentation

```@meta
CurrentModule = LatSpec
```

```@docs
autocor
autotimeexp
```
30 changes: 24 additions & 6 deletions src/statistics.jl
Original file line number Diff line number Diff line change
@@ -1,28 +1,46 @@
# Autocorrelation for a specifig lag
function autocor(x::AbstractVector, lag::Integer)
"""
autocor(x,lag)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any specific reason I miss for calling it lag?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is the same name that is being used in StatsBase.jl - we could call it something else. Calling it time or t could be misleading but maybe something like steps or timesteps?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay yes makes sense to stick to something that has already been around for some time.


Returns autocorrelation function for a distance of lag, i.e. between values of
```x[t]``` and ```x[t+lag]```. The autocorrelation function is normalized such
that ```autocor(x,0) = 1```. This is equvivalent to the quantity
``\\Gamma_X(t)`` of equation (4.61) in Gattringer/Lang.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Better citation of the book would be nice.
Is there anything in documenter.jl to have something like a "Reference"-section with Bibliography to link to?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It turns out that there is a dedicated plug-in package for this DocumenterCitations.jl . I had to modify the standard .bib entries generated by inspire for it to work and the bibliography style cannot be customized (yet) (see ali-ramadhan/DocumenterCitations.jl#22 ) but this should do it for now.

"""
function autocor(x, lag)
# (wasteful in terms of allocations but clear)
z = x .- mean(x)
a = sum(z[1+lag:end].*z[1:end-lag])/sum(z.*z)
return a
end
# Autocorrelation for a automatically choosen number of lags
"""
autocor(x)

Returns autocorrelation function for a set of lags from ``0`` up to the closest
integer to ``10 \\text{log}_{10}(l)``. Here ``l`` is the number of elements in
```x```.
"""
function autocor(x)
lx = length(x)
# heuristic for choosing a suitable number of lags
lags = collect(0:min(lx-1, round(Int,10*log10(lx))))
a = zeros(eltype(x),length(lags))
for i in 1:length(lags)
a[i] = autocor(x, lags[i])
end
return a
end
# Perform exponential fit of autocorrelation and extract characteristic time
"""
autotimeexp(x)

Returns ``\\max(1,\\tau)`` where ``\\tau`` is the exponential autocorrelation
time of a series of measurements ``x``. This is obtained by fitting the
autocorrelation function to an exponential function of the form
``A \\exp(\\frac{t}{\\tau})``.
"""
function autotimeexp(O)
a = autocor(O)
@. modelτ(x,p) = abs.(p[2])*exp(-x/p[1])
x = collect(1:length(a))
c = curve_fit(modelτ, x, a, ones(2))
τ = c.param[1]
# if autocorrelation time τ is smaller than 1 return just 1
return max(one(τ),τ)
end