I am working with several TimeSeries
containing Around
objects. I find that the propagated uncertainties for numerical values are larger than I expect them to be. In contrast, the propagated uncertainties for symbolic values are exactly what I expect them to be.
This is also true for ordinary List
objects, so I will use List
to demonstrate. Note that the original data values are all positive (n(i) > 0
) and their original uncertainties equal their square roots (δn(i) = √n(i)
)
First, generate a list of symbolic data:
symbolicData = Table(Around(n(i), Sqrt(n(i))), {i, 10})
Then, Accumulate
these data:
symbolicTotals = Accumulate@symbolicData
The uncertainty of the last value is the square root of that value:
{symbolicTotals((-1))("Uncertainty"), Sqrt@symbolicTotals((-1))("Value")}
Given my understanding of error propagation, this is correct.
Now, generate numerical data:
numericalData = Table(Around(#, Sqrt(#)) &@RandomInteger(10), {i, 10})
Acculumate
these data:
numericalTotals = Accumulate@numericalData
Compare the last value’s uncertainty and square root:
{numericalTotals((-1))("Uncertainty"), Sqrt@numericalTotals((-1))("Value")}
The uncertainty is larger than the square root. This happens for any long list of numbers.
Why? And how can I fix it? (Assuming there’s an actual problem here, and not simply a lack of knowledge on my end.)
My guess is that this discrepancy is a consequence of the fact that
When Around is used in computations, uncertainties are by default propagated using a first-order series approximation, assuming no correlations.
What exactly is being approximated here, and if Around
always does this, why doesn’t it affect symbolic values?
I understand that AroundReplace
allows for higher-order approximations, but it starts with a symbolic expression and substitutes numerical values. I’m starting with numerical values. Is my only option to generate TimeSeries
objects with symbolic values, do all my computations, and then AroundReplace
the symbols with the original numerical data?
Is there a better way?