2009-11-18 7 views
0

나는 프로그램을 디버깅하는 데 도움이되지 않을지 모르겠다.하지만이 간단한 코드에 하루 반을 보내고 아이디어가 부족하다. 첫 번째 인수와 관련하여 "log.pr.data"라는 함수를 최적화하려고합니다.R 함수를 통한 함수 인수 전달

최적화 기능을 사용하려면 nlm을 사용하기로 결정한 인수에 경계를 설정해야하기 때문에 시작 지점 만 있으면됩니다. nlm이 인수를 함수로 전달할 수있는 간단한 예제를 살펴 보았습니다. 내 문제는이 특정 경우 인수를 함수로 전달할 수 없다는 것입니다.

그래서 여기에 목적 함수 (두 가지 인쇄 진단 기능 포함)가 있습니다. 나는 인수 λ에 관하여 그것을 최대화하고 싶다. (관심을 말하자면, 여기 가능성을 극대화하고 있지 않다 내가 중요성 샘플러를 최적화하기 위해 노력하고 있어요..)

log.pr.data<-function(lambda.s,n1,n0,lambda.star,psi0,tobs,g=T.chan){ 
      print("Function log.pr.data") 
      print(g) 
      psi.s<-boundary(lambda.s,g,psi0,tobs,n1,n0) 
     -my.dbinom(n0*lambda.s,n0,lambda.star,log=TRUE) 
} 

나는 명령에 문제가 없습니다 :

nlm(log.pr.data,p=0.6,n1=n1,n0=n0,lambda.star=lambda.star,psi0=psi0,tobs=tobs) 

그것은 잘 작동을 . 하지만 나는 기회가 될 수 있기를 바랍니다 g = T.chan. 그래서 log.pr.data에서 g를 지정하지 않고 함수를 재정의했습니다. 즉, 인수 목록에서 "= T.chan"를 제거했습니다. 나는 그 기능이 정상적으로 작동하는지 확인했다. "L"의 값의 범위의 명령

log.pr.data(l,n1,n0,lambda.star,psi0,tobs,T.chan) 

와 인스턴스과 잘 작동 인수 목록에서 지정된 g = T.chan 이전 함수와 동일한 값을 제공한다. 그래서 T.chan 함수가 제대로 전달되고 나타납니다.

그때

nlm(log.pr.data,p=0.6,n1=n1,n0=n0,lambda.star=lambda.star,psi0=psi0,tobs=tobs,g=T.chan) 

을 최적화하기 위해 노력하고 내가 NLM에서 오류를

오류 (기능 (x)는 F (X, ...), P, 헤센, typsize , fscale, MSG는 : 매개 변수

에서 유효 NA 값이 단일 통화가 log.pr.data하는 것 같지 않는 것 또한 흥미 롭다 becaus e "Function log.pr.data"가 인쇄되지 않습니다. 이전에이 문제를 해결하기 위해 시도한 문제로, "f"라는 기호를 사용하여 함수가 전달되었다는 것을 깨달았습니다. nlm이 obejctive 함수 "f"를 호출했기 때문에 문제가 발생할 수 있습니다. 그래서 나는 그것을 "g"로 바꾸었다.

+0

재현 가능한 예를 게시하십시오. –

답변

1

먼저 우리는 재현 가능한 예제가 필요하다는 Eduardo Leoni의 의견에 동의합니다. 따라서 “ 실제 ” 코드를 사용해야합니다.

내 블라인드 추측으로는 R 당신이 매개 변수를 생략 할 수 있기 때문에, g가 제대로 “ 당신의 ”g과 nlm 기능에서 약식 gradtol 사이에 해결되지 있다는 것이다. 한편

, 내가 log.pr.data를 호출하여 코드 조각, nlm 진행을 시도하고 T.chan가 알려져 있지 않기 때문에 두 번째 print 문에서만 실패하는 경우.

슬프게도 작동하지 않는 (예 : 재현성이 떨어지는) 예가 없으면 무엇이 잘못되었는지 찾아내는 것이 어렵습니다.