看板 R_Language 關於我們 聯絡資訊
※ 引述《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://www.ptt.cc/bbs/R_Language/M.1484035666.A.0DC.html ※ 編輯: f496328mm (134.208.26.172), 01/10/2017 16:11:21
celestialgod: optim的control也可以maxit 01/10 20:40
celestialgod: optimx應該只是提供的method比較多 01/10 20:41
phil5566: 讚讚讚~我再來試試看 01/11 13:07
phil5566: 謝謝f大提醒 01/11 17:23
phil5566: 也謝謝celestialgod的幫忙,真的學到蠻多的 01/11 17:25
phil5566: ^大大 01/11 17:26