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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。