Skip to contents

Fits a BKP model to binomial or binary response data via local kernel smoothing. The model constructs a flexible latent probability surface by updating Beta priors using kernel-weighted observations.

Usage

fit.BKP(
  X,
  y,
  m,
  Xbounds = NULL,
  prior = c("noninformative", "fixed", "adaptive"),
  r0 = 2,
  p0 = 0.5,
  kernel = c("gaussian", "matern52", "matern32"),
  loss = c("brier", "log_loss"),
  n_multi_start = NULL
)

Arguments

X

A numeric input matrix of size \(n \times d\), where each row represents a covariate vector.

y

A numeric vector of observed successes (length n).

m

A numeric vector of total binomial trials (length n), corresponding to each y.

Xbounds

Optional \(d \times 2\) matrix specifying the lower and upper bounds of each input dimension. Used to normalize inputs to \([0,1]^d\). If Xbounds is NULL, the input is assumed to have already been normalized, and the default bounds are set to \([0,1]^d\).

prior

Type of prior to use. One of "noninformative", "fixed", or "adaptive".

r0

Global prior precision (only used when prior = "fixed" or "adaptive").

p0

Global prior mean (only used when prior = "fixed").

kernel

Kernel function for local weighting. Choose from "gaussian", "matern52", or "matern32".

loss

Loss function for kernel hyperparameter tuning. One of "brier" (default) or "log_loss".

n_multi_start

Number of random initializations for multi-start optimization. Default is 10 × d.

Value

A list of class "BKP" containing the fitted BKP model, with the following elements:

theta_opt

Optimized kernel hyperparameters (lengthscales).

kernel

Kernel function used, as a string.

loss

Loss function used for hyperparameter tuning.

loss_min

Minimum loss value achieved during optimization.

X

Original (unnormalized) input matrix of size n × d.

Xnorm

Normalized input matrix scaled to \([0,1]^d\).

Xbounds

Matrix specifying normalization bounds for each input dimension.

y

Observed success counts.

m

Observed binomial trial counts.

prior

Type of prior used.

r0

Prior precision parameter.

p0

Prior mean (for fixed priors).

alpha0

Prior shape parameter \(\alpha_0(\mathbf{x})\), either a scalar or vector.

beta0

Prior shape parameter \(\beta_0(\mathbf{x})\), either a scalar or vector.

alpha_n

Posterior shape parameter \(\alpha_n(\mathbf{x})\).

beta_n

Posterior shape parameter \(\beta_n(\mathbf{x})\).

See also

fit.DKP for modeling multinomial responses using the Dirichlet Kernel Process. predict.BKP, plot.BKP, simulate.BKP for making predictions, visualizing results, and generating simulations from a fitted BKP model. summary.BKP, print.BKP for inspecting model details.

Examples

#-------------------------- 1D Example ---------------------------
set.seed(123)

# Define true success probability function
true_pi_fun <- function(x) {
  (1 + exp(-x^2) * cos(10 * (1 - exp(-x)) / (1 + exp(-x)))) / 2
}

n <- 30
Xbounds <- matrix(c(-2,2), nrow=1)
X <- tgp::lhs(n = n, rect = Xbounds)
true_pi <- true_pi_fun(X)
m <- sample(100, n, replace = TRUE)
y <- rbinom(n, size = m, prob = true_pi)

# Fit BKP model
model1 <- fit.BKP(X, y, m, Xbounds=Xbounds)
print(model1)
#> --------------------------------------------------
#>            Beta Kernel Process (BKP) Model        
#> --------------------------------------------------
#> Number of observations (n):  30
#> Input dimensionality (d):    1
#> Kernel type:                 gaussian
#> Loss function used:          brier
#> Optimized kernel parameters: 0.0386
#> Minimum achieved loss:       0.00012
#> 
#> Prior specification:
#>   Noninformative prior: Beta(1,1).
#> --------------------------------------------------


#-------------------------- 2D Example ---------------------------
set.seed(123)

# Define 2D latent function and probability transformation
true_pi_fun <- function(X) {
  if(is.null(nrow(X))) X <- matrix(X, nrow=1)
  m <- 8.6928
  s <- 2.4269
  x1 <- 4*X[,1]- 2
  x2 <- 4*X[,2]- 2
  a <- 1 + (x1 + x2 + 1)^2 *
    (19- 14*x1 + 3*x1^2- 14*x2 + 6*x1*x2 + 3*x2^2)
  b <- 30 + (2*x1- 3*x2)^2 *
    (18- 32*x1 + 12*x1^2 + 48*x2- 36*x1*x2 + 27*x2^2)
  f <- log(a*b)
  f <- (f- m)/s
  return(pnorm(f))  # Transform to probability
}

n <- 100
Xbounds <- matrix(c(0, 0, 1, 1), nrow = 2)
X <- tgp::lhs(n = n, rect = Xbounds)
true_pi <- true_pi_fun(X)
m <- sample(100, n, replace = TRUE)
y <- rbinom(n, size = m, prob = true_pi)

# Fit BKP model
model2 <- fit.BKP(X, y, m, Xbounds=Xbounds)
print(model2)
#> --------------------------------------------------
#>            Beta Kernel Process (BKP) Model        
#> --------------------------------------------------
#> Number of observations (n):  100
#> Input dimensionality (d):    2
#> Kernel type:                 gaussian
#> Loss function used:          brier
#> Optimized kernel parameters: 0.1112, 0.0680
#> Minimum achieved loss:       0.00020
#> 
#> Prior specification:
#>   Noninformative prior: Beta(1,1).
#> --------------------------------------------------