我从分布中生成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
答案 0 :(得分:0)
我们没有您的数据,因此我们无法重现该错误。但是,这是调试此类问题的一般方法:
保存触发错误的数据集。它可能仍在循环中构造的变量中。如果不是,则将打印消息添加到循环中,以便您找出导致它的迭代,再次运行,然后在不良迭代处停止。 (最好有set.seed(83)
;如果没有set.seed()
,这一步可能很难。)
确认从错误数据集开始,您仍然遇到相同的错误。希望它不会是随机的。
现在,使用错误的数据集,尝试直接在该数据集上调试goodness.fit
。为此,请调用debug(goodness.fit)
,然后从循环中重复该调用。查找该函数中的哪个语句失败,然后重复此过程:
保存发送给它的所有数据,确认错误是可重现的,等等。
在某些时候,您将把错误缩小到其原因。然后,您需要确定它是由代码中的错误,程序包代码中的错误引起的,还是不可避免的。