library(dplyr)
library(tibble)
# Simulate example data
set.seed(123)
x1 <- runif(1000)
x2 <- runif(1000)
y <- rnorm(1000, mean = x1 + x2, sd = 1)
df <- tibble(x1, x2, y)
# Split into training, calibration, and test sets
df_train <- df %>% slice(1:500)
df_cal <- df %>% slice(501:750)
df_test <- df %>% slice(751:1000)
# Fit a model on the log-scale
mod <- lm(y ~ x1 + x2, data = df_train)
# Generate predictions
pred_cal <- predict(mod, newdata = df_cal)
pred_test <- predict(mod, newdata = df_test)
# Estimate normal prediction intervals from calibration data
intervals <- pinterval_parametric(
pred = pred_test,
calib = pred_cal,
calib_truth = df_cal$y,
dist = "norm",
alpha = 0.1
)
# Calculate empirical coverage
interval_width(lower_bound = intervals$lower_bound,
upper_bound = intervals$upper_bound)
Run the code above in your browser using DataLab