2016-12-19 8 views
5

Widzę następujące ostrzeżenia. Czy ktoś wie, dlaczego istnieją takie ostrzeżenia, mimo że dopasowanie wydaje się działać poprawnie? Czy jest jakiś sposób, aby optymalizacja działała lepiej, tak aby nie generowała tych ostrzeżeń?Ostrzeżenie fitdistr() z dbeta: "In densfun (x, parm [1], parm [2], ...): NaNs produce"

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) 

Odpowiedz

4

Problemem jest to, że fitdistr nie ogranicza kształt i skalę będzie pozytywny.

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

Jest zwykle nie problem, jeśli algorytm optymalizacji próbuje jakieś nieosiągalne wartości parametrów na drodze do możliwego rozwiązania, które nie znajduje się na granicy, ale zgadzam się, że lepiej jest unikać ostrzeżenia, jeśli możliwe.

Można określić dolną granicę siebie:

...: Dodatkowe parametry, zarówno dla „densfun” lub do „Optim”. W szczególności może być użyty do określenia granic przez "niższy" lub "górny" lub oba.

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

(żadne ostrzeżenia). Odpowiedzi nie są identyczne, ale są bardzo bliskie (można się tego spodziewać na podstawie wyników optymalizacji numerycznej).

all.equal(coef(f1),coef(f2),tol=1e-6) 
Powiązane problemy