Link function for nonnegative model of binary data

Hello,

I am trying to develop a factor model that generates a nonnegative parameter x in (0, inf) then map that parameter into a probability p in (0,1).

When x is close to zero, I want p to also be close to zero.
As x gets larger, I want p to approach 1.

My guess is that logit might not be the right choice for this. Initially I thought of using

p = inv_logit(x - 6.0)

but I’m worried that might not be stable.

Are there any recommendations for a link function in this case?

I came up with this function that I think would work.

p = 1 - exp(-(x^2) / 2)
x = sqrt(-2 * log(1-p))

I think this would work, but I wanted to ask if there are any established link functions for this kind of model

Thanks

Why not just log the values and use inv_logit? Since x > 0 then that should work.

1 Like

As an alternative, you can just directly parameterize the log probability this way.

real<lower=0> neg_log_p;

real p = exp(-neg_log_p);

It’s easier to do it the other way around, as I did in my ISBA poster for PCR sensitivity over time:

real<upper=0> log_p;

real p = exp(log_p)

If you set up a regression on log_p on time, you can constrain it to work on the log probabilities,

vector<lower=0>[N] time;
real<upper=0> alpha;
real<upper=0> beta;
for (n in 1:N) {
  real p_n = exp(alpha + beta * time);  // p_n in (0, 1)
  ...
}

That’s what I used for my ISBA poster on PCR sensitivity tests over time. The beta parameter corresponds to a clearance parameter in a one-compartment ODE model (i.e., it’s exponential decay in time).

1 Like