我看到以下警告。有没有人知道为什么有这样的警告,尽管适合似乎工作正常?有没有办法让优化工作更好,以免产生这些警告?
R> library(MASS)
R> set.seed(0)
R> x=rbeta(1000, shape1=1, shape2=1)
R> fitdistr(x, dbeta, list(shape1=1,shape2=1))
shape1 shape2
1.00959537 0.99603351
(0.04183720) (0.04116276)
Warning messages:
1: In densfun(x, parm[1], parm[2], ...) : NaNs produced
2: In densfun(x, parm[1], parm[2], ...) : NaNs produced
R> x=rbeta(1000, shape1=10, shape2=10)
R> fitdistr(x, dbeta, list(shape1=1,shape2=1))
shape1 shape2
8.5038157 8.5794416
(0.3749814) (0.3784147)
答案 0 :(得分:6)
问题是fitdistr
不会将形状和比例限制为正。
library(MASS)
set.seed(0)
x <- rbeta(1000, shape1=1, shape2=1)
f1 <- fitdistr(x, dbeta, list(shape1=1,shape2=1))
如果优化算法在通往不在边界上的可行解决方案的路上尝试了一些不可行的参数值,那么通常不是问题,但我同意尽可能避免警告更好
您可以自己指定下限:
...:附加参数,可以是'densfun'或'optim'。特别是,它可以用于通过'lower'或'upper'或两者来指定边界。
f2 <- fitdistr(x, dbeta, list(shape1=1,shape2=1),
lower=c(0,0))
(没有警告)。答案并不完全相同,但它们非常接近(这可以从数值优化结果中得到预期)。
all.equal(coef(f1),coef(f2),tol=1e-6)