2012-04-06 2 views
4

다음은 푸 아송 분포의 람다 매개 변수의 ML 추정량을 비교하는 테스트입니다. 두 번째 열은 BFGS 방법을 사용하여 로그 우도 함수를 최대화함으로써 얻어진 ML 추정기를 나타내고있다최대 우도 추정기의 정확도

with(data.frame(x=rpois(2000, 1.5), i=LETTERS[1:20]), 
    cbind(cf=tapply(x, i, mean), 
      iter=optim(rep(1, length(levels(i))), function(par) 
      -sum(x * log(par[i]) - par[i]), method='BFGS')$par)) 

첫 번째 열 (참조) 폐쇄 형태의 용액으로부터 얻어진 ML 추정기를 나타낸다. 결과 : 그것은 반복 최적화 방법으로 얻은 추정량을 볼 수 있습니다

cf  iter 
A 1.38 1.380054 
B 1.61 1.609101 
C 1.49 1.490903 
D 1.47 1.468520 
E 1.57 1.569831 
F 1.63 1.630244 
G 1.33 1.330469 
H 1.63 1.630244 
I 1.27 1.270003 
J 1.64 1.641064 
K 1.58 1.579308 
L 1.54 1.540839 
M 1.49 1.490903 
N 1.50 1.501168 
O 1.69 1.689926 
P 1.52 1.520876 
Q 1.48 1.479891 
R 1.64 1.641064 
S 1.46 1.459310 
T 1.57 1.569831 

올바른 값에서 꽤 많이 벗어날 수 있습니다. 이것은 예상되는 것이거나 더 좋은 근사값을 산출 할 수있는 또 다른 (다차원) 최적화 기법입니까? 체이스에 의해 제공

+4

'reltol' 매개 변수는'control()'에 전달되어 수렴 임계 값을 조정할 수있게합니다. 필요한 경우 재생 해 볼 수 있습니다. 논쟁의 여지는 있지만, 폐쇄 형 솔루션을 쉽게 계산할 수없는 실제 응용 프로그램의 경우 소수점 이하 두 자리 또는 세 자리의 정확도가 불충분합니까? – Chase

+0

감사합니다. reltol = .Machine $ double.eps 설정은 모든 오류를 제거하는 것으로 보입니다. –

+0

쿨! 도움이 된 것을 기쁘게 생각합니다. 아는 바와 같이 질문에 대한 답변을 게시하고 올바른 질문으로 표시하여 다른 사람들이 귀하의 솔루션을 쉽게 볼 수 있도록 할 수 있습니다. – Chase

답변

6

답변 :

control()에 전달 당신은 컨버전스의 임계 값을 조정 수 있습니다 가져옵니다 reltol 매개 변수입니다. 필요한 경우 으로 재생해볼 수 있습니다.

편집 :

이 최대한의 정확성을 줄 것이다 이제 옵션 reltol=.Machine$double.eps을 포함하여 코드의 수정 된 버전입니다 :

with(data.frame(x=rpois(2000, 1.5), i=LETTERS[1:20]), 
    cbind(cf=tapply(x, i, mean), 
      iter=optim(rep(1, length(levels(i))), function(par) 
      -sum(x * log(par[i]) - par[i]), method='BFGS', 
      control=list(reltol=.Machine$double.eps))$par)) 

그리고 그 결과는 다음과 같습니다

cf iter 
A 1.65 1.65 
B 1.54 1.54 
C 1.80 1.80 
D 1.44 1.44 
E 1.53 1.53 
F 1.43 1.43 
G 1.52 1.52 
H 1.57 1.57 
I 1.61 1.61 
J 1.34 1.34 
K 1.62 1.62 
L 1.23 1.23 
M 1.47 1.47 
N 1.18 1.18 
O 1.38 1.38 
P 1.44 1.44 
Q 1.66 1.66 
R 1.46 1.46 
S 1.78 1.78 
T 1.52 1.52 

따라서 최적화 알고리즘의 오류 고딕체 (즉, cfiter 사이의 차이)가 0으로 줄어 들었습니다. reltol 인수를 설정하는 것 외에도

+2

위 코드의 수정 된 버전을 게시하는 것이 좋습니다. –

1

, 또한 당신이 정말로 하나 개의 매개 변수를 통해 최적화의 무리를하고 있다고 생각의 optimize 함수는 경우 (실제 문제에 대한 더 나은 작업 수, 단일 매개 변수의 경우에보다 나은 optim 작동 정말 1 차원입니다.)

+0

실제 문제는 다차원 적이며 예제에서 다차원 최적화 문제를 시뮬레이트하려고 시도했습니다. 단 하나의 매개 변수 만있는 것이 맞지만 ... 이렇게하면 더 쉽게 작성할 수 있기 때문입니다. –