[問題類型]:
程式諮詢(我想用 R 做某件事情,程式已經寫完了!但有一小部分覺得很奇怪)
[軟體熟悉度]:
入門(寫過其他程式,只是對語法不熟悉)
[問題敘述]:
我的目的是利用 for 迴圈,找出符合設定式子的 tp 值
p 可以是 0.01, 0.05, 0.1, 0.5,所以會有 t0.01, t0.05, t0.1, t0.5 四個結果
因為只有 t0.5 的部分會出問題,所以以下僅針對 t0.5 來做書寫
式子如下:
(其中 q, a, b 均為 MLE,且為已知)
tp0.5 <- NULL
for (tp in 1:1400000) {
if ( abs( pgamma(q, a*(tp*0.0000001)^b, rate = 1) -0.5 ) <= 0.000001 ) {
tp0.5 <- tp*0.0000001
}
}
tp 會設計成這樣,主要是把區間割的細一點,讓 pgamma 的值逐漸變大
大到與 0.5 的誤差小於等於 0.000001 時,輸出該 tp*0.0000001 值
就可以算出 t0.5 了!
以上單獨的求法是不會有問題的,可以算出 t0.5
但我真正想求的,是透過 1000 次 Bootstrap,來得到 t0.5 的信賴區間
每一次 Bootstrap 的步驟如下
Step1:用真實資料的 MLE 去生成一筆資料 (其中 MLE 已知)
Step2:再利用 Step1 生成的資料,透過我的模型,去估計 MLE*
Step3:利用 Step2 的 MLE* 去算 t0.5 (然後蓋到迴圈外的 NULL 向量去)
所以當 Bootstrap 跑完後,會得到 1000 個 t0.5
使用的程式與以上範例相同,僅修改迴圈內的名稱而已
但是!!!
最後發現...這 1000 個 t0.5 裡面,有些值是 NA (大約有 62 個)
也就是,那幾次迴圈內,並沒有求出 t0.5
我有將這些產生 NA 的 MLE* 抓出來看,都沒有問題,都有值
然後再利用這些 MLE* 重新在用上面提供的程式去計算 t0.5,發現還是求不出來
但奇怪的是,如果我不用迴圈條件去逼近 t0.5,而是單純直接給定 tp
卻都算得出來,因為我們想要的 t0.5 會在 0.11~0.13 之間
這區間內大大小小的值我都給過了,都滿 ok 的
但是在 Bootstrap 迴圈下就是求不出來!這讓我匪夷所思
[程式範例]:
如同以上例子提供,只是該程式會放在 Bootstrap 迴圈內
[環境敘述]:
與此問題無關
[關鍵字]:
tp, t0.5, Bootstrap, MLE
再麻煩各位版友抽空解惑,萬分感謝。