I have a question relating to what methods/machine learning techniques exist for modelling when you have uncertainty within your target variable (in regression problems).

For example, suppose you have the following dataset (contrived example): you are modelling house sale price and you have recorded historical feature data and house price sale data for each house. Your feature dataset is:

Feature Space: \begin{bmatrix} Square Foot & Number OfBedrooms & Number Of Bathrooms \\ 1000 & 3 & 2 \\ 1500 & 2 & 1 \\ ... & ... & ... \\ \end{bmatrix}

With the corresponding house sale price for each house (feature row), however you are only able to obtain a range on the target variable (contains uncertainty) - perhaps law in this particular country dictates that the seller may only disclose a range and the exact value cannot be known:

Target Variable: \begin{bmatrix} Sale Price (Target Variable) \\ 1000 - 1500 \\ 2000-2200 \\ ... \\ \end{bmatrix}

My question is, what techniques exist to model such situations where you have a lower and upper bound on a target variable but the value itself is not known? Note that the width of the window on the target may vary

  • $\begingroup$ If I were you I would just split it into two problems with two models. One for predicting the lower end and one for predicting the upper end, or one for predicting the middle and one for predicting the difference between the upper and lower bound to get the range to place around the middle. $\endgroup$
    – Tylerr
    Feb 17, 2021 at 13:37

1 Answer 1


This can be modeled as interval censored data. Most references you will find on interval censoring are in the survival time context, but the same techniques apply to any measurement that is censored. The survival package in R has the required methods for this. I suggest the accelerated failure model.


N <- 100

X <- data.frame(
  bathrooms = sample(1:3, size = N, replace = TRUE),
  bedrooms = sample(1:4, size = N, replace = TRUE)

Y <- rlnorm(N, log(10000 + X$bathrooms*10000 + X$bedrooms*30000), 2)


Ycensleft <- floor(Y/10000) * 10000
Ycensright <- ceiling(Y/10000) * 10000


Ysurv <- Surv(time = Ycensleft, time2 = Ycensright, event = rep(3, N), type = 'interval')

sv1 <- survreg(Ysurv ~ bathrooms + bedrooms, data = X, dist = "gaussian")

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.