2013-03-06 92 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)个观察值。但你可以找到最适合的方式,绘制它,看看它是否很好。