R模拟研究中的最大似然估计

时间:2018-10-25 12:31:57

标签: r statistics simulation mle

我从分布中生成10000个值,并保存在对象val_1中。然后我将val_1保存在对象pop中。
然后,在没有抽样的情况下,估计重新抽样研究中相同分布的参数。 迭代5000和样本大小100。下面的代码给出了以下错误:

Error in optim(par = starts, fn = likelihood, x = data, method = "BFGS",  : 
non-finite finite-difference value [1]
In addition:   
There were 50 or more warnings (use warnings() to see the first 50)

我的代码:

set.seed(83)
pop <- val_1
head(pop)
sam.size <- 100
sam <- sample(pop, sam.size, replace = T)
length(sam)
nsims <- 5000
bs <-array(0,dim=c(nsims ,4))
for(i in 1:nsims)  {   #bs sims
    bs.sam.ind <- sample(1:sam.size, sam.size, replace = T)
    repest<- (goodness.fit(pdf = pdf_ngexp , cdf = cdf_ngexp,
    starts = c(1,1,1,1), sam[bs.sam.ind], method = "BFGS",
    domain = c(0,Inf),mle = NULL, lim_inf = c(0,0,0,0),
    lim_sup = c(2,2,2,2), S = 250, prop=0.1, N=50))
    bs[i,] <-  repest$mle
     }
    head(bs);tail(bs) 
   > head(bs)
      [,1]      [,2]     [,3]     [,4]
[1,] 1.3047830 2.0713999 1.615993 1.953030
[2,] 0.3889123 0.1611767 6.671304 4.033765
[3,] 0.7419812 0.7278994 2.856462 3.914601
[4,] 0.6067144 0.1701769 2.512169 3.086249
[5,] 0.9250573 1.1543839 3.925454 9.867746
[6,] 0.4469384 0.1334538 4.648391 4.711571
 > tail(bs)
    [,1] [,2] [,3] [,4]
[4995,]    0    0    0    0
[4996,]    0    0    0    0
[4997,]    0    0    0    0
[4998,]    0    0    0    0
[4999,]    0    0    0    0
[5000,]    0    0    0    0

1 个答案:

答案 0 :(得分:0)

我们没有您的数据,因此我们无法重现该错误。但是,这是调试此类问题的一般方法:

  • 保存触发错误的数据集。它可能仍在循环中构造的变量中。如果不是,则将打印消息添加到循环中,以便您找出导致它的迭代,再次运行,然后在不良迭代处停止。 (最好有set.seed(83);如果没有set.seed(),这一步可能很难。)

  • 确认从错误数据集开始,您仍然遇到相同的错误。希望它不会是随机的。

  • 现在,使用错误的数据集,尝试直接在该数据集上调试goodness.fit。为此,请调用debug(goodness.fit),然后从循环中重复该调用。查找该函数中的哪个语句失败,然后重复此过程: 保存发送给它的所有数据,确认错误是可重现的,等等。

  • 在某些时候,您将把错误缩小到其原因。然后,您需要确定它是由代码中的错误,程序包代码中的错误引起的,还是不可避免的。