Skip to content

Range intersections

4 messages · Mark Knecht, R. Michael Weylandt, Enrico Schumann +1 more

#
For the sake of asking here assume I have 5 models that attempt to
predict a pair of future values like tomorrow's high & low. The
predictions are placed in a matrix with the low prediction in column 1
and the high prediction in column 2. _IF_ there is an intersection of
all 5 predictions then I can test for that using the simple equation
in Range1. However if there is a prediction that's a complete outlier
as is Pred2[4,] then the simple equation fails and says the high is
less than the low.

Are there any R packages that automatically handle simple intersection
problems like this? My real goals include things like probability
distributions across the ranges, but for now I'm just looking for
what's out there?

Thanks,
Mark


Pred1 = matrix(data=NA, nrow=5, ncol=2)
Pred1[1,] = c(100,110)
Pred1[2,] = c(88,125)
Pred1[3,] = c(92,120)
Pred1[4,] = c(25,105)
Pred1[5,] = c(91,121)

Range1 = c(max(Pred1[,1]), min(Pred1[,2]))
Range1

Pred2 = matrix(data=NA, nrow=5, ncol=2)
Pred2[1,] = c(100,110)
Pred2[2,] = c(88,125)
Pred2[3,] = c(92,120)
Pred2[4,] = c(25,70) #outlier - the high is too low
Pred2[5,] = c(91,121)

Range2 = c(max(Pred2[,1]), min(Pred2[,2]))
Range2
#
On Fri, Jul 26, 2013 at 6:22 PM, Mark Knecht <markknecht at gmail.com> wrote:
http://cran.r-project.org/web/packages/intervals/index.html
http://cran.r-project.org/web/packages/sets/index.html

would probably be the place to start.

Cheers,
MW
#
On Sat, 27 Jul 2013, Mark Knecht <markknecht at gmail.com> writes:
Yes, taking the intersection "fails" because in the second case the
intersection is empty.  So /you/ will have to decide how you want to
handle such cases.  Perhaps remove the outlier, or use some majority
rule to find a "most likely" outcome (according to your preditions).
For instance, you could count how often a given price falls in the range
of any of the models.


ind <- function(x, min, max) {
    s <- numeric(length(x))
    for (i in seq_along(min))
        s <- s + as.integer(x >= min[i] & x <= max[i])
    s
}

x <- seq(0, 130, by = 0.5)
s <- ind(x, Pred2[ ,1], Pred2[ ,2])
plot(x, s, type = "S")

range(ca <- x[s == max(s)])            ## "consensus area"
all.equal(max(diff(ca)), diff(x)[1L])  ## single area?
 

Regards,
        Enrico