如何在R中对每个观察点运行一个函数?

时间:2016-05-13 20:37:20

标签: r for-loop optimization mathematical-optimization

我的问题如下:

我有6000个观察数据集,其中包含来自客户的信息(每个观察结果都是客户的信息)。

我正在优化给定的函数(在我的情况下是一个利润函数),以便为我感兴趣的变量找到最佳值。特别是我正在寻找我应该提供的最优利率,以最大化我的预期利润。

我对我的功能没有任何疑问。问题是我不知道如何将此功能应用于每个观察,以获得每个6000个客户(或观察,视情况而定)的最佳利率。

到目前为止,很容易找到这个变量的UNIQUE最优(对所有客户来说都相同),这样可以最大化我的利润(这就是我猜的全局最大值)。但我需要知道的是我应该如何进行以便将我的优化问题应用于我的6000个观察中的每一个,特别是为了给每个客户提供最优利率(这是6000个最优利率,一个对于他们每个人)。

我想我应该做类似于for循环的事情,但我在这方面的经验是有限的,我已经非常沮丧了。更重要的是,我试图像往常一样使用mapply(myfunction,mydata),但我只收到错误消息。

这就是我(真的)简单代码现在的样子:

profits<- function(Rate)
  sum((Amount*(Rate-1.2)/100)*
        (1/(1+exp(0.600002438-0.140799335888812*
                    ((Previous.Rate - Rate)+(Competition.Rate - Rate))))))

整个样本的最佳结果:

> optimise(profits, lower = 0, upper = 100, maximum = TRUE)
$maximum
[1] 6.644821

$objective
[1] 1347291

所以问题是,我如何重写我的代码以最大化这个并获得我的每行的感兴趣变量的最佳值?

希望我已经清楚了!提前谢谢大家!

1 个答案:

答案 0 :(得分:0)

看来您的每个客户都是独立的。因此,您只需将lapply()放在optimize()电话周围:

lapply(customer_list, function(one_customer){
 optimise(profits, lower = 0, upper = 100, maximum = TRUE)
 })

这将返回一个非常大的列表,其中每个列表元素都有$maximum$objective。然后你可以运行lapply来计算$maximum的总和,找到你有多富有!