试试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