2017-04-24 6 views
0

J'essaie d'obtenir des estimations plus précises (jusqu'à 6 décimales) de x[1] et x[2] dans ma fonction appelée GGG. En utilisant optim, j'obtiens quelques précisions jusqu'à 3 décimales, mais je me demande comment je peux améliorer la précision jusqu'à au moins 6 décimales?sont nlm() ou optimiser() plus précis que optim() dans R

Peut-on utiliser optimize et nlm pour cet objectif?

GGG = function(Low, High, p1, p2) { 


f <- function(x) { 

y <- c(Low, High) - qcauchy(c(p1, p2), location=x[1], scale=x[2]) 

} 


## SOLVE: 
AA <- optim(c(1,1), function(x) sum(f(x)^2)) 

## return parameters: 
parms = unname(AA$par) 


return(parms)  ## Correct but up to 3 decimal places 

} 

## TEST: 
AAA <- GGG (Low = -3, High = 3, p1 = .025, p2 = .975) 


## CHECK: 
q <- qcauchy(c(.025, .975), AAA[1], AAA[2]) # What comes out of "q" MUST match "Low" and 
               # "High" up to 6 decimal places 

Répondre

1

La fonction optim a un paramètre de contrôle de tolérance. Remplacez votre fonction optim avec ceci:

AA <- optim(c(1,1), function(x) sum(f(x)^2), control=list(reltol=(.Machine$double.eps))) 

Retours:

> q 
[1] -3 3 
> AAA 
[1] 5.956798e-08 2.361051e-01 
+0

thc Cher, je vous remercie beaucoup. Puis-je vous demander de bien vouloir réviser votre réponse [** ICI **] (http://stackoverflow.com/questions/43286436/using-optimize-to-find-the-shortest-interval-that-takes-95- area-under-a-curve) donc la fonction [** THERE **] (http://stackoverflow.com/questions/43286436/using-optimize-to-find-the-shortest-interval-that-takes-95 -area-under-a-curve) fonctionne dans toutes les situations sans besoin de *** manuellement *** ajuster l'intervalle? – rnorouzian