作者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/m.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