Skip to content

Strictly increasing, interpolated resampling

Note

Uncertain data handling relies on the UncertainData. To use the resampling schemes, you need to load this package by first running using UncertainData in the Julia console.

Call signature

# CausalityToolsBase.causalityMethod.

causality(source::AbstractUncertainIndexValueDataset, 
    target::AbstractUncertainIndexValueDataset, 
    test::CausalityTest, constraint::SequentialSamplingConstraint, grid::RegularGrid)

Test for a causal influence from source to target using the provided causality test on single draws of source and target that have been generated according to the provided sequential sampling constraint. After interpolating both source and target to the provided regular grid, the causality test is performed on the interpolated data.

Note

This method uses UncertainData.jl for uncertainty handling. To use it, first run using UncertainData in the Julia console.

Example

First, generate some example data.

using UncertainData, CausalityTools, Distributions
N = 300
a₁, a₂, b₁, b₂, ξ₁, ξ₂, C₁₂ = 0.7, 0.1, 0.75, 0.2, 0.3, 0.3, 0.5

D = rand(N, 2) 
for t in 5:N
    D[t,1] = a₁*D[t-1,1] - a₂*D[t-3,1] +                ξ₁*rand(Normal(0, 1))
    D[t,2] = b₁*D[t-1,2] - b₂*D[t-2,2] + C₁₂*D[t-1,1] + ξ₂*rand(Normal(0, 1))
end

Gather time series and add some uncertainties to them:

ts = collect(1:N)
x, y = D[:, 1], D[:, 2]
t = UncertainValue.(Normal.(ts .+ 0.2 .* rand(N), rand(N)))
uvalx = UncertainValue.(Normal.(x, rand()))
uvaly = UncertainValue.(Normal.(y, rand()))

X = UncertainIndexValueDataset(t, uvalx)
Y = UncertainIndexValueDataset(t, uvaly)

Now, resample both the indices and values of X and Y in a strictly increasing manner according to the indices, interpolate both to the same regular grid, and perform a causality test.

n_bins = ceil(Int, N^(1/4))
te_test = VisitationFrequencyTest(binning = RectangularBinning(n_bins), ηs = -5:5)
pa_test = PredictiveAsymmetryTest(predictive_test = te_test)

# Sample a strictly increasing realisation of the indices, interpolate,
# then perform the causality test on the interpolated data.
causality(X, Y, pa_test, StrictlyIncreasing(), RegularGrid(1:1:N))

source