tests/testthat/test-aftpen-pic.R

test_that("aftpen_pic runs and returns valid output", {
  set.seed(1)

  make_pic_data <- function() {
    n <- 100
    p <- 2
    beta0 <- c(1, 1)
    clu_rate <- 0.5
    exactrates <- 0.8
    left <- 0.001
    right <- 0.01

    eta <- 1 / clu_rate
    v <- rgamma(n, shape = eta, rate = eta)
    m <- ifelse(v > median(v), 5, 3)
    id <- rep(seq_len(n), m)
    vi <- rep(v, m)

    N <- sum(m)
    x <- matrix(rnorm(N * p), ncol = p)
    T <- as.vector(exp(x %*% beta0 + vi * log(rexp(N))))

    L <- R <- delta <- numeric(N)
    index <- rbinom(N, 1, exactrates)

    for (i in seq_len(N)) {
      if (index[i] == 1) {
        L[i] <- T[i]
        R[i] <- T[i]
        delta[i] <- 1
      } else {
        U <- cumsum(c(1e-8, runif(10, left, right)))
        LL <- U[-length(U)]
        RR <- U[-1]

        if (T[i] < min(LL)) {
          L[i] <- 1e-8
          R[i] <- min(LL)
          delta[i] <- 0
        } else if (T[i] > max(RR)) {
          L[i] <- max(RR)
          R[i] <- 1e8
          delta[i] <- 0
        } else {
          idd <- which(T[i] > LL & T[i] < RR)
          if (length(idd) == 1) {
            L[i] <- LL[idd]
            R[i] <- RR[idd]
            delta[i] <- 0
          } else {
            L[i] <- T[i]
            R[i] <- T[i]
            delta[i] <- 1
          }
        }
      }
    }

    data.frame(
      L = L,
      R = R,
      delta = delta,
      id = id,
      x1 = x[, 1],
      x2 = x[, 2]
    )
  }

  dt <- make_pic_data()
  fit <- aftpen_pic(dt, lambda = 0.1, se = "CF", type = "BAR")

  expect_true(is.list(fit))
  expect_true("beta" %in% names(fit))
  expect_equal(length(fit$beta), 2)
  expect_true(all(is.finite(fit$beta)))
})

Try the aftPenCDA package in your browser

Any scripts or data that you put into this service are public.

aftPenCDA documentation built on April 23, 2026, 9:11 a.m.