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 > ) > > head(df) > > # 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 ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.