nlminb
位于 stats
包(package)。 说明
使用 PORT 例程进行无约束和框约束优化。
为了历史兼容性。
用法
nlminb(start, objective, gradient = NULL, hessian = NULL, ...,
scale = 1, control = list(), lower = -Inf, upper = Inf)
参数
start |
数值向量,要优化的参数的初始值。 |
objective |
要最小化的函数。必须返回标量值。 |
gradient |
可选函数,采用与 |
hessian |
可选函数,采用与 |
... |
要提供给 |
scale |
请参阅 PORT 文档(或不理会)。 |
control |
控制参数列表。详情请参阅下文。 |
lower, upper |
下限和上限向量,复制为与 |
细节
start
的任何名称都会传递给 objective
以及 gradient
和 hessian
(如果适用)。参数向量将被强制加倍。
如果任何函数返回 NA
或 NaN
,则这是梯度和 Hessian 的错误,并且函数评估的此类值将替换为 +Inf
并带有警告。
值
包含组件的列表:
par |
找到的最佳参数集。 |
objective |
|
convergence |
整数代码。 |
message |
给出优化器返回的任何附加信息的字符串,或 |
iterations |
执行的迭代次数。 |
evaluations |
目标函数和梯度函数评估的数量 |
控制参数
control
列表中可能的名称及其默认值是:
eval.max
-
允许的目标函数评估的最大数量。默认为 200。
iter.max
-
允许的最大迭代次数。默认为 150。
trace
-
每次跟踪迭代都会打印目标函数和参数的值。默认为 0,表示不打印跟踪信息。
abs.tol
-
绝对的宽容。默认为 0,因此不使用绝对收敛测试。如果已知目标函数是非负的,则之前的默认值
1e-20
会更合适。
rel.tol
-
相对耐受性。默认为
1e-10
。
x.tol
-
X 公差。默认为
1.5e-8
。
xf.tol
-
错误收敛容限。默认为
2.2e-14
。
step.min, step.max
-
最小和最大步长。两者都默认为
1.
。
- sing.tol
-
奇异收敛容差;默认为
rel.tol
。
- scale.init
-
...
- diff.g
-
目标函数值相对误差的估计界限。
例子
x <- rnbinom(100, mu = 10, size = 10)
hdev <- function(par)
-sum(dnbinom(x, mu = par[1], size = par[2], log = TRUE))
nlminb(c(9, 12), hdev)
nlminb(c(20, 20), hdev, lower = 0, upper = Inf)
nlminb(c(20, 20), hdev, lower = 0.001, upper = Inf)
## slightly modified from the S-PLUS help page for nlminb
# this example minimizes a sum of squares with known solution y
sumsq <- function( x, y) {sum((x-y)^2)}
y <- rep(1,5)
x0 <- rnorm(length(y))
nlminb(start = x0, sumsq, y = y)
# now use bounds with a y that has some components outside the bounds
y <- c( 0, 2, 0, -2, 0)
nlminb(start = x0, sumsq, lower = -1, upper = 1, y = y)
# try using the gradient
sumsq.g <- function(x, y) 2*(x-y)
nlminb(start = x0, sumsq, sumsq.g,
lower = -1, upper = 1, y = y)
# now use the hessian, too
sumsq.h <- function(x, y) diag(2, nrow = length(x))
nlminb(start = x0, sumsq, sumsq.g, sumsq.h,
lower = -1, upper = 1, y = y)
## Rest lifted from optim help page
fr <- function(x) { ## Rosenbrock Banana function
x1 <- x[1]
x2 <- x[2]
100 * (x2 - x1 * x1)^2 + (1 - x1)^2
}
grr <- function(x) { ## Gradient of 'fr'
x1 <- x[1]
x2 <- x[2]
c(-400 * x1 * (x2 - x1 * x1) - 2 * (1 - x1),
200 * (x2 - x1 * x1))
}
nlminb(c(-1.2,1), fr)
nlminb(c(-1.2,1), fr, grr)
flb <- function(x)
{ p <- length(x); sum(c(1, rep(4, p-1)) * (x - c(1, x[-p])^2)^2) }
## 25-dimensional box constrained
## par[24] is *not* at boundary
nlminb(rep(3, 25), flb, lower = rep(2, 25), upper = rep(4, 25))
## trying to use a too small tolerance:
r <- nlminb(rep(3, 25), flb, control = list(rel.tol = 1e-16))
stopifnot(grepl("rel.tol", r$message))
作者
R port: Douglas Bates and Deepayan Sarkar.
Underlying Fortran code by David M. Gay
来源
参考
David M. Gay (1990), Usage summary for selected optimization routines. Computing Science Technical Report 153, AT&T Bell Laboratories, Murray Hill.
也可以看看
optimize
用于一维最小化,constrOptim
用于约束优化。
相关用法
- R nlm 非线性最小化
- R nls.control 控制 nls 中的迭代
- R nls 非线性最小二乘法
- R naprint 调整缺失值
- R na.fail 处理对象中的缺失值
- R na.contiguous 查找非 NA 的最长连续延伸
- R nobs 从拟合中提取观测值数量
- R nextn 查找高度复合的数字
- R numericDeriv 用数值方法评估导数
- R na.action 不适用行动
- R naresid 调整缺失值
- R stlmethods STL 对象的方法
- R medpolish 矩阵的中值波兰(稳健双向分解)
- R summary.nls 总结非线性最小二乘模型拟合
- R summary.manova 多元方差分析的汇总方法
- R formula 模型公式
- R aggregate 计算数据子集的汇总统计
- R deriv 简单表达式的符号和算法导数
- R kruskal.test Kruskal-Wallis 秩和检验
- R quade.test 四方测试
- R decompose 移动平均线的经典季节性分解
- R plot.stepfun 绘制阶跃函数
- R alias 查找模型中的别名(依赖项)
- R qqnorm 分位数-分位数图
- R eff.aovlist 多层方差分析的计算效率
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Optimization using PORT routines。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。