[問題] boot函數和optim函數搭配使用的問題

看板R_Language作者 (5566)時間7年前 (2017/01/10 00:14), 編輯推噓2(2030)
留言32則, 5人參與, 最新討論串1/2 (看更多)
[問題類型]: 程式諮詢(我想用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://www.ptt.cc/bbs/R_Language/M.1483978448.A.5A4.html

01/10 01:29, , 1F
為什麼不寫個 repeat loop 強迫 optim 直到收斂解?
01/10 01:29, 1F

01/10 01:30, , 2F
喔…你說了,因為初始值一樣。
01/10 01:30, 2F

01/10 01:31, , 3F
如果我寫,不一定要用boot()…寫repeat loop直到有1000
01/10 01:31, 3F

01/10 01:32, , 4F
個收斂解才停就好了。
01/10 01:32, 4F

01/10 01:32, , 5F
那如果repeat loop強迫 optim 直到收斂解? 要怎麼做呢?
01/10 01:32, 5F

01/10 01:34, , 6F
不,而是用repeat()一直做bootstrapping,沒收斂就放棄
01/10 01:34, 6F

01/10 01:34, , 7F
會用boot是因為我不寫bootstrap抽樣的code,恰好最複雜
01/10 01:34, 7F

01/10 01:34, , 8F
有收斂就存值,直到有1000個值。
01/10 01:34, 8F

01/10 01:35, , 9F
如果只是簡單抽樣,boot()就和sample(..., replace = T)
01/10 01:35, 9F

01/10 01:35, , 10F
差不多了。
01/10 01:35, 10F

01/10 01:35, , 11F
的部分已經有專家寫好function了
01/10 01:35, 11F

01/10 01:37, , 12F
要抽x矩陣的列就是x[sample(nrow(x), replace = T), ]
01/10 01:37, 12F

01/10 01:38, , 13F
嗯…抱歉我只想到用repeat而不要用boot()
01/10 01:38, 13F

01/10 02:24, , 14F
加個 loop 看 boot 的結果長度差多少補到1000為止呢?
01/10 02:24, 14F

01/10 02:48, , 15F
我做bootstrap,也是用sample,70%
01/10 02:48, 15F

01/10 13:11, , 16F
@x88776544能否舉個例子一下,沒用過loop,不清楚如何使用
01/10 13:11, 16F

01/10 13:16, , 17F
@f496328mm 70%的意思是什麼?是只有70%的結果接受,剩下
01/10 13:16, 17F

01/10 13:17, , 18F
30%直接捨棄嗎?謝謝
01/10 13:17, 18F

01/10 15:53, , 19F
因為boot就只是抽樣,我是做個簡單抽樣
01/10 15:53, 19F

01/10 15:54, , 20F
抽70%的比例下去做,我是做參數估計
01/10 15:54, 20F

01/10 15:55, , 21F
可能要調整初始值之類吧,我之前沒有收斂
01/10 15:55, 21F

01/10 15:55, , 22F
會出現warning的訊息
01/10 15:55, 22F

01/10 15:56, , 23F
初始值很機車,照理說,穩定的模型,初始值不會影響
01/10 15:56, 23F

01/10 21:38, , 24F
01/10 21:38, 24F

01/10 21:40, , 25F
用maxit去控制run太久沒收斂的情況
01/10 21:40, 25F

01/10 21:41, , 26F
用repeat去控制是否要納入做sample
01/10 21:41, 26F

01/10 21:47, , 27F
> colMeans(bootRes)
01/10 21:47, 27F

01/10 21:47, , 28F
[1] -0.04095537 1.81222954 4.78904975 1.09382
01/10 21:47, 28F

01/10 21:47, , 29F
189 5.13924189
01/10 21:47, 29F

01/10 21:51, , 30F
執行時間:155.57 seconds
01/10 21:51, 30F

01/10 21:53, , 31F
排版就自己調一下吧,有點難調XDD
01/10 21:53, 31F

01/11 13:05, , 32F
感謝各位大大的回答,我花個時間吸收一下,有問題再發問
01/11 13:05, 32F
文章代碼(AID): #1OSxRGMa (R_Language)
文章代碼(AID): #1OSxRGMa (R_Language)