Binomial Regression w/ Log N Error in Predictor

I’m trying to account for logN measurement error in a predictor variable of a logistic regression, but can’t figure out the correct way to do so.

Basically, we have i observations, each consisting of 2 samples from different binomial distributions (categories j) with a true predictor v_{i} and observed predictor x_{i} = v_i \times \varepsilon with \varepsilon ~ \text{logN}(0, s_{\varepsilon}) and
\lambda_{i,c} = a_j + b_j x_i
with c \sim (1,2) and x_i \sim \text{LogN}(1, s_x)

p_{j,i} = \Pr(\text{Success in category } j \text{ of observation }i)
p_{j,i} = \exp(\lambda_{j,i})/(1 + \exp(\lambda_{j,i}))

When the error was normally distributed, I am able to use w_{i} = v_i + \varepsilon,
formula = bf(y|trials(n) ~ 0 + i + i:me(w, s_e, gr = id))

But I don’t understand how to craft the formula and/or priors for logN error.

Can someone help me directly or point me to a useful resource?

For clarity, below is some sample code,

i <- 100 # of genes
id <- paste0("id_", ((1:i) - 1))

a <- 2 # amino acids
l1 <- 30 #rate for category 1
l2 <- 20 # rate for category 2
s_e <- 0.1

set.seed(1234)
#  # of observations for each category
n1 <- rpois(i, l1)
n2 <- rpois(i, l2) 
## Predictor w/error
v <- rlnorm(i, 0, 2)
## Normal Error
e <- rnorm(i, 0, s_e)
w <- v + e
## LogN Error
e <- rlnorm(i, 0, s_e)
x <- v * e

## Create predictors

### Response Parameters
a1 <- -0.1
a2 <-  0.1
b1 <-  1.0
b2 <- -1.0
### Create dataframe
pred1 <- tibble(id, i = 1, n = n1, v, w, x, a = a1, b = b1)
pred2 <- tibble(id, i = 2, n = n2, v, w, x, a = a2, b = b2)
pred <- bind_rows(pred1, pred2)

## Generate data
data <- pred |> rowwise() |>
  mutate(p = exp(a + b * v)/(1 + exp(a + b * v)),
                       y = rbinom(1, size = n, prob = p)) |>
  arrange(id)

## Fit Binomials


### data w/ Normal error
fit_ne <- brm(
  formula = bf(y|trials(n) ~ 0 + i + i:me(w, s_e, gr = id)),
  data = data,
  data2 = list(s_e = s_e),
  family = binomial(link = "logit")
)

### data w/ LogN error but assumed to be normally distributed
### So it doesn't work very well
fit_lne <- brm(
  formula = bf(y|trials(n) ~ 0 + i + i:me(x, s_e, gr = id)),
  data = data,
  data2 = list(s_e = s_e),
  family = binomial(link = "logit")
)
  • Operating System: Ubuntu 22.04
  • brms Version: 2.21.0