[问题类型]:
程式咨询(我想用 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
再麻烦各位版友抽空解惑,万分感谢。