我是R的新手,需要一些简单优化的帮助。
我希望随时间将变量(sales_revenue
)应用于函数变换(24个月预测值1到24)。基本上我想将产品的销售收入从后几个月推到月初。
t
时间的功能转换是:
trans=D+(t/(A+B*t+C*t^2))
然后我想解决:
1)sales_revenue = sales_revenue * trans
其中total_sales_revenue=1,000,000
(或在+/- 2.5%之内)
total_sales_revenue
是预测24个月内所有sales_revenue
的总和。
如果trans有太多参数,我可以根据需要修复大部分参数,并让B自由估计。
我认为该方法应该修复除B
之外的所有参数,区分函数(1)(不确定ti diff by)并求解非零最小值(使用约束来确保其正确的最小值和no-zero,对该函数运行优化,约束为sales_revenue*trans
的总和将等于(或接近)1,000,000。
答案 0 :(得分:1)
@ 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)个观测值。但是你可以得到最合适的,绘制它,看看它是否很好。