2012-02-17 2 views
0

do.call을 시도하고 적용했지만 plyr 패키지를 사용했지만 여전히 좋지 않은 nlminb 대답이있었습니다. 그래서 나는 모든 제안을하기 위해 당신에게로 향했다.여러 개의 시작 값을 nlminb에 전달

나는 다음과 같은 기능을 만들었습니다

calloptim <- function(under,strike, rf, ttoe,par) {(-(under*par[1] 
    -strike*exp(-rf*ttoe)*par[2]))^2} 

을 한 후 일정한 다른 인수를 누른 상태에서 파를 추정하는 nlminb을 사용 :

nlminb(c(2,2), calloptim, under= 90, strike = 100, rf =0.05, ttoe=3) 

산출되는 :

$par 
[1] 1.953851 2.043045 

$objective 
[1] 1.335531e-17 

$convergence 
[1] 0 

$iterations 
[1] 4 

$evaluations 
function gradient 
     6  10 

$message 
[1] "X-convergence (3)" 

다른 시작 값을 입력하면 예 :

nlminb(c(5,5), calloptim, under= 90, strike = 100, rf =0.05, ttoe=3) 

나는 다른 추정치를 얻을 :

$par 
[1] 4.885987 5.109036 

$objective 
[1] 2.464145e-14 

$convergence 
[1] 1 

$iterations 
[1] 2 

$evaluations 
function gradient 
     33  4 

$message 
[1] "false convergence (8)" 

그리고 확인을 먹으 렴! 나는 수학적으로 무슨 일이 일어나는지 이해한다. 사실 다른 시작 값을 사용하고 싶습니다.

nlminb에 여러 시작 값을 전달하려고하면 내 문제가 발생합니다.

나는 매트릭스 작성 :

f<- c(2,5,2,5) 
dim(f) <- c(2,2) 

> f 
    [,1] [,2] 
[1,] 2 2 
[2,] 5 5 

을하지만 nlminb의 시작 값에 f를 통과 할 때

nlminb(f, calloptim, under= 90, strike = 100, rf =0.05, ttoe=3) 

내가 얻을 :

$par 
[1] 3.452902 3.610530 2.000000 5.000000 

$objective 
[1] 3.010198e-19 

$convergence 
[1] 0 

$iterations 
[1] 4 

$evaluations 
function gradient 
     22  24 

$message 
[1] "X-convergence (3)" 

그래서 제 질문은 내가 통과 할 수있는 방법입니다 nlminb에 시작 값의 여러 행?

의견을 보내 주셔서 감사합니다. ?nlminb 이후

라이

답변

3

는 첫 번째 인수가 숫자 벡터해야 말한다, 당신은 당신의 매트릭스 f의 각 행에 apply에게 필요.

out <- apply(f, 1, nlminb, objective=calloptim, under=90, strike=100, rf=0.05, ttoe=3) 

str(out) 

List of 2 
$ :List of 6 
    ..$ par  : num [1:2] 1.95 2.04 
    ..$ objective : num 1.34e-17 
    ..$ convergence: int 0 
    ..$ iterations : int 4 
    ..$ evaluations: Named int [1:2] 6 10 
    .. ..- attr(*, "names")= chr [1:2] "function" "gradient" 
    ..$ message : chr "X-convergence (3)" 
$ :List of 6 
    ..$ par  : num [1:2] 4.89 5.11 
    ..$ objective : num 2.46e-14 
    ..$ convergence: int 1 
    ..$ iterations : int 2 
    ..$ evaluations: Named int [1:2] 33 4 
    .. ..- attr(*, "names")= chr [1:2] "function" "gradient" 
    ..$ message : chr "false convergence (8)" 
관련 문제