作者phil5566 (5566)
看板R_Language
标题[问题] boot函数和optim函数搭配使用的问题
时间Tue Jan 10 00:14:04 2017
[问题类型]:
程式谘询(我想用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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.8.250
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1483978448.A.5A4.html
1F:→ andrew43: 为什麽不写个 repeat loop 强迫 optim 直到收敛解? 01/10 01:29
2F:→ andrew43: 喔…你说了,因为初始值一样。 01/10 01:30
3F:→ andrew43: 如果我写,不一定要用boot()…写repeat loop直到有1000 01/10 01:31
4F:→ andrew43: 个收敛解才停就好了。 01/10 01:32
5F:→ phil5566: 那如果repeat loop强迫 optim 直到收敛解? 要怎麽做呢? 01/10 01:32
6F:→ andrew43: 不,而是用repeat()一直做bootstrapping,没收敛就放弃 01/10 01:34
7F:→ phil5566: 会用boot是因为我不写bootstrap抽样的code,恰好最复杂 01/10 01:34
8F:→ andrew43: 有收敛就存值,直到有1000个值。 01/10 01:34
9F:→ andrew43: 如果只是简单抽样,boot()就和sample(..., replace = T) 01/10 01:35
10F:→ andrew43: 差不多了。 01/10 01:35
11F:→ phil5566: 的部分已经有专家写好function了 01/10 01:35
12F:→ andrew43: 要抽x矩阵的列就是x[sample(nrow(x), replace = T), ] 01/10 01:37
13F:→ andrew43: 嗯…抱歉我只想到用repeat而不要用boot() 01/10 01:38
14F:→ x88776544pc: 加个 loop 看 boot 的结果长度差多少补到1000为止呢? 01/10 02:24
15F:推 f496328mm: 我做bootstrap,也是用sample,70% 01/10 02:48
16F:→ phil5566: @x88776544能否举个例子一下,没用过loop,不清楚如何使用 01/10 13:11
17F:→ phil5566: @f496328mm 70%的意思是什麽?是只有70%的结果接受,剩下 01/10 13:16
18F:→ phil5566: 30%直接舍弃吗?谢谢 01/10 13:17
19F:推 f496328mm: 因为boot就只是抽样,我是做个简单抽样 01/10 15:53
20F:→ f496328mm: 抽70%的比例下去做,我是做参数估计 01/10 15:54
21F:→ f496328mm: 可能要调整初始值之类吧,我之前没有收敛 01/10 15:55
22F:→ f496328mm: 会出现warning的讯息 01/10 15:55
23F:→ f496328mm: 初始值很机车,照理说,稳定的模型,初始值不会影响 01/10 15:56
25F:→ celestialgod: 用maxit去控制run太久没收敛的情况 01/10 21:40
26F:→ celestialgod: 用repeat去控制是否要纳入做sample 01/10 21:41
27F:→ celestialgod: > colMeans(bootRes) 01/10 21:47
28F:→ celestialgod: [1] -0.04095537 1.81222954 4.78904975 1.09382 01/10 21:47
29F:→ celestialgod: 189 5.13924189 01/10 21:47
30F:→ celestialgod: 执行时间:155.57 seconds 01/10 21:51
31F:→ celestialgod: 排版就自己调一下吧,有点难调XDD 01/10 21:53
32F:→ phil5566: 感谢各位大大的回答,我花个时间吸收一下,有问题再发问 01/11 13:05