2016-08-11 11 views
-1

我正在研究一個非常簡單的優化(線性)問題,這在Excel中非常容易,但是當我用R的optim()或優化()。其功能是獲得風險厭惡係數。 wc是受訪者的答案,儘管我自己給予了價值。R中的Optim()給了我不同的值與Excel解算器插件

p <- 0.3 
w1 <- 2.0 
w2 <- 0.0 
mean <- p*w1+(1-p)*w2 
variance <- p*w1^2+(1-p)*w2^2-mean^2 
wc <- 0.4 

f<- function(x){(abs(mean-wc+0.5*x*variance))} 
initial_x <- c(0.1) 
x_optimal <- optim(initial_x, f, method="CG") 
x_min <- x_optimal$par 
x_min 
[1] -0.4761905 

目標函數只是一個線性方程,其中一個變量和所有其他變量均已確定。 當我用Excel解算器計算它的最優值是0.4761905(是的,只有沒有減號的數字完全相同)。

我也嘗試過其他方法,比如'Brent','SANN',但他們給了我完全不同的值。 我聽說optimize()函數是用於線性優化的,所以我也試了一下,但也給了我錯誤的值。你能告訴我原因嗎?

謝謝!

+0

嗨,歡迎來到堆棧溢出。下次您發佈帖子時,請嘗試發佈[可重現的示例](http://www.stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。我們沒有任何Excel代碼,所以我不能告訴你爲什麼你的答案是不同的標誌。您的R代碼返回正確的解決方案。 Excel中答案相反的原因可能是絕對值。此外,您不應該使用基於通用梯度的優化例程來回答線性問題。只需'解決(.5 *方差,mean-wc)'返回值'0.4761905'。 – shayaa

回答

0

你沒有給你在Excel的計算如何進行的任何細節,但這些似乎是錯誤的,不R.爲了說明:

x <- (-1000:1000)/1000 
plot(x,f(x)) 

顯示的最低接近-0.5。您也可以通過將f(x)^ 2的導數設爲零來解析問題,得到(wc-mean)/(0.5*variance)的解。

請注意,優化器之間的差異很小,幾乎可以肯定地通過減少容差或增加迭代次數來減少。

optim(initial_x, f, method="CG")$par 
#[1] -0.4761905 
optim(initial_x, f, method="Brent",lower=-10, upper=10)$par 
#[1] -0.4761905 
optim(initial_x, f, method="SANN")$par 
#[1] -0.475279 
optimize(f,c(-10,10))$minimum 
#[1] -0.4761772 
相關問題