2013-03-06 89 views
1

我是R新手,需要一些簡單優化的幫助。R優化線性函數

我想隨着時間的推移(24個月預測值1到24)對變量(sales_revenue)應用函數轉換。基本上我想把產品的銷售收入從後幾個月推到較早的月份。

t時間的功能變換是:

trans=D+(t/(A+B*t+C*t^2)) 

我將然後要解決:

1)sales_revenue = sales_revenue *反式

其中total_sales_revenue=1,000,000(或內+/- 2.5 %)

total_sales_revenue是24個月預測中所有sales_revenue的總和。

如果trans的參數太多,我可以根據需要修復其中的大部分參數,並讓B免費估算。

我認爲這種方法應該修復除B之外的所有參數,區分函數(1)(不知道什麼樣的差異)並求解非零最小值(使用約束來確保其右極小值和零值,在該功能上運行優化,約束條件是sales_revenue*trans的總和等於(或接近)1,000,000。

+1

你試過用'optim'嗎? – iTech 2013-03-06 05:10:47

+0

感謝您的回覆,我現在正在查看優化,只是通過語法工作。如果有人曾經做過類似的事情,那麼是在一段時間之後。 – user2138362 2013-03-06 05:26:35

+0

我應該把它固定爲約.85作爲函數,沒有這個限制在0和1之間,我希望它能夠在時間序列中早期應用比例高於1的比例,然後低於1 。手動優化.85目前效果很好。對其餘的值有一個好的想法,並且只需要估計確定函數峯值高度的B. – user2138362 2013-03-06 05:39:43

回答

1

@ user2138362,您的意思是「1)sales_revenue = total_sales_revenue * trans」?

我假設你的參數ACD是固定的,你想找到B這樣,你的觀測值和你的預測值之間的距離最小化。

假設你的時間是幾個月。所以我們可以寫一個函數來給你的距離的平方:

dist <- function(B) 
{ 
t <- 1:length(sales_revenue) 

total_sales_revenue <- sum(sales_revenue) 

predicted <- total_sales_revenue * (D+(t/(A+B*t+C*t^2))) 

sum((sales_revenue-predicted)^2) 
} 

我也使用平方歐氏距離作爲距離的措施。如果情況並非如此,請進行適當的更改。

現在,dist是您必須最小化的功能。正如@iTech所指出的那樣,您可以使用optim。但即使在最低限度爲dist,它也可能不會爲零,因爲您有很多(24)個觀察值。但你可以找到最適合的方式,繪製它,看看它是否很好。