2016-12-19 22 views
5

"Aşağıdaki uyarıları görüyorum. Uygunluğun işe yaramış olmasına rağmen neden böyle uyarılar olduğunu bilen var mı? Optimizasyonu daha iyi hale getirmenin herhangi bir yolu var mı? Bu uyarıları üretmeyecek?dbeta ile fitdistr() uyarısı: "Densfun (x, parm [1], parm [2], ...): NaN'ler"

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) 

cevap

4

sorun fitdistr pozitif olduğu şekil ve ölçek sınırlamak olmamasıdır.

library(MASS) 
set.seed(0) 
x <- rbeta(1000, shape1=1, shape2=1) 
f1 <- fitdistr(x, dbeta, list(shape1=1,shape2=1)) 

optimizasyon algoritması sınırında değil ekonomik bir çözüm yolunda bazı elverişsiz parametre değerlerini çalışırsa Genellikle sorun değil, ama mümkün uyarıları önlemek için denemek için daha iyi edersiniz.

Sen alt sınırlarıyla kendini belirtebilirsiniz:

...: ya ‘densfun’ için ya da ‘Optim’ için Ek parametreler. Özellikle, "alt" veya "üst" veya her ikisi arasındaki sınırları belirtmek için kullanılabilir.

f2 <- fitdistr(x, dbeta, list(shape1=1,shape2=1), 
       lower=c(0,0)) 

(uyarı). Cevaplar tam olarak aynı değildir, ancak çok yakındırlar (bu sayısal optimizasyon sonuçlarından beklenir).

all.equal(coef(f1),coef(f2),tol=1e-6)