作者f496328mm (为什麽会流泪)
看板R_Language
标题Re: [问题] boot函数和optim函数搭配使用的问题
时间Tue Jan 10 16:07:43 2017
※ 引述《phil5566 (5566)》之铭言:
: [问题类型]:
: 程式谘询(我想用R 做某件事情,但是我不知道要怎麽用R 写出来)
: [软体熟悉度]:
: 新手
: [问题叙述]:
: 就是关於在R上用bootstrap这个统计方法时,
: 我会用boot这个function,而这个boot(),
: 括弧里我只要给
: 1.T(假设T是data所形成的矩阵资料形式),
: 2.statistic(是自己定义的一个函数,用来计算原始dataT,bootstrapp後的资料,所要计算
: 出统计量的数学式子)
: 3.R (要bootstrap的次数)
: 假设上述的第2点statistic的部分
: 我是自己定义一个函数叫"theta.boot",
: 这个函数运算过程会使用到optim()这个function,
: 但optim()运算出的结果会有"$par"和"$convergence"的这两部分
: 我希望convergence=0的情形时,此时$par的解才是我想要的
: 简单说就是我希望算出的解"要收敛"
: ...................问题来了........................,
: 每bootstrap一次,当下那一次bootstrap过後的data是固定的,代入theta.boot运算,
: 由於给optim()设的初始值也是固定的,所以算出最後的解也是固定的,
: 然而这个解可能是收敛也可能不收敛,又我设定bootstrap1000次,
: 势必这1000个解中有收敛也有没收敛的,我希望要有1000个收敛解,要怎麽做到?
: 在程式范例中附上code
: 求各位大大 高手 先进 解答~感激不尽~
: [程式范例]:
: http://codepad.org/ongXCSxq
: [环境叙述]:
: win7,
: R x64 3.3.1,
: "boot"package
: [关键字]:
: boot,optim
你试试看这个 optimx
optimx(par, fn, gr=NULL, hess=NULL, lower=-Inf, upper=Inf,
method=c("Nelder-Mead","BFGS"), itnmax=NULL, hessian=FALSE,
control=list(),
...)
optim(par, fn, gr = NULL, ...,
method = c("Nelder-Mead", "BFGS", "CG", "L-BFGS-B", "SANN",
"Brent"),
lower = -Inf, upper = Inf,
control = list(), hessian = FALSE)
看起来是一样的
不过 optimx 有itnmax,你可以调最大迭代次数,调到你能收敛为止,
给他500 or 5000看看,
如果还是不行收敛,可能就要调整抽样比例,或是你的data or model有问题
如果不收敛的情况下,结果差异不大,那其实就不太需要conv了
---------------------------------------------------------------
最简单的方法就是,你做2000次,取1000次有收敛的结果,
不过这有没有问题,就不清楚了,这样做其实并不算单纯的抽样,
这样做,等於是把不好的抽样结果舍弃,如果是写文章,要稍微提一下
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 134.208.26.172
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1484035666.A.0DC.html
※ 编辑: f496328mm (134.208.26.172), 01/10/2017 16:11:21
1F:→ celestialgod: optim的control也可以maxit 01/10 20:40
2F:→ celestialgod: optimx应该只是提供的method比较多 01/10 20:41
3F:推 phil5566: 赞赞赞~我再来试试看 01/11 13:07
4F:推 phil5566: 谢谢f大提醒 01/11 17:23
5F:推 phil5566: 也谢谢celestialgod的帮忙,真的学到蛮多的 01/11 17:25
6F:→ phil5566: ^大大 01/11 17:26