2017-10-01 13 views
0

次の単純なRコードでは完全に困惑しています。 最初の部分xは、vと等しくなります(これは私が欲しいものです)。同じロジックですが、単純な最適化の結果と異なる結果があります。

しかし、その後、妙第二部に私は、入力値を変更するが、最初の部分でしかし今回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は2つの根を持っている、と最適化機能が1つを見つけることですそのうち(m3=10.31207)。 m3のこの値は、a(m3)==0m1m2、及びm3の二乗の正規化された和(SS)は、3*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の3分の1に等しいので、v==xになります。

対照的に、2番目の部分では、関数aにはルートがありません。 m3=14.375で最小値に達しますが、この値がの場合、a(m3)==3.87366の値はゼロではないため、正規化された平方和は3*xと等しくないため、v(1/3のSS)は、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 
> 
関連する問題