Site icon R-bloggers

Error propagation based on interval arithmetics

[This article was first published on Rmazing, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

I added an interval function to my ‘propagate’ package (now on CRAN) that conducts error propagation based on interval arithmetics. It calculates the uncertainty of a model by using interval arithmetics based on (what I call) a “combinatorial sequence grid evaluation” approach, thereby avoiding the classical dependency problem that often inflates the result interval.
This is how it works:
For two variables with intervals and , the four basic arithmetic operations are


So for a function with variables, we have to create all combinations , evaluate their function values and select .
The so-called dependency problem is a major obstacle to the application of interval arithmetic and arises when the same variable exists in several terms of a complicated and often nonlinear function. In these cases, over-estimation can cover a range that is significantly larger, i.e. . For an example, see here under “Dependency problem”. A partial solution to this problem is to refine by dividing into smaller subranges to obtain sequence . Again, all combinations are evaluated as described above, resulting in a larger number of in which and may be closer to and , respectively. This is the “combinatorial sequence grid evaluation” approach which works quite well in scenarios where monotonicity changes direction, obviating the need to create multivariate derivatives (Hessians) or use some multivariate minimization algorithm.
If the interval is of type , a zero is included into the middle of the sequence to avoid wrong results in case of even powers, i.e. when actually the correct interval is , as exemplified by curve(x^2, -1, 1). Some examples to illustrate:

## Example 2: A complicated nonlinear model. ## Reduce sequence length to 2 => original interval ## for quicker evaluation. EXPR2 <- expression(C * sqrt((520 * H * P)/(M *(t + 460)))) H <- c(64, 65) M <- c(16, 16.2) P <- c(361, 365) t <- c(165, 170) C <- c(38.4, 38.5) DAT2 <- makeDat(EXPR2) interval(DAT2, EXPR2, seq = 2) [1317.494, 1352.277]
## Example 5: Overestimation from dependency problem. # Original interval with seq = 2 => [1, 7] EXPR5 <- expression(x^2 - x + 1) x <- c(-2, 1) DAT5 <- makeDat(EXPR5) interval(DAT5, EXPR5, seq = 2) [1, 7]
# Refine with large sequence => [0.75, 7] interval(DAT5, EXPR5, seq = 100) [0.7502296, 7] # Tallies with curve function. curve(x^2 - x + 1, -2, 1)

Have fun!
Cheers,
-ans


Filed under: General Tagged: dependency problem, error propagation, interval arithmetic, uncertainty

To leave a comment for the author, please follow the link and comment on their blog: Rmazing.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.