r - 如何将优化用作求解器?

标签 r optimization

在关于Cross ValidatedHow to simulate censored data)的问题中,我看到optim函数被用作一种求解器而不是优化器。这是一个例子:


optim(1, fn=function(scl){(pweibull(.88, shape=.5, scale=scl, lower.tail=F)-.15)^2})
# $par
# [1] 0.2445312
# ...
pweibull(.88, shape=.5, scale=0.2445312, lower.tail=F)
# [1] 0.1500135



我已经找到了关于optim here的教程,但是我仍然无法弄清楚如何使用optim作为求解器。我有几个问题:


第一个参数是什么(即传入值1)?
传入的功能是什么?
我知道这是采用Weibull概率分布并减去0.15,但是为什么要对结果求平方呢?

最佳答案

我相信您是指我的答案。让我们来看一些要点:


OP(该问题)希望从具有指定形状和比例参数的Weibull分布中生成(伪)随机数据,并且在特定的审查时间之后,将对所有数据应用审查,并最终进行预先指定的审查率。问题是,一旦您指定了其中任何三个,第四个就必须固定。除非您非常幸运,并且您指定的值恰好完美地吻合,否则您不能同时指定所有四个。碰巧的是,OP对这四个首选值并不是很幸运–不可能同时拥有这四个值。在这一点上,您可以决定指定任意三个并求解最后一个。我提供的代码是如何执行此操作的示例。
?optim的文档中所述,第一个参数是par“要对其优化的参数的[i]初始值”。

非常宽松地讲,优化例程的工作方式是,在给定函数和输入值的情况下计算输出值。然后,它“环顾四周”以查看移动到其他输入值是否会带来更好的输出值。如果确实如此,它将朝该方向移动并再次开始该过程。 (当似乎没有朝任一方向移动会产生更好的输出值时,它将停止。)

关键是必须从某处开始,并且用户必须指定该值。在每种情况下,我都是从OP的首选值开始的(尽管实际上我可以在大多数地方开始)。
我传入的函数是?pweibull。它是cumulative distribution functionWeibull distribution(CDF)。它以分位数(X值)作为输入,并返回到该点为止已通过的分布比例。因为OP希望检查该分布的最极端15%,所以我指定pweibull返回尚未通过的比例(即lower.tail=F部分)。然后,我从结果中减去.15
因此,理想的输出(从我的角度来看)将为0。但是,可以通过找到使pweibull <.15的输出的比例参数来获得小于零的值。由于optim(实际上是大多数优化程序)都找到使输出值最小的输入值,因此可以这样做。为了避免发生这种情况,我对差异进行了平方。这意味着,当优化器“过远”并找到一个比例参数,该参数从.05输出pweibull且差为-.10(即<0)时,平方将使最终输出< cc>(即> 0,或更糟)。这会将优化器推回比例参数,使+.01输出(pweibull-。15)^ 2 = 0。
通常,您对“优化器”和“求解器”的区分对我来说是不透明的。它们看起来像two different views of the same elephant
这里的另一个可能的困惑是优化与回归。 Optimization只是关于找到使函数的输出最小化(最大化)的输入值。在regression中,我们将数据概念化为来自作为stochastic函数的数据生成过程的绘图。给定一组实现值和函数形式,我们使用优化技术来估计函数的参数,从而从嘈杂的实例中提取数据生成过程。回归的一部分将分析优化的内容,但是回归的其他方面则较少关注优化,优化本身比回归要大得多。例如,在我对另一个问题的回答中优化的功能是确定性的,并且没有“数据”被分析。

关于r - 如何将优化用作求解器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31507081/

相关文章:

mysql - 将多个重复的 MySQL 查询变成一个?

r - 有没有一种比较两个数据帧的有效方法

r - R按符号分割字符串

c++ - C++ 链接器是否会自动内联函数(没有 "inline"关键字,在 header 中没有实现)?

mysql - 为什么 MySQL 优化器不使用所有列索引?

c++ - 如何加快 float 到整数的转换?

javascript - 我该怎么做才能针对 IE7/IE8 优化我的 ajax 应用程序以避免出现 "Stop running this script"?

r - 如何从 ecdfplot() 中提取 ecdf 值

r - 转换 R 中类别列的频率计数数据框

r - 如何使用 "NA"作为字符串