我想在這裏做的第一件事就是看看這些控件:
nlmeControl()
# this gives in my case the following settings
$maxIter
[1] 50
$pnlsMaxIter
[1] 7
$msMaxIter
[1] 50
$minScale
[1] 0.001
$tolerance
[1] 1e-05
$niterEM
[1] 25
$pnlsTol
[1] 0.001
$msTol
[1] 1e-06
$returnObject
[1] FALSE
$msVerbose
[1] FALSE
$gradHess
[1] TRUE
$apVar
[1] TRUE
$.relStep
[1] 6.055454e-06
$minAbsParApVar
[1] 0.05
$opt
[1] "nlminb"
$natural
[1] TRUE
$sigma
[1] 0
我沒有看過任何文件,但你至少可以運行以下命令以獲得更好的線索情況:
# using additional controls list argument
fm1 <- nlme(
height ~ SSasymp(age, Asym, R0, lrc),
data = Loblolly,
fixed = Asym + R0 + lrc ~ 1,
random = Asym ~ 1,
start = c(Asym = -10311111, R0 = 8.5^4, lrc = 0.01),
control = list(opt = "nlm", msVerbose = 2, msTol = 1e-06),
verbose = TRUE
)
這將打印輸出你的每一次迭代,最後:
# ............
iteration = 9
Parameter:
[1] 7.180326
Function Value
[1] 379.1821
Gradient:
[1] -4.212256e-05
Relative gradient close to zero.
Current iterate is probably solution.
**Iteration 1
LME step: Loglik: -312.2787, nlm iterations: 9
reStruct parameters:
Seed
7.180326
Error in nlme.formula(height ~ SSasymp(age, Asym, R0, lrc), data = Loblolly, :
Singularity in backsolve at level 0, block 1
也許你想修改msTol
或其他控件。需要注意的是nlm
允許返回麻袋也一樣,如果我打印,我得到:
$hessian
[,1]
[1,] 8.478483e-05
如果你想知道我是怎麼印,就我而言,我的編輯nlme.formula
和分配我的新版本被調用函數的粗麻布nlme.formula_new
,我再插回nlme
:
godmode:::assignAnywhere("nlme.formula", nlme.formula_new)
godmode
是在Github上,但肯定還有其他的方式來實現這一目標。