2017-10-01 11 views
0

나는 다음의 간단한 R 코드에 완전히 당혹 스럽다. 첫 번째 부분xv과 같습니다 (그게 내가 원하는 것입니다).동일한 논리이지만 R에서 간단한 최적화와 다른 결과가 나온다.

그런데 이상하게도 내가 입력 값을 변경할 수 있지만, 첫 번째 부분 그러나 이것은 시간 xv가 더 이상 일치하지에서와 동일한 논리를 따르는 두 번째 부분에! 나는 그 문제가 어디 있는지 깊이 궁금해하니?

첫 번째 부분 :

m1 = 5 
m2 = 1.3*m1 
A = m1 + m2 
x = 5 
a <- function(m3){ 
abs((m1 - (A + m3)/3)^2 + (1.3*m1 - (A + m3)/3)^2 + (m3 - (A + m3)/3)^2 - 3*x) } 

m3 = optimize(a, interval = c(0, 100), tol = 1e-20)[[1]] 

v = var(c(m1, m2, m3))*(2/3) # gives "5" same as "x" 

두 번째 부분 :

eta.sq = .25 
    beta = qnorm(c(1e-12, .999999999999)) 
    q = c(0, 25) 
mu.sig = solve(cbind(1L, beta), q) 

    m1 = mu.sig[[1]] 
    H = (mu.sig[[2]])^2 

    m2 = 1.3 * m1 
    A = m1 + m2 
    x = (H * eta.sq)/(1 - eta.sq) # "x" is: 1.052529 

    a = function(m3){ 
    abs((m1 - (A + m3)/3)^2 + (1.3*m1 - (A + m3)/3)^2 + (m3 - (A + m3)/3)^2 - 3*x) } 

    m3 = optimize(a, interval = c(0, 100), tol = 1e-20)[[1]] 

    v = var(c(m1, m2, m3))*(2/3) # "v" is: 2.343749 

답변

1

의 차이는 첫 번째의 경우, 기능 a 두 뿌리를 가지고 있으며, 최적화 기능이 하나를 발견 한 것입니다 그들 중 (m3=10.31207). m3의 값, 사실 a(m3)==0 사각형의 정규화 된 합 m1의 (SS) m2m33*x 같다는 것을 의미한다 :

> a(m3) 
[1] 3.348097e-07 
> ss <- function(x) { sum((x-mean(x))^2) } 
> ss(c(m1, m2, m3)) 
[1] 15 
> 3*x 
[1] 15 
> 

을 표본 분산의 정의에 의하면, 가변 v SS의 1/3에 해당하므로 v==x이됩니다.

반대로 두 번째 부분에서는 함수 a에 뿌리가 없습니다. m3=14.375에서 최소값을 얻지 만이 값이 m3이면 a(m3)==3.87366의 값이 0이 아니므로 정규화 된 제곱합은 3*x과 같지 않으므로 v (SS의 1/3)을 기대할 이유가 없습니다. x과 같아야합니다.

> a(m3) 
[1] 3.87366 
> ss(c(m1, m2, m3)) 
[1] 7.031247   -- actual SS value... 
> 3*x 
[1] 3.157587   -- ...couldn't be optimized to equal 3*x 
>