看板 R_Language 關於我們 聯絡資訊
[問題類型]: 程式諮詢(我想用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
andrew43: 為什麼不寫個 repeat loop 強迫 optim 直到收斂解? 01/10 01:29
andrew43: 喔…你說了,因為初始值一樣。 01/10 01:30
andrew43: 如果我寫,不一定要用boot()…寫repeat loop直到有1000 01/10 01:31
andrew43: 個收斂解才停就好了。 01/10 01:32
phil5566: 那如果repeat loop強迫 optim 直到收斂解? 要怎麼做呢? 01/10 01:32
andrew43: 不,而是用repeat()一直做bootstrapping,沒收斂就放棄 01/10 01:34
phil5566: 會用boot是因為我不寫bootstrap抽樣的code,恰好最複雜 01/10 01:34
andrew43: 有收斂就存值,直到有1000個值。 01/10 01:34
andrew43: 如果只是簡單抽樣,boot()就和sample(..., replace = T) 01/10 01:35
andrew43: 差不多了。 01/10 01:35
phil5566: 的部分已經有專家寫好function了 01/10 01:35
andrew43: 要抽x矩陣的列就是x[sample(nrow(x), replace = T), ] 01/10 01:37
andrew43: 嗯…抱歉我只想到用repeat而不要用boot() 01/10 01:38
x88776544pc: 加個 loop 看 boot 的結果長度差多少補到1000為止呢? 01/10 02:24
f496328mm: 我做bootstrap,也是用sample,70% 01/10 02:48
phil5566: @x88776544能否舉個例子一下,沒用過loop,不清楚如何使用 01/10 13:11
phil5566: @f496328mm 70%的意思是什麼?是只有70%的結果接受,剩下 01/10 13:16
phil5566: 30%直接捨棄嗎?謝謝 01/10 13:17
f496328mm: 因為boot就只是抽樣,我是做個簡單抽樣 01/10 15:53
f496328mm: 抽70%的比例下去做,我是做參數估計 01/10 15:54
f496328mm: 可能要調整初始值之類吧,我之前沒有收斂 01/10 15:55
f496328mm: 會出現warning的訊息 01/10 15:55
f496328mm: 初始值很機車,照理說,穩定的模型,初始值不會影響 01/10 15:56
celestialgod: http://pastebin.com/ysWHJGAU 稍微改一下 01/10 21:38
celestialgod: 用maxit去控制run太久沒收斂的情況 01/10 21:40
celestialgod: 用repeat去控制是否要納入做sample 01/10 21:41
celestialgod: > colMeans(bootRes) 01/10 21:47
celestialgod: [1] -0.04095537 1.81222954 4.78904975 1.09382 01/10 21:47
celestialgod: 189 5.13924189 01/10 21:47
celestialgod: 執行時間:155.57 seconds 01/10 21:51
celestialgod: 排版就自己調一下吧,有點難調XDD 01/10 21:53
phil5566: 感謝各位大大的回答,我花個時間吸收一下,有問題再發問 01/11 13:05