Пакет нелинейной логистической регрессии в R

Есть ли пакет R, который выполняет нелинейную логистическую регрессию?

Другими словами: у меня есть glm, с которым я могу пойти glm (cbind (success, failure) ~ variable 1 + variable2, data = df, family = binomial (link = 'logit')), и я могу использовать nls, чтобы пойти nls (y ~ a * x^2 + b * x + c, data = df).

Я хотел бы иметь некоторую функцию, которая принимала бы формулу cbind (success, failure) ~ int - slo * x + gap / (1 + x / sca) (где x, success и failure - единственные данные, а все остальное - параметры) с семейством binomial (link = 'logit'), т. Е. Объединить обе вещи. Я рыскал в Google и не нашел ничего подобного.


person Pedro Carvalho    schedule 27.07.2017    source источник
comment
Вы проверили cran.r-project.org/web/packages? /gnm/vignettes/gnmOverview.pdf?   -  person discipulus    schedule 28.07.2017
comment
Я не читал все это, но ctrl + F, похоже, не находит logistic, за исключением логистической функции, а binomial не находит функцию ссылки logit, и во всех примерах используется что-то под названием Dref и Понятия не имею, что это такое. Я попытался использовать gnm с формулой, которую описал там, и это дало мне object 'int' not found ошибку. Если вы мне скажете, это можно будет сделать там, хотя я займусь этим дальше.   -  person Pedro Carvalho    schedule 28.07.2017
comment
В этом сообщении блога показано, как это сделать с помощью gmm, но вам нужно будет построить несколько уравнений и ВНИМАТЕЛЬНО ПРОВЕРИТЬ ЛОГИКУ ЭТОГО РЕБЕНКА! r-bloggers.com/ < / а>   -  person sconfluentus    schedule 28.07.2017
comment
Если я не ошибаюсь, этот пост в блоге, кажется, показывает мне, как сделать обычную линейную логистическую регрессию вместо нелинейной, которую я пытаюсь оценить. Разве это не так?   -  person Pedro Carvalho    schedule 28.07.2017
comment
вам не нужен нелинейный метод наименьших квадратов, чтобы соответствовать ax ^ 2 + bx + c ... это линейно по x и x ^ 2   -  person Glen_b    schedule 28.07.2017
comment
Это правильно, но ax^2 + bx + c это не то, что я пытаюсь вписать, я пытаюсь вписать int - slo * x + gap / (1 + x / sca)   -  person Pedro Carvalho    schedule 28.07.2017
comment
Следует ли оценивать данные или параметры пробелов и sca?   -  person swihart    schedule 01.08.2017
comment
другие возможности - bbmle::mle2 и rethinking пакет (только для Github)   -  person Ben Bolker    schedule 01.08.2017
comment
x - единственные данные, gap и sca, slo и int - все параметры   -  person Pedro Carvalho    schedule 01.08.2017


Ответы (1)


Попробуйте gnlm::bnlr(). Ссылка по умолчанию - logit, и вы можете указать нелинейную функцию данных и параметров. Я включаю два ответа в зависимости от того, являются ли gap и sca данными или параметрами.

library(gnlm)

В случае gap и sca это данные:

## if gap and sca are data:
set.seed(1)
dat <- data.frame(  x = rnorm(10),
                  gap = rnorm(10),
                  sca = rnorm(10),
                    y = rbinom(10,1,0.4))
y_cbind = cbind(dat$y, 1-dat$y)
attach(dat)
bnlr(y=y_cbind, mu = ~ int - slo * x + gap / (1 + x / sca), pmu = c(0,0))

Вывод:

Call:
bnlr(y = y_cbind, mu = ~int - slo * x + gap/(1 + x/sca), pmu = c(0, 
    0))

binomial distribution

Response: y_cbind 

Log likelihood function:
{
    m <- plogis(mu1(p))
    -sum(wt * (y[, 1] * log(m) + y[, 2] * log(1 - m)))
}

Location function:
~int - slo * x + gap/(1 + x/sca)

-Log likelihood    2.45656 
Degrees of freedom 8 
AIC                4.45656 
Iterations         8 

Location parameters:
     estimate      se
int    -1.077  0.8827
slo    -1.424  1.7763

Correlations:
       1      2
1 1.0000 0.1358
2 0.1358 1.0000

В случае gap и sca - это параметры:

## if gap and sca are parameters:
detach(dat)
set.seed(2)
dat <- data.frame(  x = rbinom(1000,1,0.3),
                    y = rbinom(1000,1,0.4))
y_cbind = cbind(dat$y, 1-dat$y)
attach(dat)
bnlr(y=y_cbind, mu = ~ int - slo * x + gap / (1 + x / sca), pmu = c(0,0,0,1))

Вывод:

Call:
bnlr(y = y_cbind, mu = ~int - slo * x + gap/(1 + x/sca), pmu = c(0, 
    0, 0, 1))

binomial distribution

Response: y_cbind 

Log likelihood function:
{
    m <- plogis(mu1(p))
    -sum(wt * (y[, 1] * log(m) + y[, 2] * log(1 - m)))
}

Location function:
~int - slo * x + gap/(1 + x/sca)

-Log likelihood    672.9106 
Degrees of freedom 996 
AIC                676.9106 
Iterations         7 

Location parameters:
     estimate      se
int  -0.22189  2.1007
slo   0.03828  3.6051
gap  -0.20273  2.0992
sca   0.99885  0.3956

Correlations:
          1       2        3       4
1    1.0000   1.859  -0.9993 -281.45
2    1.8587   1.000  -1.8592  -82.06
3   -0.9993  -1.859   1.0000  281.64
4 -281.4530 -82.061 281.6443    1.00
person swihart    schedule 01.08.2017