[問題] 可靠度分析求 tp 值

作者: strp (GlRoEvEeN)   2017-05-03 14:49:50
[問題類型]:
程式諮詢(我想用 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
再麻煩各位版友抽空解惑,萬分感謝。
作者: a78998042a (Benjimine)   2017-05-04 00:16:00
step1:看下來意思是假設資料是gamma,然後估計他若是gamma的參數,再用給定估計參計下的gamma以有母數booststrap生成資料step2:透過某個model估計出MLE(是gamma的likelihood ?step3:optim先不論理解正確與否,但下面寫說,這個過程沒問題,有問題的是程式的輸出結果,不過沒有 真實資料 跟假定model應該沒有辦法重現你的問題?還是請直接提供整個程式?能重現錯誤也不會理解錯誤?
作者: x88776544pc (龍飛五丈原)   2017-05-04 00:41:00
從 NA 來猜的話,那 62 個 a 是負的嗎?
作者: a78998042a (Benjimine)   2017-05-04 13:29:00
你好,謝謝補充,因為沒有足夠重現現象的條件,而過程看起來沒有錯誤,只能猜測一下。懷疑是,你生成的過程是否沒有setseed(set.seed(100))導致你重覆驗證時,其實是用不同的估計值,所以有了錯誤的誤解?(會這樣懷疑是因為上面寫,NA""大約""有62),是否先將bh做成一個matrix,將所有結果存下來,再重新進行驗證?
作者: x88776544pc (龍飛五丈原)   2017-05-04 15:22:00
如果 code 都沒問題,即迴圈中沒有一次符合 if 條件你可以試試用 min 取代 <0.000001 去驗證
作者: a78998042a (Benjimine)   2017-05-04 16:44:00
seed是加在整個loop外部,所以每次生成的資料仍不同,目的是重現相同結果。

Links booklink

Contact Us: admin [ a t ] ucptt.com