# [R] Nonlinear logistic regression fitting

J C Nash pro|jcn@@h @end|ng |rom gm@||@com
Wed Jul 29 20:28:28 CEST 2020

```My earlier posting on this thread was misleading. I thought the OP was trying to
fit a sigmoid to data. The problem is about fitting 0,1 responses.

The reproducible example cleared this up. Another strong demonstration that
a "simple reproducible example" can bring clarity so much more quickly than
general discussion.

JN

On 2020-07-29 8:56 a.m., Sebastien Bihorel wrote:
> #install.packages(gnlm)
> #require(gnlm)
> set.seed(12345)
>
> nx <- 10
> x <- c(
>   rep(0, 3*nx),
>   rep(c(10, 30, 100, 500, 1000), each = nx)
> )
> rnd <- runif(length(x))
> a <- log(0.2/(1-0.2))
> b <- log(0.7/(1-0.7)) - a
> c <- 30
> likelihood <- a + b*x/(c+x)
> p <- exp(likelihood) / (1 + exp(likelihood))
> resp <- ifelse(rnd <= p, 1, 0)
>
> df <- data.frame(
>   x = x,
>   resp = resp,
>   nresp = 1- resp
> )
>
>
> # glm can only assume linear effect of x, which is the wrong model
> glm_mod <- glm(
>   resp~x,
>   data = df,
>   family = 'binomial'
> )
> glm_mod
>
> # Using gnlm package, estimate a model model with just intercept, and a model with predictor effect
> int_mod <- gnlm::bnlr( y = df[,2:3], link = 'logit', mu = ~ p_a, pmu = c(a) )
> emax_mod <- gnlm::bnlr( y = df[,2:3], link = 'logit',  mu = ~ p_a + p_b*x/(p_c+x),  pmu = c(a, b, c) )
>
> int_mod
> emax_mod

```