我是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
为所有sales_revenue
在24个月预测中的总和。
如果trans有太多的参数,我可以在需要时修复其中的大部分,并让B自由估计。
我认为该方法应该是修复除B
之外的所有参数,微分函数(1)(不确定它的区别)并解决非零最小值(使用约束以确保其正确的最小值和非零,在该函数上运行优化,sales_revenue*trans
的总和将等于(或接近)1,000,000。
@user2138362,你的意思是"1)sales_revenue=total_sales_revenue*trans"吗?
我假设你的参数A
, C
和D
是固定的,你想找到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
是你必须最小化的函数。您可以使用optim
,正如@iTech指出的那样。但即使在dist
的最小值,它也可能不会为零,因为你有很多(24)个观测值。但你可以找到最适合的,画出来,看看效果如何